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

Unified Diff: media/video/capture/screen/mac/desktop_configuration.mm

Issue 12221103: Fix ScreenCapturerMac handling of secondary configurations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update comments. Created 7 years, 10 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: media/video/capture/screen/mac/desktop_configuration.mm
diff --git a/media/video/capture/screen/mac/desktop_configuration.mm b/media/video/capture/screen/mac/desktop_configuration.mm
index 064c4efa77e1871836fbd620f3171f955c14e387..9f96d298ddd1c352f992df6d56d3d19561cf540e 100644
--- a/media/video/capture/screen/mac/desktop_configuration.mm
+++ b/media/video/capture/screen/mac/desktop_configuration.mm
@@ -21,20 +21,24 @@
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| about the horizontal mid-point of |bounds|.
+// If |bounds| refers to a Cartesian coordinate space then this effectively
+// converts |rect| from Cartesian (bottom-left origin) to inverse-Cartesian
+// (top-left origin) coordinates.
+void InvertRectYOrigin(const SkIRect& bounds, SkIRect* rect) {
+ rect->setXYWH(rect->x(), bounds.top() + bounds.bottom() - rect->bottom(),
+ rect->width(), rect->height());
Jamie 2013/02/11 23:56:15 As discussed, please remove top() from the equatio
+}
+
+MacDisplayConfiguration GetConfigurationForScreen(NSScreen* screen) {
MacDisplayConfiguration display_config;
// Fetch the NSScreenNumber, which is also the CGDirectDisplayID.
@@ -49,7 +53,7 @@ static MacDisplayConfiguration GetConfigurationForScreen(NSScreen* screen) {
// If the host is running Mac OS X 10.7+ or later, query the scaling factor
// between logical and physical (aka "backing") pixels, otherwise assume 1:1.
if ([screen respondsToSelector:@selector(backingScaleFactor)] &&
- [screen respondsToSelector:@selector(convertRectToBacking:)]) {
+ [screen respondsToSelector:@selector(convertRectToBacking:)]) {
display_config.dip_to_pixel_scale = [screen backingScaleFactor];
NSRect ns_pixel_bounds = [screen convertRectToBacking: ns_bounds];
display_config.pixel_bounds = NSRectToSkIRect(ns_pixel_bounds);
@@ -60,6 +64,15 @@ 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()),
@@ -70,7 +83,7 @@ MacDesktopConfiguration::~MacDesktopConfiguration() {
}
// static
-MacDesktopConfiguration MacDesktopConfiguration::GetCurrent() {
+MacDesktopConfiguration MacDesktopConfiguration::GetCurrent(Origin origin) {
MacDesktopConfiguration desktop_config;
NSArray* screens = [NSScreen screens];
@@ -92,6 +105,16 @@ MacDesktopConfiguration MacDesktopConfiguration::GetCurrent() {
continue;
}
+ // Mac uses Cartesian (bottom-left origin) coordinates, so if the caller
+ // wants inverse Cartesian (top-left origin), secondary monitors need
+ // their coordinates inverting relative to the primary monitor's bounds.
+ 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);

Powered by Google App Engine
This is Rietveld 408576698