diff options
author | Sven Gothel <[email protected]> | 2014-01-05 18:12:43 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-01-05 18:12:43 +0100 |
commit | 69b5adb37a191e746fa55e495c2d02a942833899 (patch) | |
tree | 46e21932e0c5c788f8b1e91c33270ec1ed88cbb5 | |
parent | 20b242387e6c329a2ba6261d39a05ffe9c39c6ab (diff) |
NEWT OSX: Add missing NewtCommon_init(env) (duh!) - Issuing NewtCommon_throwNewRuntimeException(..) if given references are of invalid type
Missing NewtCommon_init(env) always lead to a crash when calling NewtCommon_throwNewRuntimeException(..)
due to uninitialized clazz instances!
-rw-r--r-- | src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java | 23 | ||||
-rw-r--r-- | src/newt/native/MacWindow.m | 59 |
2 files changed, 37 insertions, 45 deletions
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java index 748604994..edeb69f84 100644 --- a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java +++ b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java @@ -401,9 +401,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl OSXUtil.RunOnMainThread(true, new Runnable() { // waitUntildone due to PointerIconImpl's Lifecycle ! @Override public void run() { - if( !setPointerIcon0(getWindowHandle(), piHandle) ) { - throw new RuntimeException("Failed: "+pi+", "+WindowDriver.this); - } + setPointerIcon0(getWindowHandle(), piHandle); } } ); } else { final OffscreenLayerSurface ols = NativeWindowFactory.getOffscreenLayerSurface(this, true); @@ -430,9 +428,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl OSXUtil.RunOnMainThread(false, new Runnable() { @Override public void run() { - if( !setPointerVisible0(getWindowHandle(), hasFocus(), pointerVisible) ) { - throw new RuntimeException("Failed"); - } + setPointerVisible0(getWindowHandle(), hasFocus(), pointerVisible); } } ); return true; // setPointerVisible0 always returns true .. } else { @@ -456,7 +452,8 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl @Override protected boolean confinePointerImpl(final boolean confine) { if( !isOffscreenInstance ) { - return confinePointer0(getWindowHandle(), confine); + confinePointer0(getWindowHandle(), confine); + return true; } // else may need offscreen solution ? FIXME return false; } @@ -464,9 +461,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl @Override protected void warpPointerImpl(final int x, final int y) { if( !isOffscreenInstance ) { - if( !warpPointer0(getWindowHandle(), x, y) ) { - throw new RuntimeException("Failed"); - } + warpPointer0(getWindowHandle(), x, y); } // else may need offscreen solution ? FIXME } @@ -621,10 +616,10 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl /** Must be called on Main-Thread */ private native void setAlwaysOnTop0(long window, boolean atop); private static native Object getLocationOnScreen0(long windowHandle, int src_x, int src_y); - private static native boolean setPointerIcon0(long windowHandle, long handle); - private static native boolean setPointerVisible0(long windowHandle, boolean hasFocus, boolean visible); - private static native boolean confinePointer0(long windowHandle, boolean confine); - private static native boolean warpPointer0(long windowHandle, int x, int y); + private static native void setPointerIcon0(long windowHandle, long handle); + private static native void setPointerVisible0(long windowHandle, boolean hasFocus, boolean visible); + private static native void confinePointer0(long windowHandle, boolean confine); + private static native void warpPointer0(long windowHandle, int x, int y); // Window styles private static final int NSBorderlessWindowMask = 0; diff --git a/src/newt/native/MacWindow.m b/src/newt/native/MacWindow.m index eb5913706..359b67b39 100644 --- a/src/newt/native/MacWindow.m +++ b/src/newt/native/MacWindow.m @@ -210,6 +210,8 @@ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_DisplayDriver_initNSAp if(initialized) return JNI_TRUE; initialized = 1; + NewtCommon_init(env); + // This little bit of magic is needed in order to receive mouse // motion events and allow key focus to be properly transferred. // FIXME: are these Carbon APIs? They come from the @@ -349,7 +351,7 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_DisplayDriver_destroyPoint { NSCursor * c = (NSCursor*) (intptr_t) handle ; if( NULL != c && NO == [c isKindOfClass:[NSCursor class]] ) { - DBG_PRINT( "Not a NSCursor %p\n", c); + NewtCommon_throwNewRuntimeException(env, "Not a NSCursor %p", c); return; } DBG_PRINT( "destroyPointerIcon0 %p\n", c); @@ -960,7 +962,7 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_close0 NSWindow *pWin = [mWin parentWindow]; DBG_PRINT( "windowClose.0 - %p [isNSWindow %d, isNewtWin %d], parent %p\n", mWin, isNSWin, isNewtWin, pWin); if( !isNewtWin ) { - DBG_PRINT( "windowClose.0 - Not a NEWT win - abort\n"); + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); return; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; @@ -1316,38 +1318,36 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setAlwaysOnTo JNIEXPORT jobject JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_getLocationOnScreen0 (JNIEnv *env, jclass unused, jlong win, jint src_x, jint src_y) { - NSObject *nsObj = (NSObject*) ((intptr_t) win); - NewtMacWindow * mWin = (NewtMacWindow*) nsObj; + NewtMacWindow *mWin = (NewtMacWindow*) (intptr_t) win; if( ![mWin isKindOfClass:[NewtMacWindow class]] ) { - DBG_PRINT("Not a NewtMacWindow %p\n", nsObj); + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); return NULL; } NSPoint p0 = [mWin getLocationOnScreen: NSMakePoint(src_x, src_y)]; return (*env)->NewObject(env, pointClz, pointCstr, (jint)p0.x, (jint)p0.y); } -JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointerIcon0 +JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointerIcon0 (JNIEnv *env, jobject unused, jlong window, jlong handle) { NSCursor *c = (NSCursor*) (intptr_t) handle ; if ( NULL != c && NO == [c isKindOfClass:[NSCursor class]] ) { - DBG_PRINT("Not a NSCursor %p\n", c); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NSCursor %p", c); + return; } NewtMacWindow *mWin = (NewtMacWindow*) (intptr_t) window; if( ! [mWin isKindOfClass:[NewtMacWindow class]] ) { - DBG_PRINT("Not a NewtMacWindow %p\n", mWin); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); + return; } NewtView* nView = (NewtView *) [mWin contentView]; if( ! [nView isKindOfClass:[NewtView class]] ) { - DBG_PRINT("Not a NewtView %p\n", nView); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtView %p", nView); + return; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [nView setPointerIcon: c]; [pool release]; - return JNI_TRUE; } /* @@ -1355,24 +1355,23 @@ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointe * Method: setPointerVisible0 * Signature: (JZ)Z */ -JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointerVisible0 +JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointerVisible0 (JNIEnv *env, jclass clazz, jlong window, jboolean hasFocus, jboolean mouseVisible) { NewtMacWindow *mWin = (NewtMacWindow*) ((intptr_t) window); if( ! [mWin isKindOfClass:[NewtMacWindow class]] ) { - DBG_PRINT("Not a NewtMacWindow %p\n", mWin); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); + return; } NewtView* nView = (NewtView *) [mWin contentView]; if( ! [nView isKindOfClass:[NewtView class]] ) { - DBG_PRINT("Not a NewtView %p\n", nView); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtView %p", nView); + return; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [nView setMouseVisible: ( JNI_TRUE == mouseVisible ) ? YES : NO hasFocus: ( JNI_TRUE == hasFocus ) ? YES : NO]; [pool release]; - return JNI_TRUE; } /* @@ -1380,23 +1379,22 @@ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_setPointe * Method: confinePointer0 * Signature: (JZ)Z */ -JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_confinePointer0 +JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_confinePointer0 (JNIEnv *env, jclass clazz, jlong window, jboolean confine) { NewtMacWindow *mWin = (NewtMacWindow*) ((intptr_t) window); if( ! [mWin isKindOfClass:[NewtMacWindow class]] ) { - DBG_PRINT("Not a NewtMacWindow %p\n", mWin); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); + return; } NewtView* nView = (NewtView *) [mWin contentView]; if( ! [nView isKindOfClass:[NewtView class]] ) { - DBG_PRINT("Not a NewtView %p\n", nView); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtView %p", nView); + return; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [nView setMouseConfined: ( JNI_TRUE == confine ) ? YES : NO]; [pool release]; - return JNI_TRUE; } /* @@ -1404,22 +1402,21 @@ JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_confinePo * Method: warpPointer0 * Signature: (JJII)V */ -JNIEXPORT jboolean JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_warpPointer0 +JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_WindowDriver_warpPointer0 (JNIEnv *env, jclass clazz, jlong window, jint x, jint y) { NewtMacWindow *mWin = (NewtMacWindow*) ((intptr_t) window); if( ! [mWin isKindOfClass:[NewtMacWindow class]] ) { - DBG_PRINT("Not a NewtMacWindow %p\n", mWin); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtMacWindow %p", mWin); + return; } NewtView* nView = (NewtView *) [mWin contentView]; if( ! [nView isKindOfClass:[NewtView class]] ) { - DBG_PRINT("Not a NewtView %p\n", nView); - return JNI_FALSE; + NewtCommon_throwNewRuntimeException(env, "Not a NewtView %p", nView); + return; } NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [nView setMousePosition: [mWin newtRelClientTLWinPos2AbsBLScreenPos: NSMakePoint(x, y)]]; [pool release]; - return JNI_TRUE; } |