diff options
author | Sven Gothel <[email protected]> | 2015-03-21 04:37:39 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2015-03-21 04:37:39 +0100 |
commit | 7438540ee6604cf91e14f12da891834d4cd83cfe (patch) | |
tree | f08c7ebae83b406450b83c6b8f17c608ad1c7c48 /src/nativewindow/native/macosx/OSXmisc.m | |
parent | 9a8ae7c79cb6a89626eeb6a9a00fc9e32f9c0a71 (diff) |
Bug 1148 - OSX MonitorDevice: Use unique and native deviceID instead of index
Adopt to bug 1147, commit 2c88b6dfd4eb7e2cd9a50fa48e08ecafc980931a.
Using the native unique deviceID makes monitor identification more robust.
This also allows us simplify
displayID -> NSScreen-idx -> MonitorDevice
into
displayID -> MonitorDevice
and to survive a primary monitor change.
Diffstat (limited to 'src/nativewindow/native/macosx/OSXmisc.m')
-rw-r--r-- | src/nativewindow/native/macosx/OSXmisc.m | 72 |
1 files changed, 9 insertions, 63 deletions
diff --git a/src/nativewindow/native/macosx/OSXmisc.m b/src/nativewindow/native/macosx/OSXmisc.m index 87494e946..919108db9 100644 --- a/src/nativewindow/native/macosx/OSXmisc.m +++ b/src/nativewindow/native/macosx/OSXmisc.m @@ -138,6 +138,9 @@ Java_jogamp_nativewindow_macosx_OSXUtil_isNSWindow0(JNIEnv *env, jclass _unused, } static CGDirectDisplayID OSXUtil_getCGDirectDisplayIDByNSScreen(NSScreen *screen) { + if( NULL == screen ) { + return (CGDirectDisplayID)0; + } // Mind: typedef uint32_t CGDirectDisplayID; NSDictionary * dict = [screen deviceDescription]; NSNumber * val = (NSNumber *) [dict objectForKey: @"NSScreenNumber"]; @@ -154,19 +157,7 @@ static NSScreen * OSXUtil_getNSScreenByCGDirectDisplayID(CGDirectDisplayID displ return screen; } } - return (NSScreen *) [screens objectAtIndex: 0]; -} -static int OSXUtil_getNSScreenIdxByCGDirectDisplayID(CGDirectDisplayID displayID) { - NSArray *screens = [NSScreen screens]; - int i; - for(i=[screens count]-1; i>=0; i--) { - NSScreen * screen = (NSScreen *) [screens objectAtIndex: i]; - CGDirectDisplayID dID = OSXUtil_getCGDirectDisplayIDByNSScreen(screen); - if( dID == displayID ) { - return i; - } - } - return -1; + return NULL; } /* @@ -275,52 +266,6 @@ JNIEXPORT jobject JNICALL Java_jogamp_nativewindow_macosx_OSXUtil_GetInsets0 /* * Class: Java_jogamp_nativewindow_macosx_OSXUtil - * Method: GetNSScreenIdx0 - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_jogamp_nativewindow_macosx_OSXUtil_GetNSScreenIdx0 - (JNIEnv *env, jclass unused, jint displayID) -{ - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - - int idx = OSXUtil_getNSScreenIdxByCGDirectDisplayID((CGDirectDisplayID)displayID); - [pool release]; - - return idx; -} - -/* - * Class: Java_jogamp_nativewindow_macosx_OSXUtil - * Method: GetPixelScale0 - * Signature: (I)D - */ -JNIEXPORT jdouble JNICALL Java_jogamp_nativewindow_macosx_OSXUtil_GetPixelScale0 - (JNIEnv *env, jclass unused, jint screen_idx) -{ - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - - CGFloat pixelScale; - NSScreen *screen; - NSArray *screens = [NSScreen screens]; - if( screen_idx<0 || screen_idx>=[screens count] ) { - screen = NULL; - pixelScale = 1.0; - } else { - screen = (NSScreen *) [screens objectAtIndex: screen_idx]; - pixelScale = 1.0; // default -NS_DURING - // Available >= 10.7 - pixelScale = [screen backingScaleFactor]; // HiDPI scaling -NS_HANDLER -NS_ENDHANDLER - } - [pool release]; - - return (jdouble)pixelScale; -} - -/* - * Class: Java_jogamp_nativewindow_macosx_OSXUtil * Method: GetPixelScale1 * Signature: (I)D */ @@ -329,14 +274,15 @@ JNIEXPORT jdouble JNICALL Java_jogamp_nativewindow_macosx_OSXUtil_GetPixelScale1 { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - CGFloat pixelScale; + CGFloat pixelScale = 1.0; // default NSScreen *screen = OSXUtil_getNSScreenByCGDirectDisplayID((CGDirectDisplayID)displayID); - pixelScale = 1.0; // default + if( NULL != screen ) { NS_DURING - // Available >= 10.7 - pixelScale = [screen backingScaleFactor]; // HiDPI scaling + // Available >= 10.7 + pixelScale = [screen backingScaleFactor]; // HiDPI scaling NS_HANDLER NS_ENDHANDLER + } [pool release]; return (jdouble)pixelScale; |