Fixed a mouse button state array bug

This commit is contained in:
Elias Naur 2002-12-12 19:51:20 +00:00
parent ff770dee4d
commit 7184576886
2 changed files with 15 additions and 13 deletions

View File

@ -233,13 +233,13 @@ int checkPointer() {
case ButtonPress: case ButtonPress:
switch (event.xbutton.button) { switch (event.xbutton.button) {
case Button1: case Button1:
buttons[0] = 1; buttons[0] = JNI_TRUE;
break; break;
case Button2: case Button2:
buttons[1] = 1; buttons[1] = JNI_TRUE;
break; break;
case Button3: case Button3:
buttons[2] = 1; buttons[2] = JNI_TRUE;
break; break;
case Button4: case Button4:
current_z--; current_z--;
@ -253,13 +253,13 @@ int checkPointer() {
case ButtonRelease: case ButtonRelease:
switch (event.xbutton.button) { switch (event.xbutton.button) {
case Button1: case Button1:
buttons[0] = 0; buttons[0] = JNI_FALSE;
break; break;
case Button2: case Button2:
buttons[1] = 0; buttons[1] = JNI_FALSE;
break; break;
case Button3: case Button3:
buttons[2] = 0; buttons[2] = JNI_FALSE;
break; break;
case Button4: /* Fall through */ case Button4: /* Fall through */
case Button5: case Button5:
@ -324,9 +324,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nPoll
last_y = current_y; last_y = current_y;
last_z = current_z; last_z = current_z;
jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button); jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button);
unsigned char * class_buttons = (unsigned char *) env->GetPrimitiveArrayCritical(buttonsArray, NULL); env->SetBooleanArrayRegion(buttonsArray, 0, NUM_BUTTONS, buttons);
memcpy(class_buttons, buttons, NUM_BUTTONS*sizeof(unsigned char));
env->ReleasePrimitiveArrayCritical(buttonsArray, class_buttons, 0);
if (current_fullscreen) if (current_fullscreen)
warpPointer(); warpPointer();
} }

View File

@ -121,7 +121,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
} }
// Grab non-exclusive foreground access to device // Grab non-exclusive foreground access to device
if (lpdiMouse->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND) != DI_OK) { if (lpdiMouse->SetCooperativeLevel(hwnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND) != DI_OK) {
printf("Failed to set mouse coop\n"); printf("Failed to set mouse coop\n");
return JNI_FALSE; return JNI_FALSE;
} }
@ -135,6 +135,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
printf("Failed to acquire mouse\n"); printf("Failed to acquire mouse\n");
#endif #endif
} }
printf("Acquired mouse\n");
return JNI_TRUE; return JNI_TRUE;
} }
@ -187,9 +188,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nPoll
env->SetStaticIntField(clazz, fid_dy, (jint)diMouseState.lY); env->SetStaticIntField(clazz, fid_dy, (jint)diMouseState.lY);
env->SetStaticIntField(clazz, fid_dz, (jint)diMouseState.lZ); env->SetStaticIntField(clazz, fid_dz, (jint)diMouseState.lZ);
jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button); jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button);
BYTE * buttons = (BYTE *) env->GetPrimitiveArrayCritical(buttonsArray, NULL); for (int i = 0; i < 4; i++)
memcpy(buttons, diMouseState.rgbButtons, 4); if (diMouseState.rgbButtons[i] != 0)
env->ReleasePrimitiveArrayCritical(buttonsArray, buttons, 0); diMouseState.rgbButtons[i] = JNI_TRUE;
else
diMouseState.rgbButtons[i] = JNI_FALSE;
env->SetBooleanArrayRegion(buttonsArray, 0, 4, diMouseState.rgbButtons);
} else { } else {
#ifdef _DEBUG #ifdef _DEBUG
printf("Failed to get mouse device state\n"); printf("Failed to get mouse device state\n");