diff options
Diffstat (limited to 'media/video/capture/screen/mac/desktop_configuration.mm')
-rw-r--r-- | media/video/capture/screen/mac/desktop_configuration.mm | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/media/video/capture/screen/mac/desktop_configuration.mm b/media/video/capture/screen/mac/desktop_configuration.mm index 064c4ef..fbece48 100644 --- a/media/video/capture/screen/mac/desktop_configuration.mm +++ b/media/video/capture/screen/mac/desktop_configuration.mm @@ -21,20 +21,23 @@ namespace media { -MacDisplayConfiguration::MacDisplayConfiguration() - : id(0), - bounds(SkIRect::MakeEmpty()), - pixel_bounds(SkIRect::MakeEmpty()), - dip_to_pixel_scale(1.0f) { -} +namespace { -static SkIRect NSRectToSkIRect(const NSRect& ns_rect) { +SkIRect NSRectToSkIRect(const NSRect& ns_rect) { SkIRect result; gfx::CGRectToSkRect(NSRectToCGRect(ns_rect)).roundOut(&result); return result; } -static MacDisplayConfiguration GetConfigurationForScreen(NSScreen* screen) { +// Inverts the position of |rect| from bottom-up coordinates to top-down, +// relative to |bounds|. +void InvertRectYOrigin(const SkIRect& bounds, SkIRect* rect) { + DCHECK_EQ(0, bounds.top()); + rect->setXYWH(rect->x(), bounds.bottom() - rect->bottom(), + rect->width(), rect->height()); +} + +MacDisplayConfiguration GetConfigurationForScreen(NSScreen* screen) { MacDisplayConfiguration display_config; // Fetch the NSScreenNumber, which is also the CGDirectDisplayID. @@ -60,17 +63,26 @@ static MacDisplayConfiguration GetConfigurationForScreen(NSScreen* screen) { return display_config; } +} // namespace + +MacDisplayConfiguration::MacDisplayConfiguration() + : id(0), + bounds(SkIRect::MakeEmpty()), + pixel_bounds(SkIRect::MakeEmpty()), + dip_to_pixel_scale(1.0f) { +} + MacDesktopConfiguration::MacDesktopConfiguration() - : bounds(SkIRect::MakeEmpty()), - pixel_bounds(SkIRect::MakeEmpty()), - dip_to_pixel_scale(1.0f) { + : bounds(SkIRect::MakeEmpty()), + pixel_bounds(SkIRect::MakeEmpty()), + dip_to_pixel_scale(1.0f) { } MacDesktopConfiguration::~MacDesktopConfiguration() { } // static -MacDesktopConfiguration MacDesktopConfiguration::GetCurrent() { +MacDesktopConfiguration MacDesktopConfiguration::GetCurrent(Origin origin) { MacDesktopConfiguration desktop_config; NSArray* screens = [NSScreen screens]; @@ -92,6 +104,16 @@ MacDesktopConfiguration MacDesktopConfiguration::GetCurrent() { continue; } + // Cocoa uses bottom-up coordinates, so if the caller wants top-down then + // we need to invert the positions of secondary monitors relative to the + // primary one (the primary monitor's position is (0,0) in both systems). + if (i > 0 && origin == TopLeftOrigin) { + InvertRectYOrigin(desktop_config.displays[0].bounds, + &display_config.bounds); + InvertRectYOrigin(desktop_config.displays[0].pixel_bounds, + &display_config.pixel_bounds); + } + // Add the display to the configuration. desktop_config.displays.push_back(display_config); |