From: Elias N. <eli...@us...> - 2002-11-21 15:05:54
|
Update of /cvsroot/java-game-lib/LWJGL/src/native/linux In directory sc8-pr-cvs1:/tmp/cvs-serv2716 Modified Files: org_lwjgl_input_Keyboard.cpp org_lwjgl_input_Mouse.cpp Log Message: Input fixes Index: org_lwjgl_input_Keyboard.cpp CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Keyboard.cpp =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Keyboard.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- org_lwjgl_input_Keyboard.cpp 20 Nov 2002 13:54:58 -0000 1.3 +++ org_lwjgl_input_Keyboard.cpp 21 Nov 2002 15:05:50 -0000 1.4 @@ -47,12 +47,12 @@ #define KEYBOARD_BUFFER_SIZE 50 #define KEYBOARD_SIZE 256 -short readBuffer[KEYBOARD_BUFFER_SIZE]; +unsigned char readBuffer[KEYBOARD_BUFFER_SIZE * 2]; jfieldID fid_readBuffer; jfieldID fid_readBufferAddress; unsigned char key_buf[KEYBOARD_SIZE]; -int keyboard_grabbed; +bool keyboard_grabbed; extern Display *disp; extern Window win; @@ -82,12 +82,12 @@ int grabKeyboard(void) { int result = XGrabKeyboard(disp, win, False, GrabModeAsync, GrabModeAsync, CurrentTime); if (result == GrabSuccess) - keyboard_grabbed = 1; + keyboard_grabbed = true; return result; } void ungrabKeyboard(void) { - keyboard_grabbed = 0; + keyboard_grabbed = false; XUngrabKeyboard(disp, CurrentTime); } @@ -134,27 +134,32 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy (JNIEnv * env, jclass clazz) { - ungrabKeyboard(); + if (keyboard_grabbed) + ungrabKeyboard(); } int checkKeyEvents(unsigned char *result_buf) { XEvent event; int count = 0; int buf_count = 0; + int state; updateKeyboardGrab(); while (XCheckMaskEvent(disp, KeyPressMask | KeyReleaseMask, &event)) { - unsigned char keycode = (unsigned char)((event.xkey.keycode - 8) & 0xff); - if (result_buf != NULL) { - result_buf[buf_count++] = keycode; - result_buf[buf_count++] = 1; - } count++; + unsigned char keycode = (unsigned char)((event.xkey.keycode - 8) & 0xff); if (event.type == KeyPress) { - key_buf[keycode] = 1; + state = 1; } else if (event.type == KeyRelease) { - key_buf[keycode] = 0; + state = 0; } else assert(0); + key_buf[keycode] = state; + if (result_buf != NULL) { + result_buf[buf_count++] = keycode; + result_buf[buf_count++] = state; + if (buf_count >= KEYBOARD_BUFFER_SIZE * 2) + break; + } } return count; } @@ -190,7 +195,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nEnableBuffer (JNIEnv * env, jclass clazz) { - jobject newBuffer = env->NewDirectByteBuffer(&readBuffer, KEYBOARD_BUFFER_SIZE); + jobject newBuffer = env->NewDirectByteBuffer(&readBuffer, KEYBOARD_BUFFER_SIZE * 2); env->SetStaticObjectField(clazz, fid_readBuffer, newBuffer); env->SetStaticIntField(clazz, fid_readBufferAddress, (jint) (&readBuffer)); return KEYBOARD_BUFFER_SIZE; Index: org_lwjgl_input_Mouse.cpp CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Mouse.cpp =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Mouse.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- org_lwjgl_input_Mouse.cpp 20 Nov 2002 13:54:58 -0000 1.3 +++ org_lwjgl_input_Mouse.cpp 21 Nov 2002 15:05:51 -0000 1.4 @@ -54,7 +54,7 @@ extern int screen; extern int current_fullscreen; -int pointer_grabbed; +bool pointer_grabbed; jfieldID fid_button; jfieldID fid_dx; @@ -132,12 +132,12 @@ } else result = XGrabPointer(disp, win, False, mask, GrabModeAsync, GrabModeAsync, None, blank_cursor, CurrentTime); if (result == GrabSuccess) - pointer_grabbed = 1; + pointer_grabbed = true; return result; } void ungrabPointer(void) { - pointer_grabbed = 0; + pointer_grabbed = false; XUngrabPointer(disp, CurrentTime); } |