Misc fixes and improvements on Windows:

- Cleaned up cl flags and enabled parallel compilation. Native compilation
  is now multiple times faster.
- Fixed all /W3 compilation warnings.
- Changed window flag from WS_CHILDWINDOW to WS_POPUP when Display.setParent
  is used, in an attempt to fix focus-related issues.
This commit is contained in:
Ioannis Tsakpinis 2013-01-29 22:53:11 +02:00
parent 62b8d36002
commit 5400bb27db
17 changed files with 138 additions and 80 deletions

View File

@ -284,7 +284,7 @@
<!-- Generates the native headers from source files -->
<target name="headers" description="invokes javah on java classes" depends="compile">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux">
<class name="org.lwjgl.LinuxSysImplementation" />
<class name="org.lwjgl.opengl.LinuxEvent" />
<class name="org.lwjgl.opengl.LinuxMouse" />
@ -293,7 +293,7 @@
<class name="org.lwjgl.opengl.LinuxPeerInfo" />
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux/opengl" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux/opengl">
<class name="org.lwjgl.opengl.LinuxPbufferPeerInfo"/>
<class name="org.lwjgl.opengl.LinuxDisplayPeerInfo"/>
<class name="org.lwjgl.opengl.LinuxAWTGLCanvasPeerInfo"/>
@ -301,7 +301,7 @@
<class name="org.lwjgl.opengl.LinuxCanvasImplementation"/>
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows">
<class name="org.lwjgl.WindowsSysImplementation"/>
<class name="org.lwjgl.opengl.WindowsKeyboard" />
<class name="org.lwjgl.opengl.WindowsRegistry" />
@ -310,17 +310,17 @@
<class name="org.lwjgl.opengl.WindowsAWTGLCanvasPeerInfo"/>
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengl" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengl">
<class name="org.lwjgl.opengl.WindowsPbufferPeerInfo"/>
<class name="org.lwjgl.opengl.WindowsPeerInfo"/>
<class name="org.lwjgl.opengl.WindowsContextImplementation"/>
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengles" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows/opengles">
<class name="org.lwjgl.opengl.WindowsPeerInfo"/>
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/macosx" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/macosx">
<class name="org.lwjgl.MacOSXSysImplementation" />
<class name="org.lwjgl.opengl.MacOSXMouseEventQueue" />
<class name="org.lwjgl.opengl.MacOSXCanvasPeerInfo" />
@ -330,7 +330,7 @@
<class name="org.lwjgl.opengl.MacOSXContextImplementation" />
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}">
<class name="org.lwjgl.opengl.AWTSurfaceLock" />
<class name="org.lwjgl.DefaultSysImplementation" />
<class name="org.lwjgl.input.Cursor" />
@ -342,7 +342,7 @@
<class name="org.lwjgl.BufferUtils" />
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengl" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengl">
<class name="org.lwjgl.opengl.GLContext"/>
<class name="org.lwjgl.opengl.Pbuffer"/>
<class name="org.lwjgl.opengl.CallbackUtil"/>
@ -350,7 +350,7 @@
<class name="org.lwjgl.opengl.NVVideoCaptureUtil"/>
</javah>
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengles" force="yes">
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.headers}/opengles">
<class name="org.lwjgl.opengles.EGL"/>
<class name="org.lwjgl.opengles.EGLKHRFenceSync"/>
<class name="org.lwjgl.opengles.EGLKHRReusableSync"/>

View File

@ -1,5 +1,7 @@
<project name="generator">
<import file="build-definitions.xml"/>
<!-- clean the generated files -->
<target name="clean-generated" description="Deletes the generated java source">
<delete quiet="true" failonerror="false">
@ -20,7 +22,7 @@
<include name="org/lwjgl/util/generator/opengl/**.java"/>
<include name="org/lwjgl/util/generator/opengles/**.java"/>
<include name="org/lwjgl/util/generator/opencl/**.java"/>
<compilerarg value="-Xlint:all"/>
<compilerarg value="-Xlint:none"/>
</javac>
<!-- Compile helper classes used by the templates -->
<javac debug="yes" srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" source="1.5" target="1.5" taskname="generator">

View File

