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 lookupKeysym(long event_ptr, int index);
private static native long toUpper(long keysym); 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) { private int getKeycode(long event_ptr, int event_state) {
long keysym = mapEventToKeySym(event_ptr, event_state); boolean shift = (event_state & (ShiftMask | shift_lock_mask)) != 0;
int keycode = LinuxKeycodes.mapKeySymToLWJGLKeyCode(keysym); int group = (event_state & modeswitch_mask) != 0 ? 1 : 0;
if (keycode == Keyboard.KEY_NONE) { long keysym;
// Try unshifted keysym mapping if ((event_state & numlock_mask) != 0 && isKeypadKeysym(keysym = getKeySym(event_ptr, group, 1))) {
keysym = lookupKeysym(event_ptr, 0); if ( shift )
keycode = LinuxKeycodes.mapKeySymToLWJGLKeyCode(keysym); 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) { private static byte getKeyState(int event_type) {