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

View File

@ -121,7 +121,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
}
// 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");
return JNI_FALSE;
}
@ -135,6 +135,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
printf("Failed to acquire mouse\n");
#endif
}
printf("Acquired mouse\n");
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_dz, (jint)diMouseState.lZ);
jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button);
BYTE * buttons = (BYTE *) env->GetPrimitiveArrayCritical(buttonsArray, NULL);
memcpy(buttons, diMouseState.rgbButtons, 4);
env->ReleasePrimitiveArrayCritical(buttonsArray, buttons, 0);
for (int i = 0; i < 4; i++)
if (diMouseState.rgbButtons[i] != 0)
diMouseState.rgbButtons[i] = JNI_TRUE;
else
diMouseState.rgbButtons[i] = JNI_FALSE;
env->SetBooleanArrayRegion(buttonsArray, 0, 4, diMouseState.rgbButtons);
} else {
#ifdef _DEBUG
printf("Failed to get mouse device state\n");