Windows: Moved hwnd and hdc to java
This commit is contained in:
parent
1006aed308
commit
bcb909f5a9
|
@ -31,6 +31,12 @@
|
||||||
*/
|
*/
|
||||||
package org.lwjgl;
|
package org.lwjgl;
|
||||||
|
|
||||||
|
import java.security.PrivilegedExceptionAction;
|
||||||
|
import java.security.PrivilegedActionException;
|
||||||
|
import java.security.AccessController;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.Display;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -39,7 +45,7 @@ package org.lwjgl;
|
||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
final class WindowsSysImplementation extends DefaultSysImplementation {
|
final class WindowsSysImplementation extends DefaultSysImplementation {
|
||||||
private final static int JNI_VERSION = 16;
|
private final static int JNI_VERSION = 17;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Sys.initialize();
|
Sys.initialize();
|
||||||
|
@ -53,9 +59,40 @@ final class WindowsSysImplementation extends DefaultSysImplementation {
|
||||||
return 1000;
|
return 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public native long getTime();
|
public long getTime() {
|
||||||
|
return nGetTime();
|
||||||
|
}
|
||||||
|
private static native long nGetTime();
|
||||||
|
|
||||||
public native void alert(String title, String message);
|
private static long getHwnd() {
|
||||||
|
/* Use reflection since we can't make Display.getImplementation
|
||||||
|
* public
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
Long hwnd_obj = (Long)AccessController.doPrivileged(new PrivilegedExceptionAction() {
|
||||||
|
public Object run() throws Exception {
|
||||||
|
Method getImplementation_method = Display.class.getDeclaredMethod("getImplementation", null);
|
||||||
|
getImplementation_method.setAccessible(true);
|
||||||
|
Object display_impl = getImplementation_method.invoke(null, null);
|
||||||
|
if (display_impl == null)
|
||||||
|
return null;
|
||||||
|
Class WindowsDisplay_class = Class.forName("org.lwjgl.opengl.WindowsDisplay");
|
||||||
|
Method getHwnd_method = WindowsDisplay_class.getDeclaredMethod("getHwnd", null);
|
||||||
|
getHwnd_method.setAccessible(true);
|
||||||
|
Long hwnd = (Long)getHwnd_method.invoke(display_impl, null);
|
||||||
|
return hwnd;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return hwnd_obj.longValue();
|
||||||
|
} catch (PrivilegedActionException e) {
|
||||||
|
throw new Error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void alert(String title, String message) {
|
||||||
|
nAlert(getHwnd(), title, message);
|
||||||
|
}
|
||||||
|
private static native void nAlert(long parent_hwnd, String title, String message);
|
||||||
|
|
||||||
public boolean openURL(final String url) {
|
public boolean openURL(final String url) {
|
||||||
try {
|
try {
|
||||||
|
@ -67,5 +104,8 @@ final class WindowsSysImplementation extends DefaultSysImplementation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public native String getClipboard();
|
public String getClipboard() {
|
||||||
|
return nGetClipboard();
|
||||||
|
}
|
||||||
|
private static native String nGetClipboard();
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,6 +140,9 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
private boolean did_maximize;
|
private boolean did_maximize;
|
||||||
private boolean inAppActivate;
|
private boolean inAppActivate;
|
||||||
|
|
||||||
|
private long hwnd;
|
||||||
|
private long hdc;
|
||||||
|
|
||||||
public WindowsDisplay() {
|
public WindowsDisplay() {
|
||||||
current_display = this;
|
current_display = this;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +157,15 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
long parent_hwnd = parent != null ? getHwnd(parent) : 0;
|
long parent_hwnd = parent != null ? getHwnd(parent) : 0;
|
||||||
boolean isUndecorated = isUndecorated();
|
boolean isUndecorated = isUndecorated();
|
||||||
nCreateWindow(mode, fullscreen, x, y, isUndecorated, parent != null, parent_hwnd);
|
this.hwnd = nCreateWindow(mode, fullscreen, x, y, isUndecorated, parent != null, parent_hwnd);
|
||||||
|
if (hwnd == 0) {
|
||||||
|
throw new LWJGLException("Failed to create window");
|
||||||
|
}
|
||||||
|
this.hdc = getDC(hwnd);
|
||||||
|
if (hdc == 0) {
|
||||||
|
nDestroyWindow(hwnd, hdc);
|
||||||
|
throw new LWJGLException("Failed to get dc");
|
||||||
|
}
|
||||||
peer_info.initDC(getHwnd(), getHdc());
|
peer_info.initDC(getHwnd(), getHdc());
|
||||||
showWindow(getHwnd(), SW_SHOWDEFAULT);
|
showWindow(getHwnd(), SW_SHOWDEFAULT);
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
|
@ -162,7 +173,7 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
setFocus(getHwnd());
|
setFocus(getHwnd());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private native void nCreateWindow(DisplayMode mode, boolean fullscreen, int x, int y, boolean undecorated, boolean child_window, long parent_hwnd) throws LWJGLException;
|
private native long nCreateWindow(DisplayMode mode, boolean fullscreen, int x, int y, boolean undecorated, boolean child_window, long parent_hwnd) throws LWJGLException;
|
||||||
|
|
||||||
private static boolean isUndecorated() {
|
private static boolean isUndecorated() {
|
||||||
return Display.getPrivilegedBoolean("org.lwjgl.opengl.Window.undecorated");
|
return Display.getPrivilegedBoolean("org.lwjgl.opengl.Window.undecorated");
|
||||||
|
@ -180,10 +191,10 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroyWindow() {
|
public void destroyWindow() {
|
||||||
nDestroyWindow();
|
nDestroyWindow(hwnd, hdc);
|
||||||
resetCursorClipping();
|
resetCursorClipping();
|
||||||
}
|
}
|
||||||
private static native void nDestroyWindow();
|
private static native void nDestroyWindow(long hwnd, long hdc);
|
||||||
static void resetCursorClipping() {
|
static void resetCursorClipping() {
|
||||||
if (cursor_clipped) {
|
if (cursor_clipped) {
|
||||||
try {
|
try {
|
||||||
|
@ -338,7 +349,10 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
}
|
}
|
||||||
private static native DisplayMode getCurrentDisplayMode() throws LWJGLException;
|
private static native DisplayMode getCurrentDisplayMode() throws LWJGLException;
|
||||||
|
|
||||||
public native void setTitle(String title);
|
public void setTitle(String title) {
|
||||||
|
nSetTitle(hwnd, title);
|
||||||
|
}
|
||||||
|
private static native void nSetTitle(long hwnd, String title);
|
||||||
|
|
||||||
public boolean isCloseRequested() {
|
public boolean isCloseRequested() {
|
||||||
boolean saved = close_requested;
|
boolean saved = close_requested;
|
||||||
|
@ -467,11 +481,19 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
static native int getSystemMetrics(int index);
|
static native int getSystemMetrics(int index);
|
||||||
|
|
||||||
private static native long getDllInstance();
|
private static native long getDllInstance();
|
||||||
private static native long getHwnd();
|
|
||||||
private static native long getHdc();
|
private long getHwnd() {
|
||||||
|
return hwnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
private long getHdc() {
|
||||||
|
return hdc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static native long getDC(long hwnd);
|
||||||
private static native long getDesktopWindow();
|
private static native long getDesktopWindow();
|
||||||
static void centerCursor(long hwnd) {
|
static void centerCursor(long hwnd) {
|
||||||
getGlobalClientRect(getHwnd(), rect);
|
getGlobalClientRect(hwnd, rect);
|
||||||
int local_offset_x = rect.left;
|
int local_offset_x = rect.left;
|
||||||
int local_offset_y = rect.top;
|
int local_offset_y = rect.top;
|
||||||
getGlobalClientRect(getDesktopWindow(), rect2);
|
getGlobalClientRect(getDesktopWindow(), rect2);
|
||||||
|
@ -482,7 +504,7 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
int local_x = center_x - local_offset_x;
|
int local_x = center_x - local_offset_x;
|
||||||
int local_y = center_y - local_offset_y;
|
int local_y = center_y - local_offset_y;
|
||||||
if (current_display != null)
|
if (current_display != null)
|
||||||
current_display.setMousePosition(local_x, transformY(getHwnd(), local_y));
|
current_display.setMousePosition(local_x, transformY(hwnd, local_y));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMousePosition(int x, int y) {
|
private void setMousePosition(int x, int y) {
|
||||||
|
@ -582,12 +604,12 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
int size = icons[i].limit() / 4;
|
int size = icons[i].limit() / 4;
|
||||||
|
|
||||||
if ((((int) Math.sqrt(size)) == small_icon_size) && (!done_small)) {
|
if ((((int) Math.sqrt(size)) == small_icon_size) && (!done_small)) {
|
||||||
nSetWindowIconSmall(small_icon_size, small_icon_size, icons[i].asIntBuffer());
|
nSetWindowIconSmall(hwnd, small_icon_size, small_icon_size, icons[i].asIntBuffer());
|
||||||
used++;
|
used++;
|
||||||
done_small = true;
|
done_small = true;
|
||||||
}
|
}
|
||||||
if ((((int) Math.sqrt(size)) == large_icon_size) && (!done_large)) {
|
if ((((int) Math.sqrt(size)) == large_icon_size) && (!done_large)) {
|
||||||
nSetWindowIconLarge(large_icon_size, large_icon_size, icons[i].asIntBuffer());
|
nSetWindowIconLarge(hwnd, large_icon_size, large_icon_size, icons[i].asIntBuffer());
|
||||||
used++;
|
used++;
|
||||||
done_large = true;
|
done_large = true;
|
||||||
}
|
}
|
||||||
|
@ -596,9 +618,9 @@ final class WindowsDisplay implements DisplayImplementation {
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static native int nSetWindowIconSmall(int width, int height, IntBuffer icon);
|
private static native int nSetWindowIconSmall(long hwnd, int width, int height, IntBuffer icon);
|
||||||
|
|
||||||
private static native int nSetWindowIconLarge(int width, int height, IntBuffer icon);
|
private static native int nSetWindowIconLarge(long hwnd, int width, int height, IntBuffer icon);
|
||||||
|
|
||||||
private void handleMouseButton(int button, int state, long millis) {
|
private void handleMouseButton(int button, int state, long millis) {
|
||||||
if (mouse != null)
|
if (mouse != null)
|
||||||
|
|
|
@ -62,7 +62,4 @@
|
||||||
#define WINDOW_H_API extern
|
#define WINDOW_H_API extern
|
||||||
#endif /* _PRIVATE_WINDOW_H_ */
|
#endif /* _PRIVATE_WINDOW_H_ */
|
||||||
|
|
||||||
WINDOW_H_API HDC getCurrentHDC();
|
|
||||||
|
|
||||||
WINDOW_H_API HWND getCurrentHWND();
|
|
||||||
#endif /* _LWJGL_WINDOW_H_INCLUDED_ */
|
#endif /* _LWJGL_WINDOW_H_INCLUDED_ */
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_lwjgl_WindowsSysImplementation_getTime(JNIEnv * env, jobject ignored) {
|
JNIEXPORT jlong JNICALL Java_org_lwjgl_WindowsSysImplementation_nGetTime(JNIEnv * env, jclass unused) {
|
||||||
DWORD time;
|
DWORD time;
|
||||||
|
|
||||||
timeBeginPeriod(1);
|
timeBeginPeriod(1);
|
||||||
|
@ -55,10 +55,11 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_WindowsSysImplementation_getTime(JNIEnv *
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_WindowsSysImplementation_alert(JNIEnv * env, jobject ignored, jstring title, jstring message) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_WindowsSysImplementation_nAlert(JNIEnv * env, jclass unused, jlong hwnd_ptr, jstring title, jstring message) {
|
||||||
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
char * eMessageText = GetStringNativeChars(env, message);
|
char * eMessageText = GetStringNativeChars(env, message);
|
||||||
char * cTitleBarText = GetStringNativeChars(env, title);
|
char * cTitleBarText = GetStringNativeChars(env, title);
|
||||||
MessageBox(getCurrentHWND(), eMessageText, cTitleBarText, MB_OK | MB_TOPMOST);
|
MessageBox(hwnd, eMessageText, cTitleBarText, MB_OK | MB_TOPMOST);
|
||||||
|
|
||||||
printfDebugJava(env, "*** Alert ***%s\n%s\n", cTitleBarText, eMessageText);
|
printfDebugJava(env, "*** Alert ***%s\n%s\n", cTitleBarText, eMessageText);
|
||||||
|
|
||||||
|
@ -66,8 +67,8 @@ JNIEXPORT void JNICALL Java_org_lwjgl_WindowsSysImplementation_alert(JNIEnv * en
|
||||||
free(cTitleBarText);
|
free(cTitleBarText);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_org_lwjgl_WindowsSysImplementation_getClipboard
|
JNIEXPORT jstring JNICALL Java_org_lwjgl_WindowsSysImplementation_nGetClipboard
|
||||||
(JNIEnv * env, jobject ignored)
|
(JNIEnv * env, jclass unused)
|
||||||
{
|
{
|
||||||
// Check to see if there's text available in the clipboard
|
// Check to see if there's text available in the clipboard
|
||||||
BOOL textAvailable = IsClipboardFormatAvailable(CF_TEXT);
|
BOOL textAvailable = IsClipboardFormatAvailable(CF_TEXT);
|
||||||
|
|
|
@ -52,20 +52,9 @@
|
||||||
|
|
||||||
static HICON small_icon = NULL;
|
static HICON small_icon = NULL;
|
||||||
static HICON large_icon = NULL;
|
static HICON large_icon = NULL;
|
||||||
static HWND display_hwnd = NULL; // Handle to the window
|
|
||||||
static HDC display_hdc = NULL; // Device context
|
|
||||||
// has recovered from minimized
|
|
||||||
|
|
||||||
#define WINDOWCLASSNAME "LWJGL"
|
#define WINDOWCLASSNAME "LWJGL"
|
||||||
|
|
||||||
HDC getCurrentHDC() {
|
|
||||||
return display_hdc;
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND getCurrentHWND() {
|
|
||||||
return display_hwnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void freeLargeIcon() {
|
static void freeLargeIcon() {
|
||||||
if (large_icon != NULL) {
|
if (large_icon != NULL) {
|
||||||
DestroyIcon(large_icon);
|
DestroyIcon(large_icon);
|
||||||
|
@ -140,33 +129,29 @@ static void handleMessages(JNIEnv *env) {
|
||||||
* work properly
|
* work properly
|
||||||
*/
|
*/
|
||||||
MSG msg;
|
MSG msg;
|
||||||
if (display_hwnd != NULL) {
|
while (!(*env)->ExceptionOccurred(env) && PeekMessage(
|
||||||
while (!(*env)->ExceptionOccurred(env) && PeekMessage(
|
&msg, // message information
|
||||||
&msg, // message information
|
NULL, // handle to window
|
||||||
NULL, // handle to window
|
0, // first message
|
||||||
0, // first message
|
0, // last message
|
||||||
0, // last message
|
PM_REMOVE // removal options
|
||||||
PM_REMOVE // removal options
|
))
|
||||||
))
|
{
|
||||||
{
|
DispatchMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
TranslateMessage(&msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getHdc(JNIEnv *env, jclass unused) {
|
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getDC(JNIEnv *env, jclass unused, jlong hwnd_ptr) {
|
||||||
return (INT_PTR)display_hdc;
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
|
return (INT_PTR)GetDC(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getHwnd(JNIEnv *env, jclass unused) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetTitle
|
||||||
return (INT_PTR)display_hwnd;
|
(JNIEnv * env, jclass unused, jlong hwnd_ptr, jstring title_obj) {
|
||||||
}
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_setTitle
|
|
||||||
(JNIEnv * env, jobject self, jstring title_obj) {
|
|
||||||
char * title = GetStringNativeChars(env, title_obj);
|
char * title = GetStringNativeChars(env, title_obj);
|
||||||
SetWindowText(display_hwnd, title);
|
SetWindowText(hwnd, title);
|
||||||
free(title);
|
free(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,45 +168,39 @@ 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) {
|
static void destroyWindow(JNIEnv *env, HWND *hwnd, HDC *hdc) {
|
||||||
jclass display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(display_hwnd, GWLP_USERDATA);
|
jclass display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(*hwnd, GWLP_USERDATA);
|
||||||
closeWindow(&display_hwnd, &display_hdc);
|
closeWindow(hwnd, hdc);
|
||||||
if (display_class_global != NULL)
|
if (display_class_global != NULL)
|
||||||
(*env)->DeleteGlobalRef(env, display_class_global);
|
(*env)->DeleteGlobalRef(env, display_class_global);
|
||||||
freeLargeIcon();
|
freeLargeIcon();
|
||||||
freeSmallIcon();
|
freeSmallIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEnv *env, jobject self, jobject mode, jboolean fullscreen, jint x, jint y, jboolean undecorated, jboolean child_window, jlong parent_hwnd) {
|
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEnv *env, jobject self, jobject mode, jboolean fullscreen, jint x, jint y, jboolean undecorated, jboolean child_window, jlong parent_hwnd) {
|
||||||
jclass cls_displayMode = (*env)->GetObjectClass(env, mode);
|
jclass cls_displayMode = (*env)->GetObjectClass(env, mode);
|
||||||
jfieldID fid_width = (*env)->GetFieldID(env, cls_displayMode, "width", "I");
|
jfieldID fid_width = (*env)->GetFieldID(env, cls_displayMode, "width", "I");
|
||||||
jfieldID fid_height = (*env)->GetFieldID(env, cls_displayMode, "height", "I");
|
jfieldID fid_height = (*env)->GetFieldID(env, cls_displayMode, "height", "I");
|
||||||
int width = (*env)->GetIntField(env, mode, fid_width);
|
int width = (*env)->GetIntField(env, mode, fid_width);
|
||||||
int height = (*env)->GetIntField(env, mode, fid_height);
|
int height = (*env)->GetIntField(env, mode, fid_height);
|
||||||
|
HWND hwnd;
|
||||||
static bool oneShotInitialised = false;
|
static bool oneShotInitialised = false;
|
||||||
if (!oneShotInitialised) {
|
if (!oneShotInitialised) {
|
||||||
if (!registerWindow(lwjglWindowProc, WINDOWCLASSNAME)) {
|
if (!registerWindow(lwjglWindowProc, WINDOWCLASSNAME)) {
|
||||||
throwException(env, "Could not register window class");
|
throwException(env, "Could not register window class");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
oneShotInitialised = true;
|
oneShotInitialised = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
display_hwnd = createWindow(WINDOWCLASSNAME, x, y, width, height, fullscreen, undecorated, child_window, (HWND)parent_hwnd);
|
hwnd = createWindow(WINDOWCLASSNAME, x, y, width, height, fullscreen, undecorated, child_window, (HWND)parent_hwnd);
|
||||||
if (display_hwnd == NULL) {
|
return (INT_PTR)hwnd;
|
||||||
throwException(env, "Failed to create the window.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
display_hdc = GetDC(display_hwnd);
|
|
||||||
if (display_hdc == NULL) {
|
|
||||||
destroyWindow(env);
|
|
||||||
throwException(env, "Failed to get the window DC.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nDestroyWindow(JNIEnv *env, jclass clazz) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nDestroyWindow(JNIEnv *env, jclass clazz, jlong hwnd_ptr, jlong hdc_ptr) {
|
||||||
destroyWindow(env);
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
|
HDC hdc = (HDC)(INT_PTR)hdc_ptr;
|
||||||
|
destroyWindow(env, &hwnd, &hdc);
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -475,15 +454,16 @@ static HICON createWindowIcon(JNIEnv *env, jint *pixels, jint width, jint height
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetWindowIconSmall
|
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetWindowIconSmall
|
||||||
(JNIEnv *env, jclass clazz, jint width, jint height, jobject iconBuffer)
|
(JNIEnv *env, jclass clazz, jlong hwnd_ptr, jint width, jint height, jobject iconBuffer)
|
||||||
{
|
{
|
||||||
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
jint *imgData = (jint *)(*env)->GetDirectBufferAddress(env, iconBuffer);
|
jint *imgData = (jint *)(*env)->GetDirectBufferAddress(env, iconBuffer);
|
||||||
|
|
||||||
freeSmallIcon();
|
freeSmallIcon();
|
||||||
small_icon = createWindowIcon(env, imgData, width, height);
|
small_icon = createWindowIcon(env, imgData, width, height);
|
||||||
if (small_icon != NULL) {
|
if (small_icon != NULL) {
|
||||||
if (display_hwnd != NULL) {
|
if (hwnd != NULL) {
|
||||||
SendMessage(display_hwnd, WM_SETICON, ICON_SMALL, (LPARAM) (small_icon));
|
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM) (small_icon));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -493,15 +473,16 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetWindowIconSmall
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetWindowIconLarge
|
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nSetWindowIconLarge
|
||||||
(JNIEnv *env, jclass clazz, jint width, jint height, jobject iconBuffer)
|
(JNIEnv *env, jclass clazz, jlong hwnd_ptr, jint width, jint height, jobject iconBuffer)
|
||||||
{
|
{
|
||||||
|
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
|
||||||
jint *imgData = (jint *)(*env)->GetDirectBufferAddress(env, iconBuffer);
|
jint *imgData = (jint *)(*env)->GetDirectBufferAddress(env, iconBuffer);
|
||||||
|
|
||||||
freeLargeIcon();
|
freeLargeIcon();
|
||||||
large_icon = createWindowIcon(env, imgData, width, height);
|
large_icon = createWindowIcon(env, imgData, width, height);
|
||||||
if (large_icon != NULL) {
|
if (large_icon != NULL) {
|
||||||
if (display_hwnd != NULL) {
|
if (hwnd != NULL) {
|
||||||
SendMessage(display_hwnd, WM_SETICON, ICON_BIG, (LPARAM) (large_icon));
|
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM) (large_icon));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue