From e143541c0134141f45717e1361c9d553288552eb Mon Sep 17 00:00:00 2001 From: Caspian Rychlik-Prince Date: Sat, 7 Jun 2003 12:47:35 +0000 Subject: [PATCH] *** empty log message *** --- src/java/org/lwjgl/Window.java | 21 +++++------- src/java/org/lwjgl/input/Keyboard.java | 10 +++--- src/native/common/org_lwjgl_input_Keyboard.h | 2 +- src/native/win32/org_lwjgl_input_Keyboard.cpp | 34 +++++++++++++++---- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/java/org/lwjgl/Window.java b/src/java/org/lwjgl/Window.java index 5825f02a..92b97fe1 100644 --- a/src/java/org/lwjgl/Window.java +++ b/src/java/org/lwjgl/Window.java @@ -120,6 +120,7 @@ public abstract class Window { * @param newTitle The new window title */ public final void setTitle(String newTitle) { + assert isCreated(); title = newTitle; nSetTitle(title); } @@ -134,6 +135,7 @@ public abstract class Window { * @return true if the user or operating system has asked the window to close */ public final boolean isCloseRequested() { + assert isCreated(); return closeRequested; } @@ -141,6 +143,7 @@ public abstract class Window { * @return true if the window is minimized or otherwise not visible */ public final boolean isMinimized() { + assert isCreated(); return minimized; } @@ -172,6 +175,7 @@ public abstract class Window { * and needs to repaint itself */ public final boolean isDirty() { + assert isCreated(); return dirty; } @@ -179,6 +183,7 @@ public abstract class Window { * Paint the window. This clears the dirty flag and swaps the buffers. */ public final void paint() { + assert isCreated(); dirty = false; doPaint(); } @@ -194,7 +199,8 @@ public abstract class Window { doCreate(); currentWindow = this; created = true; - } + + } /** * Create the window (derived classes). @@ -205,7 +211,7 @@ public abstract class Window { /** * Destroy the window. */ - public final synchronized void destroy() { + public final void destroy() { if (!created) return; doDestroy(); @@ -237,16 +243,7 @@ public abstract class Window { * 'Tick' the window. This must be called at least once per video frame * to handle window close requests, moves, paints, etc. */ - public final native void tick(); - - /* (non-Javadoc) - * @see java.lang.Object#finalize() - */ - protected void finalize() throws Throwable { - super.finalize(); - - destroy(); - } + public native void tick(); /* (non-Javadoc) * @see java.lang.Object#toString() diff --git a/src/java/org/lwjgl/input/Keyboard.java b/src/java/org/lwjgl/input/Keyboard.java index ad202249..cd1cc7b2 100644 --- a/src/java/org/lwjgl/input/Keyboard.java +++ b/src/java/org/lwjgl/input/Keyboard.java @@ -344,18 +344,20 @@ public class Keyboard { /** * Enable keyboard translation. Must be called after the keyboard is created, * and keyboard buffering must be enabled. + * @return false if translation cannot be enabled; true if it can */ - public static void enableTranslation() { + public static boolean enableTranslation() { assert created : "The keyboard has not been created."; assert readBuffer != null : "Keyboard buffering has not been enabled."; - nEnableTranslation(); - translationEnabled = true; + + translationEnabled = nEnableTranslation(); + return translationEnabled; } /** * Native method to enable the translation buffer */ - private static native void nEnableTranslation(); + private static native boolean nEnableTranslation(); /** * Enable keyboard buffering. Must be called after the keyboard is created. diff --git a/src/native/common/org_lwjgl_input_Keyboard.h b/src/native/common/org_lwjgl_input_Keyboard.h index a0564195..143a455f 100644 --- a/src/native/common/org_lwjgl_input_Keyboard.h +++ b/src/native/common/org_lwjgl_input_Keyboard.h @@ -313,7 +313,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead * Method: nEnableTranslation * Signature: ()V */ -JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation +JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation (JNIEnv *, jclass); /* diff --git a/src/native/win32/org_lwjgl_input_Keyboard.cpp b/src/native/win32/org_lwjgl_input_Keyboard.cpp index d50e7cdd..2bf5885b 100644 --- a/src/native/win32/org_lwjgl_input_Keyboard.cpp +++ b/src/native/win32/org_lwjgl_input_Keyboard.cpp @@ -63,13 +63,14 @@ static bool translationEnabled; JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs (JNIEnv * env, jclass clazz) { + /* // Get a global class instance, just to be sure static jobject globalClassLock = NULL; if (globalClassLock == NULL) { globalClassLock = env->NewGlobalRef(clazz); } - + */ fid_readBuffer = env->GetStaticFieldID(clazz, "readBuffer", "Ljava/nio/ByteBuffer;"); } @@ -208,17 +209,23 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead if (ret == DI_OK) { unsigned char * buf = readBuffer; +//#ifdef _DEBUG +// if (bufsize > 0) { +// printf("Got %d keyboard events.\n", bufsize); +// } +//#endif for (unsigned int i = 0; i < bufsize; i ++) { num_events++; *buf++ = (unsigned char) rgdod[i].dwOfs; *buf++ = (unsigned char) rgdod[i].dwData; if (translationEnabled) { - // Cas: shouldn't need to call handleMessages any more - // handleMessages(); UINT virt_key = MapVirtualKey(rgdod[i].dwOfs, 1); if (virt_key != 0) { - if (!GetKeyboardState(state)) - return 0; + if (!GetKeyboardState(state)) { + *buf++ = 0; + *buf++ = 0; + continue; + } num_chars = ToUnicode(virt_key, rgdod[i].dwOfs, state, @@ -283,10 +290,23 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead * Method: nEnableTranslation * Signature: ()V */ -JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation +JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation (JNIEnv *, jclass) { - translationEnabled = true; + // We can't do translation on DOS boxes it seems so we'll have to throw a wobbler + // here: + OSVERSIONINFO osvi; + + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionEx(&osvi); + + if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { + translationEnabled = true; + return JNI_TRUE; + } else { + translationEnabled = false; + return JNI_FALSE; + } } /*