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);
}
|