Simplify event to KeySym mapping. Fix #28

This commit is contained in:
Ioannis Tsakpinis 2015-05-22 23:48:47 +03:00
parent a5c4462a3e
commit 40694134ab
1 changed files with 11 additions and 35 deletions

View File

@ -257,43 +257,19 @@ final class LinuxKeyboard {
private static native long lookupKeysym(long event_ptr, int index);
private static native long toUpper(long keysym);
private long mapEventToKeySym(long event_ptr, int event_state) {
int group;
long keysym;
if ((event_state & modeswitch_mask) != 0)
group = 1;
else
group = 0;
if ((event_state & numlock_mask) != 0 && isKeypadKeysym(keysym = getKeySym(event_ptr, group, 1))) {
if ((event_state & (ShiftMask | shift_lock_mask)) != 0) {
return getKeySym(event_ptr, group, 0);
} else {
return keysym;
}
} else if ((event_state & (ShiftMask | LockMask)) == 0) {
return getKeySym(event_ptr, group, 0);
} else if ((event_state & ShiftMask) == 0) {
keysym = getKeySym(event_ptr, group, 0);
if ((event_state & caps_lock_mask) != 0)
keysym = toUpper(keysym);
return keysym;
} else {
keysym = getKeySym(event_ptr, group, 1);
if ((event_state & caps_lock_mask) != 0)
keysym = toUpper(keysym);
return keysym;
}
}
private int getKeycode(long event_ptr, int event_state) {
long keysym = mapEventToKeySym(event_ptr, event_state);
int keycode = LinuxKeycodes.mapKeySymToLWJGLKeyCode(keysym);
if (keycode == Keyboard.KEY_NONE) {
// Try unshifted keysym mapping
keysym = lookupKeysym(event_ptr, 0);
keycode = LinuxKeycodes.mapKeySymToLWJGLKeyCode(keysym);
boolean shift = (event_state & (ShiftMask | shift_lock_mask)) != 0;
int group = (event_state & modeswitch_mask) != 0 ? 1 : 0;
long keysym;
if ((event_state & numlock_mask) != 0 && isKeypadKeysym(keysym = getKeySym(event_ptr, group, 1))) {
if ( shift )
keysym = getKeySym(event_ptr, group, 0);
} else {
keysym = getKeySym(event_ptr, group, 0);
if ( shift ^ ((event_state & caps_lock_mask) != 0) )
keysym = toUpper(keysym);
}
return keycode;
return LinuxKeycodes.mapKeySymToLWJGLKeyCode(keysym);
}
private static byte getKeyState(int event_type) {