| Index: ui/gfx/screen_mac.mm
|
| diff --git a/ui/gfx/screen_mac.mm b/ui/gfx/screen_mac.mm
|
| index 325c679209d52523ba4d7927768e52384a6d2e13..986f2cd5e1a0318140f5f0d060ec147b044f20d6 100644
|
| --- a/ui/gfx/screen_mac.mm
|
| +++ b/ui/gfx/screen_mac.mm
|
| @@ -75,94 +75,109 @@ gfx::Display GetDisplayForScreen(NSScreen* screen, bool is_primary) {
|
| return display;
|
| }
|
|
|
| -} // namespace
|
| +class ScreenMac : public gfx::Screen {
|
| + public:
|
| + ScreenMac() {}
|
|
|
| -namespace gfx {
|
| + virtual bool IsDIPEnabled() OVERRIDE {
|
| + return true;
|
| + }
|
|
|
| -// static
|
| -bool Screen::IsDIPEnabled() {
|
| - return true;
|
| -}
|
| + virtual gfx::Point GetCursorScreenPoint() OVERRIDE {
|
| + NSPoint mouseLocation = [NSEvent mouseLocation];
|
| + // Flip coordinates to gfx (0,0 in top-left corner) using primary screen.
|
| + NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
|
| + mouseLocation.y = NSMaxY([screen frame]) - mouseLocation.y;
|
| + return gfx::Point(mouseLocation.x, mouseLocation.y);
|
| + }
|
|
|
| -// static
|
| -gfx::Point Screen::GetCursorScreenPoint() {
|
| - NSPoint mouseLocation = [NSEvent mouseLocation];
|
| - // Flip coordinates to gfx (0,0 in top-left corner) using primary screen.
|
| - NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
|
| - mouseLocation.y = NSMaxY([screen frame]) - mouseLocation.y;
|
| - return gfx::Point(mouseLocation.x, mouseLocation.y);
|
| -}
|
| + virtual gfx::NativeWindow GetWindowAtCursorScreenPoint() OVERRIDE {
|
| + NOTIMPLEMENTED();
|
| + return gfx::NativeWindow();
|
| + }
|
|
|
| -// static
|
| -gfx::Display Screen::GetDisplayNearestWindow(gfx::NativeView view) {
|
| - NSWindow* window = [view window];
|
| - if (!window)
|
| - return GetPrimaryDisplay();
|
| - NSScreen* match_screen = [window screen];
|
| - return GetDisplayForScreen(match_screen, false /* may not be primary */);
|
| -}
|
| + virtual int GetNumDisplays() OVERRIDE {
|
| + // Don't just return the number of online displays. It includes displays
|
| + // that mirror other displays, which are not desired in the count. It's
|
| + // tempting to use the count returned by CGGetActiveDisplayList, but active
|
| + // displays exclude sleeping displays, and those are desired in the count.
|
| +
|
| + // It would be ridiculous to have this many displays connected, but
|
| + // CGDirectDisplayID is just an integer, so supporting up to this many
|
| + // doesn't hurt.
|
| + CGDirectDisplayID online_displays[128];
|
| + CGDisplayCount online_display_count = 0;
|
| + if (CGGetOnlineDisplayList(arraysize(online_displays),
|
| + online_displays,
|
| + &online_display_count) != kCGErrorSuccess) {
|
| + // 1 is a reasonable assumption.
|
| + return 1;
|
| + }
|
|
|
| -// static
|
| -gfx::Display Screen::GetDisplayMatching(const gfx::Rect& match_rect) {
|
| - NSScreen* match_screen = GetMatchingScreen(match_rect);
|
| - return GetDisplayForScreen(match_screen, false /* may not be primary */);
|
| -}
|
| + int display_count = 0;
|
| + for (CGDisplayCount online_display_index = 0;
|
| + online_display_index < online_display_count;
|
| + ++online_display_index) {
|
| + CGDirectDisplayID online_display = online_displays[online_display_index];
|
| + if (CGDisplayMirrorsDisplay(online_display) == kCGNullDirectDisplay) {
|
| + // If this display doesn't mirror any other, include it in the count.
|
| + // The primary display in a mirrored set will be counted, but those that
|
| + // mirror it will not be.
|
| + ++display_count;
|
| + }
|
| + }
|
|
|
| -// static
|
| -gfx::Display Screen::GetPrimaryDisplay() {
|
| - // Primary display is defined as the display with the menubar,
|
| - // which is always at index 0.
|
| - NSScreen* primary = [[NSScreen screens] objectAtIndex:0];
|
| - gfx::Display display = GetDisplayForScreen(primary, true /* primary */);
|
| - return display;
|
| -}
|
| + return display_count;
|
| + }
|
|
|
| -// static
|
| -int Screen::GetNumDisplays() {
|
| - // Don't just return the number of online displays. It includes displays
|
| - // that mirror other displays, which are not desired in the count. It's
|
| - // tempting to use the count returned by CGGetActiveDisplayList, but active
|
| - // displays exclude sleeping displays, and those are desired in the count.
|
| -
|
| - // It would be ridiculous to have this many displays connected, but
|
| - // CGDirectDisplayID is just an integer, so supporting up to this many
|
| - // doesn't hurt.
|
| - CGDirectDisplayID online_displays[128];
|
| - CGDisplayCount online_display_count = 0;
|
| - if (CGGetOnlineDisplayList(arraysize(online_displays),
|
| - online_displays,
|
| - &online_display_count) != kCGErrorSuccess) {
|
| - // 1 is a reasonable assumption.
|
| - return 1;
|
| + virtual gfx::Display GetDisplayNearestWindow(
|
| + gfx::NativeView view) const OVERRIDE {
|
| + NSWindow* window = [view window];
|
| + if (!window)
|
| + return GetPrimaryDisplay();
|
| + NSScreen* match_screen = [window screen];
|
| + return GetDisplayForScreen(match_screen, false /* may not be primary */);
|
| }
|
|
|
| - int display_count = 0;
|
| - for (CGDisplayCount online_display_index = 0;
|
| - online_display_index < online_display_count;
|
| - ++online_display_index) {
|
| - CGDirectDisplayID online_display = online_displays[online_display_index];
|
| - if (CGDisplayMirrorsDisplay(online_display) == kCGNullDirectDisplay) {
|
| - // If this display doesn't mirror any other, include it in the count.
|
| - // The primary display in a mirrored set will be counted, but those that
|
| - // mirror it will not be.
|
| - ++display_count;
|
| + virtual gfx::Display GetDisplayNearestPoint(
|
| + const gfx::Point& point) const OVERRIDE {
|
| + NSPoint ns_point = NSPointFromCGPoint(point.ToCGPoint());
|
| +
|
| + NSArray* screens = [NSScreen screens];
|
| + NSScreen* primary = [screens objectAtIndex:0];
|
| + for (NSScreen* screen in screens) {
|
| + if (NSMouseInRect(ns_point, [screen frame], NO))
|
| + return GetDisplayForScreen(screen, screen == primary);
|
| }
|
| + return GetPrimaryDisplay();
|
| }
|
|
|
| - return display_count;
|
| -}
|
| -
|
| -// static
|
| -gfx::Display Screen::GetDisplayNearestPoint(const gfx::Point& point) {
|
| - NSPoint ns_point = NSPointFromCGPoint(point.ToCGPoint());
|
| + // Returns the display that most closely intersects the provided bounds.
|
| + virtual gfx::Display GetDisplayMatching(
|
| + const gfx::Rect& match_rect) const OVERRIDE {
|
| + NSScreen* match_screen = GetMatchingScreen(match_rect);
|
| + return GetDisplayForScreen(match_screen, false /* may not be primary */);
|
| + }
|
|
|
| - NSArray* screens = [NSScreen screens];
|
| - NSScreen* primary = [screens objectAtIndex:0];
|
| - for (NSScreen* screen in screens) {
|
| - if (NSMouseInRect(ns_point, [screen frame], NO))
|
| - return GetDisplayForScreen(screen, screen == primary);
|
| + // Returns the primary display.
|
| + virtual gfx::Display GetPrimaryDisplay() const OVERRIDE {
|
| + // Primary display is defined as the display with the menubar,
|
| + // which is always at index 0.
|
| + NSScreen* primary = [[NSScreen screens] objectAtIndex:0];
|
| + gfx::Display display = GetDisplayForScreen(primary, true /* primary */);
|
| + return display;
|
| }
|
| - return GetPrimaryDisplay();
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ScreenMac);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +namespace gfx {
|
| +
|
| +Screen* CreateNativeScreen() {
|
| + return new ScreenMac;
|
| }
|
|
|
| -} // namespace gfx
|
| +}
|
|
|