Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(511)

Unified Diff: ui/gfx/screen_mac.mm

Issue 11030017: Add context to gfx::Screen calls in support of simultaneous desktop+ash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix some new gfx::Screen additions Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+}

Powered by Google App Engine
This is Rietveld 408576698