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]
