Windows: Split WindowsDisplay.nDestroyWindow into nReleaseDC and nDestroyWindow

This commit is contained in:
Elias Naur 2008-05-05 17:24:42 +00:00
parent 5e06f19944
commit 9293ee4073
2 changed files with 19 additions and 13 deletions

View File

@ -170,7 +170,7 @@ final class WindowsDisplay implements DisplayImplementation {
}
this.hdc = getDC(hwnd);
if (hdc == 0) {
nDestroyWindow(hwnd, hdc);
nDestroyWindow(hwnd);
throw new LWJGLException("Failed to get dc");
}
try {
@ -183,7 +183,8 @@ final class WindowsDisplay implements DisplayImplementation {
setFocus(getHwnd());
}
} catch (LWJGLException e) {
nDestroyWindow(hwnd, hdc);
nReleaseDC(hwnd, hdc);
nDestroyWindow(hwnd);
throw e;
}
}
@ -205,12 +206,14 @@ final class WindowsDisplay implements DisplayImplementation {
}
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 {

View File

@ -151,13 +151,6 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_DefaultSysImplementation_getJNIVersion
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,10 +166,20 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEn
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) {