From: <eli...@us...> - 2008-05-05 17:24:43
|
Revision: 3066 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3066&view=rev Author: elias_naur Date: 2008-05-05 10:24:42 -0700 (Mon, 05 May 2008) Log Message: ----------- Windows: Split WindowsDisplay.nDestroyWindow into nReleaseDC and nDestroyWindow Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-05-05 16:46:16 UTC (rev 3065) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-05-05 17:24:42 UTC (rev 3066) @@ -170,7 +170,7 @@ } this.hdc = getDC(hwnd); if (hdc == 0) { - nDestroyWindow(hwnd, hdc); + nDestroyWindow(hwnd); throw new LWJGLException("Failed to get dc"); } try { @@ -183,7 +183,8 @@ setFocus(getHwnd()); } } catch (LWJGLException e) { - nDestroyWindow(hwnd, hdc); + nReleaseDC(hwnd, hdc); + nDestroyWindow(hwnd); throw e; } } @@ -205,12 +206,14 @@ } public void destroyWindow() { - nDestroyWindow(hwnd, hdc); + nReleaseDC(hwnd, hdc); + nDestroyWindow(hwnd); freeLargeIcon(); freeSmallIcon(); resetCursorClipping(); } - private static native void nDestroyWindow(long hwnd, long hdc); + private static native void nReleaseDC(long hwnd, long hdc); + private static native void nDestroyWindow(long hwnd); static void resetCursorClipping() { if (cursor_clipped) { try { Modified: trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c =================================================================== --- trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c 2008-05-05 16:46:16 UTC (rev 3065) +++ trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c 2008-05-05 17:24:42 UTC (rev 3066) @@ -151,13 +151,6 @@ return org_lwjgl_WindowsSysImplementation_JNI_VERSION; } -static void destroyWindow(JNIEnv *env, HWND *hwnd, HDC *hdc) { - jclass display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(*hwnd, GWLP_USERDATA); - closeWindow(hwnd, hdc); - if (display_class_global != NULL) - (*env)->DeleteGlobalRef(env, display_class_global); -} - JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEnv *env, jobject self, jboolean fullscreen, jint x, jint y, jint width, jint height, jboolean undecorated, jboolean child_window, jlong parent_hwnd) { HWND hwnd; static bool oneShotInitialised = false; @@ -173,12 +166,22 @@ return (INT_PTR)hwnd; } -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nDestroyWindow(JNIEnv *env, jclass clazz, jlong hwnd_ptr, jlong hdc_ptr) { +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nReleaseDC(JNIEnv *env, jclass clazz, jlong hwnd_ptr, jlong hdc_ptr) { HWND hwnd = (HWND)(INT_PTR)hwnd_ptr; HDC hdc = (HDC)(INT_PTR)hdc_ptr; - destroyWindow(env, &hwnd, &hdc); + ReleaseDC(hwnd, hdc); } +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nDestroyWindow(JNIEnv *env, jclass clazz, jlong hwnd_ptr) { + jclass display_class_global; + HWND hwnd = (HWND)(INT_PTR)hwnd_ptr; + display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(hwnd, GWLP_USERDATA); + ShowWindow(hwnd, SW_HIDE); + DestroyWindow(hwnd); + if (display_class_global != NULL) + (*env)->DeleteGlobalRef(env, display_class_global); +} + JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_clientToScreen(JNIEnv *env, jclass unused, jlong hwnd_int, jobject buffer_handle) { HWND hwnd = (HWND)(INT_PTR)hwnd_int; POINT point; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |