Windows: Split WindowsDisplay.nDestroyWindow into nReleaseDC and nDestroyWindow
This commit is contained in:
parent
5e06f19944
commit
9293ee4073
|
@ -170,7 +170,7 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
}
|
}
|
||||||
this.hdc = getDC(hwnd);
|
this.hdc = getDC(hwnd);
|
||||||
if (hdc == 0) {
|
if (hdc == 0) {
|
||||||
nDestroyWindow(hwnd, hdc);
|
nDestroyWindow(hwnd);
|
||||||
throw new LWJGLException("Failed to get dc");
|
throw new LWJGLException("Failed to get dc");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
@ -183,7 +183,8 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
setFocus(getHwnd());
|
setFocus(getHwnd());
|
||||||
}
|
}
|
||||||
} catch (LWJGLException e) {
|
} catch (LWJGLException e) {
|
||||||
nDestroyWindow(hwnd, hdc);
|
nReleaseDC(hwnd, hdc);
|
||||||
|
nDestroyWindow(hwnd);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -205,12 +206,14 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroyWindow() {
|
public void destroyWindow() {
|
||||||
nDestroyWindow(hwnd, hdc);
|
nReleaseDC(hwnd, hdc);
|
||||||
|
nDestroyWindow(hwnd);
|
||||||
freeLargeIcon();
|
freeLargeIcon();
|
||||||
freeSmallIcon();
|
freeSmallIcon();
|
||||||
resetCursorClipping();
|
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() {
|
static void resetCursorClipping() {
|
||||||
if (cursor_clipped) {
|
if (cursor_clipped) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -151,13 +151,6 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_DefaultSysImplementation_getJNIVersion
|
||||||
return org_lwjgl_WindowsSysImplementation_JNI_VERSION;
|
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) {
|
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;
|
HWND hwnd;
|
||||||
static bool oneShotInitialised = false;
|
static bool oneShotInitialised = false;
|
||||||
|
@ -173,10 +166,20 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEn
|
||||||
return (INT_PTR)hwnd;
|
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;
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
HDC hdc = (HDC)(INT_PTR)hdc_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) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_clientToScreen(JNIEnv *env, jclass unused, jlong hwnd_int, jobject buffer_handle) {
|
||||||
|
|
Loading…
Reference in New Issue