Repository: cordova-osx
Updated Branches:
  refs/heads/master 15081af1e -> 2f0f8e73a


CB-11510 OSX app doesn't properly span all vertical displays


Project: http://git-wip-us.apache.org/repos/asf/cordova-osx/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-osx/commit/2f0f8e73
Tree: http://git-wip-us.apache.org/repos/asf/cordova-osx/tree/2f0f8e73
Diff: http://git-wip-us.apache.org/repos/asf/cordova-osx/diff/2f0f8e73

Branch: refs/heads/master
Commit: 2f0f8e73a29aaa331f47adc0c851a09308fb7772
Parents: 15081af
Author: Tobias Bocanegra <[email protected]>
Authored: Wed Jun 29 17:25:59 2016 -0700
Committer: Tobias Bocanegra <[email protected]>
Committed: Wed Jun 29 17:25:59 2016 -0700

----------------------------------------------------------------------
 .../Classes/Commands/CDVWindowSizeCommand.m     |  4 +-
 .../CordovaLib/Classes/Utils/NSScreen+Utils.h   |  4 -
 .../CordovaLib/Classes/Utils/NSScreen+Utils.m   | 81 ++++++++++----------
 3 files changed, 43 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-osx/blob/2f0f8e73/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
----------------------------------------------------------------------
diff --git a/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m 
b/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
index a8c9307..69abc92 100644
--- a/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
+++ b/CordovaLib/CordovaLib/Classes/Commands/CDVWindowSizeCommand.m
@@ -31,7 +31,7 @@ static NSRect savedFrameRect;
  */
 + (void) makeFullScreen:(NSWindow*) window {
     NSRect fullScreenRect = [NSScreen fullScreenRect];
-    NSLog(@"Full screen resolution: %.1f x %.1f", fullScreenRect.size.width, 
fullScreenRect.size.height);
+    NSLog(@"Full screen resolution: %.f x %.f", fullScreenRect.size.width, 
fullScreenRect.size.height);
     [window setStyleMask:window.styleMask & ~NSTitledWindowMask];
     [window setHidesOnDeactivate:YES];
     [window setLevel:NSMainMenuWindowLevel + 1];
@@ -61,7 +61,7 @@ static NSRect savedFrameRect;
 }
 
 + (void) setSizeOfWindow:(NSWindow*) window size:(NSSize) size {
-    NSLog(@"Set window size to %.1f x %.1f", size.width, size.height);
+    NSLog(@"Set window size to %.f x %.f", size.width, size.height);
     NSRect frameRect = window.frame;
     frameRect.size = size;
     [window setFrame:frameRect display:YES];

http://git-wip-us.apache.org/repos/asf/cordova-osx/blob/2f0f8e73/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
----------------------------------------------------------------------
diff --git a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h 
b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
index 8a48090..6ac73b6 100644
--- a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
+++ b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.h
@@ -21,10 +21,6 @@
 
 @interface NSScreen (Utils)
 
-+ (NSArray*) sortedScreens;
-
-+ (NSArray*) sortedScreenRects;
-
 + (NSRect) fullScreenRect;
 
 @end

http://git-wip-us.apache.org/repos/asf/cordova-osx/blob/2f0f8e73/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
----------------------------------------------------------------------
diff --git a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m 
b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
index 30a0da3..0255149 100644
--- a/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
+++ b/CordovaLib/CordovaLib/Classes/Utils/NSScreen+Utils.m
@@ -18,56 +18,57 @@
  */
 
 #import "NSScreen+Utils.h"
+#import <IOKit/graphics/IOGraphicsLib.h>
 
-@implementation NSScreen (Utils)
-
-+ (NSArray*) sortedScreens {
-    NSArray* sortedScreens = [[NSScreen screens] 
sortedArrayUsingComparator:^NSComparisonResult(NSScreen* screen1, NSScreen* 
screen2) {
-        if (screen1.frame.origin.x > screen2.frame.origin.x) {
-            return (NSComparisonResult) NSOrderedDescending;
-        }
-
-        if (screen1.frame.origin.x < screen2.frame.origin.x) {
-            return (NSComparisonResult) NSOrderedAscending;
-        }
-
-        return (NSComparisonResult) NSOrderedSame;
-    }];
-    return sortedScreens;
-}
-
-+ (NSArray*) sortedScreenRects {
-    NSMutableArray* screenWidths = [[NSMutableArray alloc] init];
-    NSRect mainScreenRect;
+NSString* screenNameForDisplay(CGDirectDisplayID displayID) {
+    NSString *screenName = nil;
 
-    mainScreenRect = [[NSScreen mainScreen] frame];
-    [screenWidths addObject:[NSValue valueWithRect:mainScreenRect]];
+    NSDictionary *deviceInfo = (__bridge NSDictionary *) 
IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), 
kIODisplayOnlyPreferredName);
+    NSDictionary *localizedNames = deviceInfo[[NSString 
stringWithUTF8String:kDisplayProductName]];
 
-    NSArray* sortedScreens = [self sortedScreens];
-
-    for (NSScreen* screen in sortedScreens) {
-        if ([screen isNotEqualTo:[NSScreen mainScreen]] &&
-                screen.frame.origin.y + screen.frame.size.height == 
mainScreenRect.origin.y + mainScreenRect.size.height &&
-                screen.frame.origin.x > mainScreenRect.origin.x) {
-            [screenWidths addObject:[NSValue valueWithRect:screen.frame]];
-        }
+    if ([localizedNames count] > 0) {
+        screenName = localizedNames[[localizedNames allKeys][0]];
     }
 
-    return screenWidths;
+    return screenName;
 }
 
-+ (NSRect) fullScreenRect {
-    NSArray* screenRects = [self sortedScreenRects];
-    NSRect rect = [[NSScreen mainScreen] frame];
-    CGFloat finalWidth = 0.0f;
+@implementation NSScreen (Utils)
 
-    for (NSValue* rectValue in screenRects) {
-        finalWidth += [rectValue rectValue].size.width;
++ (NSRect) fullScreenRect {
+    CGFloat x0 = 0.0f;
+    CGFloat y0 = 0.0f;
+    CGFloat x1 = 0.0f;
+    CGFloat y1 = 0.0f;
+
+    NSArray* screens = [NSScreen screens];
+    NSLog(@"Detected %lu display%s:", screens.count, screens.count > 1 ? "s" : 
"");
+    for (NSScreen* screen in [NSScreen screens]) {
+        NSNumber* screenID = [screen.deviceDescription 
objectForKey:@"NSScreenNumber"];
+        CGDirectDisplayID aID = [screenID unsignedIntValue];
+        NSLog(@"- %@ at: %.lf,%.lf size: %.lf x %.lf", 
screenNameForDisplay(aID),
+                screen.frame.origin.x, screen.frame.origin.y,
+                screen.frame.size.width, screen.frame.size.height);
+
+        if (NSMinX(screen.frame) < x0) {
+            x0 = NSMinX(screen.frame);
+        };
+        if (NSMinY(screen.frame) < y0) {
+            y0 = NSMinY(screen.frame);
+        };
+        if (NSMaxX(screen.frame) > x1) {
+            x1 = NSMaxX(screen.frame);
+        };
+        if (NSMaxY(screen.frame) > y1) {
+            y1 = NSMaxY(screen.frame);
+        };
+    }
+    if ([NSScreen screensHaveSeparateSpaces] && screens.count > 1) {
+        NSLog(@"Fullscreen only possible to cover main screen. Disable 
'Displays have separate Spaces' in 'System Preferences -> Mission Control' to 
span all displays.");
+        return [NSScreen mainScreen].frame;
     }
 
-    rect.size.width = finalWidth;
-
-    return rect;
+    return NSMakeRect(x0, y0, x1-x0, y1-y0);
 }
 
 @end


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to