// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ui/gfx/mac/coordinate_conversion.h"

#import <Cocoa/Cocoa.h>

#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"

namespace gfx {

namespace {

// The height of the primary display, which OSX defines as the monitor with the
// menubar. This is always at index 0.
CGFloat PrimaryDisplayHeight() {
  return NSMaxY([[[NSScreen screens] firstObject] frame]);
}

}  // namespace

NSRect ScreenRectToNSRect(const Rect& rect) {
  return NSMakeRect(rect.x(), PrimaryDisplayHeight() - rect.y() - rect.height(), rect.width(),
                    rect.height());
}

Rect ScreenRectFromNSRect(const NSRect& rect) {
  return Rect(rect.origin.x, PrimaryDisplayHeight() - rect.origin.y - rect.size.height,
              rect.size.width, rect.size.height);
}

NSPoint ScreenPointToNSPoint(const Point& point) {
  return NSMakePoint(point.x(), PrimaryDisplayHeight() - point.y());
}

Point ScreenPointFromNSPoint(const NSPoint& point) {
  return Point(point.x, PrimaryDisplayHeight() - point.y);
}

}  // namespace gfx
