From 1006aed30848c774088ef58c188bd715d015af3b Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 30 Apr 2008 16:01:25 +0000 Subject: [PATCH] Windows: Made WindowsDisplayPeerInfo take hwnd and hdc arguments --- src/java/org/lwjgl/opengl/WindowsDisplay.java | 3 ++- src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java | 6 +++--- src/native/windows/org_lwjgl_opengl_Display.c | 9 ++++----- .../windows/org_lwjgl_opengl_WindowsDisplayPeerInfo.c | 8 +++++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/java/org/lwjgl/opengl/WindowsDisplay.java b/src/java/org/lwjgl/opengl/WindowsDisplay.java index 4c1e5b00..94cc1ae8 100644 --- a/src/java/org/lwjgl/opengl/WindowsDisplay.java +++ b/src/java/org/lwjgl/opengl/WindowsDisplay.java @@ -155,7 +155,7 @@ final class WindowsDisplay implements DisplayImplementation { long parent_hwnd = parent != null ? getHwnd(parent) : 0; boolean isUndecorated = isUndecorated(); nCreateWindow(mode, fullscreen, x, y, isUndecorated, parent != null, parent_hwnd); - peer_info.initDC(); + peer_info.initDC(getHwnd(), getHdc()); showWindow(getHwnd(), SW_SHOWDEFAULT); if (parent == null) { setForegroundWindow(getHwnd()); @@ -468,6 +468,7 @@ final class WindowsDisplay implements DisplayImplementation { private static native long getDllInstance(); private static native long getHwnd(); + private static native long getHdc(); private static native long getDesktopWindow(); static void centerCursor(long hwnd) { getGlobalClientRect(getHwnd(), rect); diff --git a/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java b/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java index f5ccbd3c..0d02562a 100644 --- a/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java +++ b/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java @@ -49,11 +49,11 @@ final class WindowsDisplayPeerInfo extends WindowsPeerInfo { GLContext.loadOpenGLLibrary(); } - void initDC() throws LWJGLException { - nInitDC(getHandle()); + void initDC(long hwnd, long hdc) throws LWJGLException { + nInitDC(getHandle(), hwnd, hdc); choosePixelFormat(0, 0, pixel_format, null, true, true, false, true); } - private static native void nInitDC(ByteBuffer peer_info_handle); + private static native void nInitDC(ByteBuffer peer_info_handle, long hwnd, long hdc); protected void doLockAndInitHandle() throws LWJGLException { // NO-OP diff --git a/src/native/windows/org_lwjgl_opengl_Display.c b/src/native/windows/org_lwjgl_opengl_Display.c index f7c29b75..5da1641d 100644 --- a/src/native/windows/org_lwjgl_opengl_Display.c +++ b/src/native/windows/org_lwjgl_opengl_Display.c @@ -155,15 +155,14 @@ static void handleMessages(JNIEnv *env) { } } +JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getHdc(JNIEnv *env, jclass unused) { + return (INT_PTR)display_hdc; +} + JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getHwnd(JNIEnv *env, jclass unused) { return (INT_PTR)display_hwnd; } -/* - * Class: org_lwjgl_Window - * Method: nSetTitle - * Signature: ()V - */ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_setTitle (JNIEnv * env, jobject self, jstring title_obj) { char * title = GetStringNativeChars(env, title_obj); diff --git a/src/native/windows/org_lwjgl_opengl_WindowsDisplayPeerInfo.c b/src/native/windows/org_lwjgl_opengl_WindowsDisplayPeerInfo.c index 3a6feda6..3e67ccde 100644 --- a/src/native/windows/org_lwjgl_opengl_WindowsDisplayPeerInfo.c +++ b/src/native/windows/org_lwjgl_opengl_WindowsDisplayPeerInfo.c @@ -44,8 +44,10 @@ #include "common_tools.h" JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplayPeerInfo_nInitDC - (JNIEnv *env, jclass clazz, jobject peer_info_handle) { + (JNIEnv *env, jclass clazz, jobject peer_info_handle, jlong hwnd_ptr, jlong hdc_ptr) { + HWND hwnd = (HWND)(INT_PTR)hwnd_ptr; + HDC hdc = (HDC)(INT_PTR)hdc_ptr; WindowsPeerInfo *peer_info = (WindowsPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle); - peer_info->drawable_hdc = getCurrentHDC(); - peer_info->u.hwnd = getCurrentHWND(); + peer_info->drawable_hdc = hdc; + peer_info->u.hwnd = hwnd; }