@ -6,8 +6,8 @@
<property name="sdkhome" location="${env.MSSDK}"/>
<target name="compile_dir">
<apply dir="." failonerror="true" executable="cl" dest="." skipemptyfilesets="true">
<arg line="/Ox /W2 /nologo /Ox /Ob2 /Oi /Ot /Oy /FD /EHsc /MT /Gy /W2 /nologo /c"/>
<apply dir="." failonerror="true" executable="cl" dest="." skipemptyfilesets="true" parallel="true">
<arg line="/c /W3 /EHsc /Ox /Gy /MT /MP /nologo"/>
<arg value="/I${sdkhome}\include"/>
<arg value="/I${java.home}\..\include"/>
<arg value="/I${java.home}\..\include\win32"/>

View File

@ -58,6 +58,7 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Arrays;
import java.util.HashSet;
import javax.swing.*;
public final class Display {
@ -121,6 +122,12 @@ public final class Display {
private static float r, g, b;
private static final ComponentListener component_listener = new ComponentAdapter() {
public void componentMoved(ComponentEvent e) {
synchronized ( GlobalLock.lock ) {
parent_resized = true;
}
}
public void componentResized(ComponentEvent e) {
synchronized ( GlobalLock.lock ) {
parent_resized = true;
@ -298,6 +305,7 @@ public final class Display {
throw new LWJGLException("Parent.isDisplayable() must be true");
if ( tmp_parent != null ) {
tmp_parent.addComponentListener(component_listener);
SwingUtilities.windowForComponent(parent).addComponentListener(component_listener);
}
DisplayMode mode = getEffectiveMode();
display_impl.createWindow(drawable, mode, tmp_parent, getWindowX(), getWindowY());
@ -335,6 +343,7 @@ public final class Display {
}
if ( parent != null ) {
parent.removeComponentListener(component_listener);
SwingUtilities.windowForComponent(parent).removeComponentListener(component_listener);
}
releaseDrawable();
@ -401,7 +410,7 @@ public final class Display {
/**
* An accurate sync method that will attempt to run at a constant frame rate.
* It should be called once every frame.
*
*
* @param fps - the desired frame rate, in frames per second
*/
public static void sync(int fps) {
@ -1257,7 +1266,7 @@ public final class Display {
* @return this method will return the x position (top-left) of the Display window.
*
* If running in fullscreen mode it will return 0.
* If Display.setParent(Canvas parent) is being used, the x position of
* If Display.setParent(Canvas parent) is being used, the x position of
* the parent will be returned.
*/
public static int getX() {
@ -1272,12 +1281,12 @@ public final class Display {
return display_impl.getX();
}
/**
* @return this method will return the y position (top-left) of the Display window.
*
* If running in fullscreen mode it will return 0.
* If Display.setParent(Canvas parent) is being used, the y position of
* If Display.setParent(Canvas parent) is being used, the y position of
* the parent will be returned.
*/
public static int getY() {
@ -1292,7 +1301,7 @@ public final class Display {
return display_impl.getY();
}
/**
* @return this method will return the width of the Display window.
*

View File

@ -38,8 +38,9 @@ package org.lwjgl.opengl;
* @author elias_naur
*/
import java.awt.*;
import java.lang.reflect.Method;
import java.nio.*;
import java.awt.Canvas;
import org.lwjgl.LWJGLException;
import org.lwjgl.LWJGLUtil;
@ -49,6 +50,8 @@ import org.lwjgl.input.Cursor;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengles.EGL;
import javax.swing.*;
final class WindowsDisplay implements DisplayImplementation {
private static final int GAMMA_LENGTH = 256;
@ -150,9 +153,9 @@ final class WindowsDisplay implements DisplayImplementation {
private static final int WS_THICKFRAME = 0x00040000;
private static final int WS_MAXIMIZEBOX = 0x00010000;
private static final int HTCLIENT = 0x01;
private static final int MK_XBUTTON1 = 0x0020;
private static final int MK_XBUTTON2 = 0x0040;
private static final int XBUTTON1 = 0x0001;
@ -199,6 +202,15 @@ final class WindowsDisplay implements DisplayImplementation {
private boolean trackingMouse;
private boolean mouseInside;
static {
try {
final Method windowProc = WindowsDisplay.class.getDeclaredMethod("handleMessage", long.class, int.class, long.class, long.class, long.class);
setWindowProc(windowProc);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
WindowsDisplay() {
current_display = this;
}
@ -212,7 +224,7 @@ final class WindowsDisplay implements DisplayImplementation {
maximized = false;
this.parent = parent;
hasParent = parent != null;
long parent_hwnd = parent != null ? getHwnd(parent) : 0;
long parent_hwnd = parent != null ? nGetParent(getHwnd(parent)) : 0;
this.hwnd = nCreateWindow(x, y, mode.getWidth(), mode.getHeight(), Display.isFullscreen() || isUndecorated(), parent != null, parent_hwnd);
this.resizable=false;
if (hwnd == 0) {
@ -233,6 +245,8 @@ final class WindowsDisplay implements DisplayImplementation {
((DrawableGLES)drawable).initialize(hwnd, hdc, EGL.EGL_WINDOW_BIT, (org.lwjgl.opengles.PixelFormat)drawable.getPixelFormat());
}
peer_info.initDC(getHwnd(), getHdc());
if ( parent != null )
reshape(0, 0, mode.getWidth(), mode.getHeight());
showWindow(getHwnd(), SW_SHOWDEFAULT);
updateWidthAndHeight();
@ -275,6 +289,8 @@ final class WindowsDisplay implements DisplayImplementation {
}
}
private static native long nGetParent(long hWnd);
public void destroyWindow() {
nReleaseDC(hwnd, hdc);
nDestroyWindow(hwnd);
@ -496,9 +512,6 @@ final class WindowsDisplay implements DisplayImplementation {
public void update() {
nUpdate();
if (parent != null && parent.isFocusOwner()) {
setFocus(getHwnd());
}
if (redoMakeContextCurrent) {
redoMakeContextCurrent = false;
/**
@ -518,6 +531,15 @@ final class WindowsDisplay implements DisplayImplementation {
private static native void nUpdate();
public void reshape(int x, int y, int width, int height) {
if ( parent != null ) {
// Translate canvas location to screen coordinates
Point p = new Point();
SwingUtilities.convertPointToScreen(p, parent);
x += p.getX();
y += p.getY();
}
nReshape(getHwnd(), x, y, width, height, Display.isFullscreen() || isUndecorated(), parent != null);
}
private static native void nReshape(long hwnd, int x, int y, int width, int height, boolean undecorated, boolean child);
@ -780,10 +802,6 @@ final class WindowsDisplay implements DisplayImplementation {
nReleaseCapture();
}
}
if (parent != null && !isFocused) {
setFocus(getHwnd());
}
}
private boolean shouldGrab() {
@ -833,14 +851,16 @@ final class WindowsDisplay implements DisplayImplementation {
private static native void clientToScreen(long hwnd, IntBuffer point);
private static int handleMessage(long hwnd, int msg, long wParam, long lParam, long millis) {
private static native void setWindowProc(Method windowProc);
private static long handleMessage(long hwnd, int msg, long wParam, long lParam, long millis) {
if (current_display != null)
return current_display.doHandleMessage(hwnd, msg, wParam, lParam, millis);
else
return defWindowProc(hwnd, msg, wParam, lParam);
}
private static native int defWindowProc(long hwnd, int msg, long wParam, long lParam);
private static native long defWindowProc(long hwnd, int msg, long wParam, long lParam);
private void checkCursorState() {
updateClipping();
@ -863,7 +883,12 @@ final class WindowsDisplay implements DisplayImplementation {
checkCursorState();
}
private int doHandleMessage(long hwnd, int msg, long wParam, long lParam, long millis) {
private long doHandleMessage(long hwnd, int msg, long wParam, long lParam, long millis) {
if ( hwnd != getHwnd() ) {
// Can happen at start-up
return defWindowProc(hwnd, msg, wParam, lParam);
}
switch (msg) {
// disable screen saver and monitor power down messages which wreak havoc
case WM_ACTIVATE:
@ -876,7 +901,7 @@ final class WindowsDisplay implements DisplayImplementation {
appActivate(false);
break;
}
return 0;
return 0L;
case WM_SIZE:
switch ((int)wParam) {
case SIZE_RESTORED:
@ -908,13 +933,13 @@ final class WindowsDisplay implements DisplayImplementation {
} else {
// let Windows handle cursors outside the client area for resizing, etc.
return defWindowProc(hwnd, msg, wParam, lParam);
}
}
case WM_KILLFOCUS:
appActivate(false);
return 0;
return 0L;
case WM_SETFOCUS:
appActivate(true);
return 0;
return 0L;
case WM_MOUSEMOVE:
int xPos = (int)(short)(lParam & 0xFFFF);
int yPos = transformY(getHwnd(), (int)(short)((lParam >> 16) & 0xFFFF));
@ -924,29 +949,29 @@ final class WindowsDisplay implements DisplayImplementation {
if(!trackingMouse) {
trackingMouse = nTrackMouseEvent(hwnd);
}
return 0;
return 0L;
case WM_MOUSEWHEEL:
int dwheel = (int)(short)((wParam >> 16) & 0xFFFF);
handleMouseScrolled(dwheel, millis);
return 0;
return 0L;
case WM_LBUTTONDOWN:
handleMouseButton(0, 1, millis);
return 0;
return 0L;
case WM_LBUTTONUP:
handleMouseButton(0, 0, millis);
return 0;
return 0L;
case WM_RBUTTONDOWN:
handleMouseButton(1, 1, millis);
return 0;
return 0L;
case WM_RBUTTONUP:
handleMouseButton(1, 0, millis);
return 0;
return 0L;
case WM_MBUTTONDOWN:
handleMouseButton(2, 1, millis);
return 0;
return 0L;
case WM_MBUTTONUP:
handleMouseButton(2, 0, millis);
return 0;
return 0L;
case WM_XBUTTONUP:
if((wParam >> 16) == XBUTTON1) {
handleMouseButton(3, 0, millis);
@ -964,7 +989,7 @@ final class WindowsDisplay implements DisplayImplementation {
case WM_SYSCHAR:
case WM_CHAR:
handleChar(wParam, lParam, millis);
return 0;
return 0L;
case WM_SYSKEYUP:
/* Fall through */
case WM_KEYUP:
@ -985,17 +1010,17 @@ final class WindowsDisplay implements DisplayImplementation {
return defWindowProc(hwnd, msg, wParam, lParam);
case WM_QUIT:
close_requested = true;
return 0;
return 0L;
case WM_SYSCOMMAND:
switch ((int)(wParam & 0xfff0)) {
case SC_KEYMENU:
case SC_MOUSEMENU:
case SC_SCREENSAVE:
case SC_MONITORPOWER:
return 0;
return 0L;
case SC_CLOSE:
close_requested = true;
return 0;
return 0L;
default:
break;
}
@ -1015,7 +1040,7 @@ final class WindowsDisplay implements DisplayImplementation {
handleMouseButton(captureMouse, 0, millis);
captureMouse = -1;
}
return 0;
return 0L;
case WM_WINDOWPOSCHANGED:
if(getWindowRect(hwnd, rect_buffer)) {
rect.copyFromBuffer(rect_buffer);
@ -1024,12 +1049,12 @@ final class WindowsDisplay implements DisplayImplementation {
} else {
LWJGLUtil.log("WM_WINDOWPOSCHANGED: Unable to get window rect");
}
return defWindowProc(hwnd, msg, wParam, lParam);
return defWindowProc(hwnd, msg, wParam, lParam);
default:
return defWindowProc(hwnd, msg, wParam, lParam);
}
}
private native boolean getWindowRect(long hwnd, IntBuffer rectBuffer);
public int getX() {
@ -1056,8 +1081,8 @@ final class WindowsDisplay implements DisplayImplementation {
public void setResizable(boolean resizable) {
if(this.resizable != resizable) {
long style = getWindowLongPtr(hwnd, GWL_STYLE);
long styleex = getWindowLongPtr(hwnd, GWL_EXSTYLE);
int style = (int)getWindowLongPtr(hwnd, GWL_STYLE);
int styleex = (int)getWindowLongPtr(hwnd, GWL_EXSTYLE);
// update frame style
if(resizable && !Display.isFullscreen()) {
@ -1082,7 +1107,7 @@ final class WindowsDisplay implements DisplayImplementation {
this.resizable = resizable;
}
private native boolean adjustWindowRectEx(IntBuffer rectBuffer, long style, boolean menu, long styleex);
private native boolean adjustWindowRectEx(IntBuffer rectBuffer, int style, boolean menu, int styleex);
public boolean wasResized() {
if(resized) {

View File

@ -324,7 +324,7 @@ public class NativeMethodStubsGenerator {
// Declare loop counters and allocate object array
if ( !ptrLoopDeclared ) {
writer.println("\tunsigned int " + n + "_i;");
writer.println("\tint " + n + "_i;");
writer.println("\tjobject " + n + "_object;");
ptrLoopDeclared = true;
}
@ -336,7 +336,7 @@ public class NativeMethodStubsGenerator {
// Declare loop counters and allocate string array
if ( !strLoopDeclared ) {
writer.println("\tunsigned int " + n + "_i;");
writer.println("\tint " + n + "_i;");
writer.println("\t" + arrayType + n + "_address;");
strLoopDeclared = true;
}

View File

@ -227,11 +227,11 @@ jstring NewStringNativeUnsigned(JNIEnv *env, const unsigned char *ustr) {
const char *str = (const char *)ustr;
if (str == NULL)
return NULL;
return NewStringNativeWithLength(env, str, strlen(str));
return NewStringNativeWithLength(env, str, (jsize)strlen(str));
}
// creates locale specific string
jstring NewStringNativeWithLength(JNIEnv *env, const char *str, int length) {
jstring NewStringNativeWithLength(JNIEnv *env, const char *str, jsize length) {
jclass jcls_str;
jmethodID jmethod_str;
jstring result;
@ -330,7 +330,7 @@ void ext_InitializeClass(JNIEnv *env, jclass clazz, ExtGetProcAddressPROC gpa, i
}
bool getBooleanProperty(JNIEnv *env, const char* propertyName) {
jstring property = NewStringNativeWithLength(env, propertyName, strlen(propertyName));
jstring property = NewStringNativeWithLength(env, propertyName, (jsize)strlen(propertyName));
jclass org_lwjgl_LWJGLUtil_class;
jmethodID getBoolean;
if (property == NULL)

View File

@ -75,18 +75,18 @@ static inline void * safeGetBufferAddress(JNIEnv *env, jobject buffer) {
return NULL;
}
static inline jobject safeNewBuffer(JNIEnv *env, void *p, int size) {
static inline jobject safeNewBuffer(JNIEnv *env, void *p, jlong capacity) {
if (p != NULL) {
#ifdef __cplusplus
return env->NewDirectByteBuffer(p, size);
return env->NewDirectByteBuffer(p, capacity);
#else
return (*env)->NewDirectByteBuffer(env, p, size);
return (*env)->NewDirectByteBuffer(env, p, capacity);
#endif
} else
return NULL;
}
static inline jobject safeNewBufferCached(JNIEnv *env, void *p, int size, jobject old_buffer) {
static inline jobject safeNewBufferCached(JNIEnv *env, void *p, jlong size, jobject old_buffer) {
if (old_buffer != NULL) {
void *old_buffer_address = (*env)->GetDirectBufferAddress(env, old_buffer);
jlong capacity = (*env)->GetDirectBufferCapacity(env, old_buffer);
@ -141,7 +141,7 @@ extern void printfDebugJava(JNIEnv *env, const char *format, ...);
extern void printfDebug(const char *format, ...);
extern bool getBooleanProperty(JNIEnv *env, const char* propertyName);
extern char * GetStringNativeChars(JNIEnv *env, jstring jstr);
extern jstring NewStringNativeWithLength(JNIEnv *env, const char *str, int length);
extern jstring NewStringNativeWithLength(JNIEnv *env, const char *str, jsize length);
extern jstring NewStringNativeUnsigned(JNIEnv *env, const unsigned char *str);
extern jobject NewReadOnlyDirectByteBuffer(JNIEnv* env, const void* address, jlong capacity);
extern jobject newJavaManagedByteBuffer(JNIEnv *env, const int size);

View File

@ -59,7 +59,7 @@ void extcl_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMet
ext_InitializeClass(env, clazz, &extcl_GetProcAddress, num_functions, functions);
}
int extcl_CalculateImageSize(const size_t *region, size_t row_pitch, size_t slice_pitch) {
size_t extcl_CalculateImageSize(const size_t *region, size_t row_pitch, size_t slice_pitch) {
if ( slice_pitch == 0 )
return region[1] * row_pitch;
else

View File

@ -70,7 +70,7 @@ typedef void (CL_CALLBACK * cl_printf_callback)(cl_context context, cl_uint prin
void* extcl_GetProcAddress(const char* function);
void extcl_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions);
int extcl_CalculateImageSize(const size_t *region, size_t row_pitch, size_t slice_pitch);
size_t extcl_CalculateImageSize(const size_t *region, size_t row_pitch, size_t slice_pitch);
// -----------------[ Platform dependent functions ]-----------------

View File

@ -83,7 +83,7 @@ static alcGetEnumValuePROC alcGetEnumValue;
*/
static jobject JNICALL Java_org_lwjgl_openal_ALC10_nalcGetString (JNIEnv *env, jclass clazz, jlong deviceaddress, jint token) {
char* alcString = (char*) alcGetString((ALCdevice*)((intptr_t)deviceaddress), (ALenum) token);
int length;
size_t length;
int i=1;
if (alcString == NULL) {

View File

@ -67,7 +67,7 @@ static void CL_CALLBACK contextCallback(const char *errinfo, const void *private
private_info_buffer = NewReadOnlyDirectByteBuffer(env, private_info, cb);
(*env)->CallVoidMethod(env, (jobject)user_data, contextCallbackJ,
NewStringNativeWithLength(env, errinfo, strlen(errinfo)),
NewStringNativeWithLength(env, errinfo, (jsize)strlen(errinfo)),
private_info_buffer
);
}

View File

@ -203,7 +203,7 @@ jobject convertToNativeRamp(JNIEnv *env, jobject float_gamma_obj) {
float scaledRampEntry;
WORD rampEntry;
const float *gammaRamp = (const float *)(*env)->GetDirectBufferAddress(env, float_gamma_obj);
jint gamma_ramp_length = (*env)->GetDirectBufferCapacity(env, float_gamma_obj);
jint gamma_ramp_length = (jint)(*env)->GetDirectBufferCapacity(env, float_gamma_obj);
jobject native_ramp;
WORD *native_ramp_buffer;

View File

@ -118,7 +118,7 @@ void getWindowFlags(DWORD *windowflags_return, DWORD *exstyle_return, bool undec
windowflags = WS_POPUP;
} else if (child_window) {
exstyle = 0;
windowflags = WS_CHILDWINDOW;
windowflags = WS_POPUP;
} else {
exstyle = WS_EX_APPWINDOW;
windowflags = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;

View File

@ -90,7 +90,7 @@ JNIEXPORT jstring JNICALL Java_org_lwjgl_WindowsSysImplementation_nGetClipboard
return NULL;
}
str = (const wchar_t *)clipboard_data;
ret = (*env)->NewString(env, str, wcslen(str));
ret = (*env)->NewString(env, str, (jsize)wcslen(str));
} else if (textAvailable) {
if (!OpenClipboard(NULL))
return NULL;
@ -104,7 +104,7 @@ JNIEXPORT jstring JNICALL Java_org_lwjgl_WindowsSysImplementation_nGetClipboard
CloseClipboard();
return NULL;
}
ret = NewStringNativeWithLength(env, (const char *) clipboard_data, strlen(clipboard_data));
ret = NewStringNativeWithLength(env, (const char *) clipboard_data, (jsize)strlen(clipboard_data));
} else {
return NULL;
}

View File

@ -53,6 +53,9 @@
#define WINDOWCLASSNAME _T("LWJGL")
static jclass windowsDisplayClass;
static jmethodID javaWindowProc;
/*
* WindowProc for the GL window.
*/
@ -61,10 +64,12 @@ static LRESULT CALLBACK lwjglWindowProc(HWND hWnd,
WPARAM wParam,
LPARAM lParam)
{
/*
jclass display_class;
jclass display_class_global;
jmethodID handleMessage_method;
LONG message_time;
*/
JNIEnv *env = getThreadEnv();
if (env != NULL && !(*env)->ExceptionOccurred(env)) {
/*
@ -80,6 +85,8 @@ static LRESULT CALLBACK lwjglWindowProc(HWND hWnd,
* a window is created, where we are sure that the calling class' classloader has
* LWJGL classes in it.
*/
/*
display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(hWnd, GWLP_USERDATA);
if (display_class_global == NULL) {
display_class = (*env)->FindClass(env, "org/lwjgl/opengl/WindowsDisplay");
@ -91,15 +98,27 @@ static LRESULT CALLBACK lwjglWindowProc(HWND hWnd,
}
if (display_class_global != NULL) {
message_time = GetMessageTime();
handleMessage_method = (*env)->GetStaticMethodID(env, display_class_global, "handleMessage", "(JIJJJ)I");
handleMessage_method = (*env)->GetStaticMethodID(env, display_class_global, "handleMessage", "(JIJJJ)J");
if (handleMessage_method != NULL)
return (*env)->CallStaticIntMethod(env, display_class_global, handleMessage_method, (jlong)(intptr_t)hWnd, (jint)msg, (jlong)wParam, (jlong)lParam, (jlong)message_time);
return (*env)->CallStaticLongMethod(env, display_class_global, handleMessage_method, (jlong)(intptr_t)hWnd, (jint)msg, (jlong)wParam, (jlong)lParam, (jlong)message_time);
}
*/
return (*env)->CallStaticLongMethod(
env, windowsDisplayClass, javaWindowProc,
(jlong)(intptr_t)hWnd, (jint)msg, (jlong)wParam, (jlong)lParam, (jlong)GetMessageTime()
);
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDisplay_defWindowProc(JNIEnv *env, jclass unused, jlong hWnd, jint msg, jlong wParam, jlong lParam) {
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_setWindowProc(JNIEnv *env, jclass clazz, jobject method) {
windowsDisplayClass = clazz;
javaWindowProc = (*env)->FromReflectedMethod(env, method);
}
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_defWindowProc(JNIEnv *env, jclass unused, jlong hWnd, jint msg, jlong wParam, jlong lParam) {
return DefWindowProc((HWND)(INT_PTR)hWnd, msg, wParam, lParam);
}
@ -167,6 +186,10 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEn
return (INT_PTR)hwnd;
}
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nGetParent(JNIEnv *env, jclass clazz, jlong hwnd_ptr) {
return (INT_PTR)GetParent((HWND)(INT_PTR)hwnd_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;
@ -309,6 +332,7 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nGetVersion(JNIEn
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nReshape(JNIEnv *env, jclass unused, jlong hwnd_ptr, jint x, jint y, jint width, jint height, jboolean undecorated, jboolean child) {
HWND hwnd = (HWND)(INT_PTR)hwnd_ptr;
/*
DWORD exstyle, windowflags;
RECT clientSize;
@ -329,11 +353,11 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nReshape(JNIEnv *env
);
SetWindowPos(hwnd, HWND_TOP, x, y, clientSize.right - clientSize.left, clientSize.bottom - clientSize.top, SWP_NOZORDER);
*/
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
}
static HICON createWindowIcon(JNIEnv *env, jint *pixels, jint width, jint height) {
unsigned char col;
unsigned char mask;
BITMAPV5HEADER bitmapInfo;
HBITMAP cursorMask;
HBITMAP colorBitmap;
@ -345,8 +369,6 @@ static HICON createWindowIcon(JNIEnv *env, jint *pixels, jint width, jint height
int imageSize;
unsigned char *maskPixels;
int widthInBytes;
int leftShift;
int maskPixelsOff;
int scanlineWidth;
HBITMAP colorDIB;
@ -475,7 +497,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_getClientRect
}
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_WindowsDisplay_adjustWindowRectEx
(JNIEnv *env, jclass unused, jobject rect_buffer, jlong style, jboolean menu, jlong styleex) {
(JNIEnv *env, jclass unused, jobject rect_buffer, jint style, jboolean menu, jint styleex) {
jboolean result;
RECT clientRect;
copyBufferToRect(env, rect_buffer, &clientRect);

View File

@ -93,7 +93,7 @@ static jstring queryRegistrationKey(JNIEnv *env, HKEY root_key, LPCTSTR subkey,
return NULL;
}
result[buf_size - 1] = '\0';
java_result = NewStringNativeWithLength(env, result, strlen(result));
java_result = NewStringNativeWithLength(env, result, (jsize)strlen(result));
free(result);
return java_result;
}