diff options
author | Sven Gothel <[email protected]> | 2013-04-11 07:21:27 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-04-11 07:21:27 +0200 |
commit | 46204dca637a02ebcfdbed803bd5fc4c8fa8c769 (patch) | |
tree | 081d4fb8fcf85d8ce87ddb587f07a869c9203bd2 | |
parent | 627f56cbf43b2aefa62b9372ecfa240cb2d2d0c3 (diff) | |
parent | 578011822abb973800f96a21138c497862cba800 (diff) |
Merge remote-tracking branch 'xranby/NEWT-input'
Conflicts:
src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java
-rw-r--r-- | src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java | 1593 |
1 files changed, 831 insertions, 762 deletions
diff --git a/src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java b/src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java index fc8c5adc6..7b8c5eb2a 100644 --- a/src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java +++ b/src/newt/classes/jogamp/newt/driver/linux/LinuxEventDeviceTracker.java @@ -57,21 +57,21 @@ import com.jogamp.newt.event.KeyEvent; public class LinuxEventDeviceTracker implements WindowListener { - private static final LinuxEventDeviceTracker ledt; + private static final LinuxEventDeviceTracker ledt; - static { - ledt = new LinuxEventDeviceTracker(); - final Thread t = new Thread(ledt.eventDeviceManager, "NEWT-LinuxEventDeviceManager"); - t.setDaemon(true); - t.start(); - } + static { + ledt = new LinuxEventDeviceTracker(); + final Thread t = new Thread(ledt.eventDeviceManager, "NEWT-LinuxEventDeviceManager"); + t.setDaemon(true); + t.start(); + } - public static LinuxEventDeviceTracker getSingleton() { - return ledt; - } + public static LinuxEventDeviceTracker getSingleton() { + return ledt; + } - private WindowImpl focusedWindow = null; + private WindowImpl focusedWindow = null; private EventDeviceManager eventDeviceManager = new EventDeviceManager(); /* @@ -85,61 +85,63 @@ public class LinuxEventDeviceTracker implements WindowListener { And so on up to event31. */ - private EventDevicePoller[] eventDevicePollers = new EventDevicePoller[32]; - - @Override - public void windowResized(WindowEvent e) { } - - @Override - public void windowMoved(WindowEvent e) { } - - @Override - public void windowDestroyNotify(WindowEvent e) { - Object s = e.getSource(); - if(focusedWindow == s) { - focusedWindow = null; - } - } - - @Override - public void windowDestroyed(WindowEvent e) { } - - @Override - public void windowGainedFocus(WindowEvent e) { - Object s = e.getSource(); - if(s instanceof WindowImpl) { - focusedWindow = (WindowImpl) s; - } - } - - @Override - public void windowLostFocus(WindowEvent e) { - Object s = e.getSource(); - if(focusedWindow == s) { - focusedWindow = null; - } - } - - public static void main(String[] args ){ - System.setProperty("newt.debug.Window.KeyEvent", "true"); - LinuxEventDeviceTracker.getSingleton(); - try { - Thread.sleep(30000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Override - public void windowRepaint(WindowUpdateEvent e) { } + private EventDevicePoller[] eventDevicePollers = new EventDevicePoller[32]; + + @Override + public void windowResized(WindowEvent e) { } + + @Override + public void windowMoved(WindowEvent e) { } + + @Override + public void windowDestroyNotify(WindowEvent e) { + Object s = e.getSource(); + if(focusedWindow == s) { + focusedWindow = null; + } + } + + @Override + public void windowDestroyed(WindowEvent e) { } + + @Override + public void windowGainedFocus(WindowEvent e) { + Object s = e.getSource(); + if(s instanceof WindowImpl) { + focusedWindow = (WindowImpl) s; + } + } + + @Override + public void windowLostFocus(WindowEvent e) { + Object s = e.getSource(); + if(focusedWindow == s) { + focusedWindow = null; + } + } + + public static void main(String[] args ){ + System.setProperty("newt.debug.Window.KeyEvent", "true"); + LinuxEventDeviceTracker.getSingleton(); + try { + while(true) { + Thread.sleep(1000); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void windowRepaint(WindowUpdateEvent e) { } class EventDeviceManager implements Runnable { private volatile boolean stop = false; @Override - public void run() { + public void run() { File f = new File("/dev/input/"); int number; while(!stop){ @@ -169,7 +171,7 @@ public class LinuxEventDeviceTracker implements WindowListener { } } - class EventDevicePoller implements Runnable { + class EventDevicePoller implements Runnable { private volatile boolean stop = false; private String eventDeviceName; @@ -178,713 +180,780 @@ public class LinuxEventDeviceTracker implements WindowListener { this.eventDeviceName="/dev/input/event"+eventDeviceNumber; } - @Override - public void run() { - final byte[] b = new byte[16]; - /** - * The Linux input event interface. - * http://www.kernel.org/doc/Documentation/input/input.txt - * - * struct input_event { - * struct timeval time; - * unsigned short type; - * unsigned short code; - * unsigned int value; - * }; - */ - ByteBuffer bb = ByteBuffer.wrap(b); - StructAccessor s = new StructAccessor(bb); - final File f = new File(eventDeviceName); - f.setReadOnly(); - InputStream fis; - try { - fis = new FileInputStream(f); - } catch (FileNotFoundException e) { + @Override + public void run() { + final byte[] b = new byte[16]; + /** + * The Linux input event interface. + * http://www.kernel.org/doc/Documentation/input/input.txt + * + * struct input_event { + * struct timeval time; + * unsigned short type; + * unsigned short code; + * unsigned int value; + * }; + */ + ByteBuffer bb = ByteBuffer.wrap(b); + StructAccessor s = new StructAccessor(bb); + final File f = new File(eventDeviceName); + f.setReadOnly(); + InputStream fis; + try { + fis = new FileInputStream(f); + } catch (FileNotFoundException e) { stop=true; - return; - } + return; + } - int timeSeconds; - int timeSecondFraction; - short type; - short code; - int value; + int timeSeconds; + int timeSecondFraction; + short type; + short code; + int value; - short keyCode=KeyEvent.VK_UNDEFINED; - char keyChar=' '; - short eventType=0; - int modifiers=0; + short keyCode=KeyEvent.VK_UNDEFINED; + char keyChar=' '; + short eventType=0; + int modifiers=0; loop: - while(!stop) { - int remaining=16; - while(remaining>0) { - int read = 0; - try { - read = fis.read(b, 0, remaining); - } catch (IOException e) { - stop = true; - break loop; - } - if(read<0) { - stop = true; // EOF of event device file !? - break loop; - } else { - remaining -= read; - } - } - - timeSeconds = s.getIntAt(0); - timeSecondFraction = s.getShortAt(4); - type = s.getShortAt(8); - code = s.getShortAt(10); - value = s.getIntAt(12); - - if(null != focusedWindow) { - /* - * Linux sends Keyboard events in the following order: - * EV_MSC (optional, contains scancode) - * EV_KEY - * SYN_REPORT (sent before next key) - */ - - switch(type) { - case 0: // SYN_REPORT - // Clear - eventType = 0; - keyCode = KeyEvent.VK_UNDEFINED; - keyChar = 0; // Print null for unprintable char. - modifiers = 0; - break; - case 1: // EV_KEY - keyCode = LinuxEVKey2NewtVKey(code); // The device independent code. - keyChar = NewtVKey2Unicode(keyCode); // The printable character w/o key modifiers. - switch(value) { - case 0: - modifiers=0; - eventType=KeyEvent.EVENT_KEY_RELEASED; - focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); - break; - case 1: - eventType=KeyEvent.EVENT_KEY_PRESSED; - focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); - break; - case 2: - eventType=KeyEvent.EVENT_KEY_PRESSED; - modifiers=InputEvent.AUTOREPEAT_MASK; - - //Send syntetic autorepeat release - focusedWindow.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keyCode, keyChar); - - focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); - break; - } - break; - case 4: // EV_MSC - if(code==4) { // MSC_SCAN - // scancode ignore, linux kernel specific - // keyCode = value; - } - break; - // TODO: handle joystick events - // TODO: handle mouse events - // TODO: handle headphone/hdmi connector events - } - - if(Window.DEBUG_KEY_EVENT) { - System.out.println("[time "+timeSeconds+":"+timeSecondFraction+"] type "+type+" / code "+code+" = value "+value); - } - - } else { - if(Window.DEBUG_KEY_EVENT) { - System.out.println("[time "+timeSeconds+":"+timeSecondFraction+"] type "+type+" / code "+code+" = value "+value); - } - } - } - if(null != fis) { - try { - fis.close(); - } catch (IOException e) { - } - } + while(!stop) { + int remaining=16; + while(remaining>0) { + int read = 0; + try { + read = fis.read(b, 0, remaining); + } catch (IOException e) { + stop = true; + break loop; + } + if(read<0) { + stop = true; // EOF of event device file !? + break loop; + } else { + remaining -= read; + } + } + + timeSeconds = s.getIntAt(0); + timeSecondFraction = s.getShortAt(4); + type = s.getShortAt(8); + code = s.getShortAt(10); + value = s.getIntAt(12); + + + /* + * Linux sends Keyboard events in the following order: + * EV_MSC (optional, contains scancode) + * EV_KEY + * SYN_REPORT (sent before next key) + */ + + switch(type) { + case 0: // SYN_REPORT + // Clear + eventType = 0; + keyCode = KeyEvent.VK_UNDEFINED; + keyChar = 0; // Print null for unprintable char. + if(Window.DEBUG_KEY_EVENT) { + System.out.println("[SYN_REPORT----]"); + } + break; + case 1: // EV_KEY + keyCode = LinuxEVKey2NewtVKey(code); // The device independent code. + keyChar = NewtVKey2Unicode(keyCode, modifiers); // The printable character w/ key modifiers. + if(Window.DEBUG_KEY_EVENT) { + System.out.println("[EV_KEY: [time "+timeSeconds+":"+timeSecondFraction+"] type "+type+" / code "+code+" = value "+value); + } + + switch(value) { + case 0: + eventType=KeyEvent.EVENT_KEY_RELEASED; + + switch(keyCode) { + case KeyEvent.VK_SHIFT: + modifiers &= ~InputEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifiers &= ~InputEvent.ALT_MASK; + break; + case KeyEvent.VK_ALT_GRAPH: + modifiers &= ~InputEvent.ALT_GRAPH_MASK; + break; + case KeyEvent.VK_CONTROL: + modifiers &= ~InputEvent.CTRL_MASK; + break; + } + + if(null != focusedWindow) { + focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); + } + if(Window.DEBUG_KEY_EVENT) { + System.out.println("[event released] keyCode: "+keyCode+" keyChar: "+keyChar+ " modifiers: "+modifiers); + } + break; + case 1: + eventType=KeyEvent.EVENT_KEY_PRESSED; + + switch(keyCode) { + case KeyEvent.VK_SHIFT: + modifiers |= InputEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifiers |= InputEvent.ALT_MASK; + break; + case KeyEvent.VK_ALT_GRAPH: + modifiers |= InputEvent.ALT_GRAPH_MASK; + break; + case KeyEvent.VK_CONTROL: + modifiers |= InputEvent.CTRL_MASK; + break; + } + + if(null != focusedWindow) { + focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); + } + if(Window.DEBUG_KEY_EVENT) { + System.out.println("[event pressed] keyCode: "+keyCode+" keyChar: "+keyChar+ " modifiers: "+modifiers); + } + break; + case 2: + eventType=KeyEvent.EVENT_KEY_PRESSED; + modifiers |= InputEvent.AUTOREPEAT_MASK; + + switch(keyCode) { + case KeyEvent.VK_SHIFT: + modifiers |= InputEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifiers |= InputEvent.ALT_MASK; + break; + case KeyEvent.VK_ALT_GRAPH: + modifiers |= InputEvent.ALT_GRAPH_MASK; + break; + case KeyEvent.VK_CONTROL: + modifiers |= InputEvent.CTRL_MASK; + break; + } + + if(null != focusedWindow) { + //Send syntetic autorepeat release + focusedWindow.sendKeyEvent(KeyEvent.EVENT_KEY_RELEASED, modifiers, keyCode, keyCode, keyChar); + + focusedWindow.sendKeyEvent(eventType, modifiers, keyCode, keyCode, keyChar); + } + if(Window.DEBUG_KEY_EVENT) { + System.out.println("[event released auto] keyCode: "+keyCode+" keyChar: "+keyChar+ " modifiers: "+modifiers); + System.out.println("[event pressed auto] keyCode: "+keyCode+" keyChar: "+keyChar+ " modifiers: "+modifiers); + } + modifiers &= ~InputEvent.AUTOREPEAT_MASK; + break; + } + break; + case 4: // EV_MSC + if(code==4) { // MSC_SCAN + // scancode ignore, linux kernel specific + } + break; + // TODO: handle joystick events + // TODO: handle mouse events + // TODO: handle headphone/hdmi connector events + default: // Print number. + if(Window.DEBUG_KEY_EVENT) { + System.out.println("TODO EventDevicePoller: [time "+timeSeconds+":"+timeSecondFraction+"] type "+type+" / code "+code+" = value "+value); + } + } + } + + if(null != fis) { + try { + fis.close(); + } catch (IOException e) { + } + } stop=true; - } - - private char NewtVKey2Unicode(short VK){ - if( KeyEvent.isPrintableKey(VK, false) ){ - return (char)VK; - } - return 0; - } - - @SuppressWarnings("unused") + } + + private char NewtVKey2Unicode(short VK, int modifiers) { + if( KeyEvent.isPrintableKey(VK) ) { + if((modifiers & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK) { + return (char)VK; + } else { + return (((char)VK) + "").toLowerCase().charAt(0); + } + } + return 0; + } + + @SuppressWarnings("unused") private char LinuxEVKey2Unicode(short EVKey) { - // This is the stuff normally mapped by a system keymap - - switch(EVKey){ - case 17: // w - return 'w'; - case 31: // s - return 's'; - case 30: // a - return 'a'; - case 32: // d - return 'd'; - case 1: // ESC - return 27; - case 28: // Enter - case 96: // Keypad Enter - return '\n'; - case 57: // Space - return ' '; - case 11: // 0 - case 82: // Numpad 0 - return '0'; - case 2: // 1 - case 79: // Numpad 1 - return '1'; - case 3: // 2 - case 80: // Numpad 1 - return '2'; - case 4: // 3 - case 81: // Numpad 3 - return '3'; - case 5: // 4 - case 75: // Numpad 4 - return '4'; - case 6: // 5 - case 76: // Numpad 5 - return '5'; - case 7: // 6 - case 77: // Numpad 6 - return '6'; - case 8: // 7 - case 71: // Numpad 7 - return '7'; - case 9: // 8 - case 72: // Numpad 8 - return '8'; - case 10: // 9 - case 73: // Numpad 9 - return '9'; - - default: - } - - return 0; - } - - private short LinuxEVKey2NewtVKey(short EVKey) { - - switch(EVKey) { - case 1: // ESC - return KeyEvent.VK_ESCAPE; - case 2: // 1 - return KeyEvent.VK_1; - case 79: // Numpad 1 - return KeyEvent.VK_NUMPAD1; - case 3: // 2 - return KeyEvent.VK_2; - case 80: // Numpad 2 - return KeyEvent.VK_NUMPAD2; - case 4: // 3 - return KeyEvent.VK_3; - case 81: // Numpad 3 - return KeyEvent.VK_NUMPAD3; - case 5: // 4 - return KeyEvent.VK_4; - case 75: // Numpad 4 - return KeyEvent.VK_NUMPAD4; - case 6: // 5 - return KeyEvent.VK_5; - case 76: // Numpad 5 - return KeyEvent.VK_NUMPAD5; - case 7: // 6 - return KeyEvent.VK_6; - case 77: // Numpad 6 - return KeyEvent.VK_NUMPAD6; - case 8: // 7 - return KeyEvent.VK_7; - case 71: // Numpad 7 - return KeyEvent.VK_NUMPAD7; - case 9: // 8 - return KeyEvent.VK_8; - case 72: // Numpad 8 - return KeyEvent.VK_NUMPAD8; - case 10: // 9 - return KeyEvent.VK_9; - case 73: // Numpad 9 - return KeyEvent.VK_NUMPAD9; - case 11: // 0 - return KeyEvent.VK_0; - case 82: // Numpad 0 - return KeyEvent.VK_NUMPAD0; - case 12: - return KeyEvent.VK_MINUS; - case 13: - return KeyEvent.VK_EQUALS; - case 14: // Backspace - return KeyEvent.VK_BACK_SPACE; - - case 15: - return KeyEvent.VK_TAB; - case 16: - return KeyEvent.VK_Q; - case 17: // w - return KeyEvent.VK_W; - case 18: - return KeyEvent.VK_E; - case 19: - return KeyEvent.VK_R; - case 20: - return KeyEvent.VK_T; - case 21: - return KeyEvent.VK_Y; - case 22: - return KeyEvent.VK_U; - case 23: - return KeyEvent.VK_I; - case 24: - return KeyEvent.VK_O; - case 25: - return KeyEvent.VK_P; - case 26: // left brace - return KeyEvent.VK_LEFT_PARENTHESIS; - case 27: // right brace - return KeyEvent.VK_RIGHT_PARENTHESIS; - case 28: // Enter - case 96: // Keypad Enter - return KeyEvent.VK_ENTER; - - case 29: // left ctrl - return KeyEvent.VK_CONTROL; - case 30: // a - return KeyEvent.VK_A; - case 31: // s - return KeyEvent.VK_S; - case 32: // d - return KeyEvent.VK_D; - case 33: - return KeyEvent.VK_F; - case 34: - return KeyEvent.VK_G; - case 35: - return KeyEvent.VK_H; - case 36: - return KeyEvent.VK_J; - case 37: - return KeyEvent.VK_K; - case 38: - return KeyEvent.VK_L; - case 39: - return KeyEvent.VK_SEMICOLON; - case 40: // apostrophe - return KeyEvent.VK_QUOTE; - case 41: // grave - return KeyEvent.VK_BACK_QUOTE; - - case 42: // left shift - return KeyEvent.VK_SHIFT; - case 43: - return KeyEvent.VK_BACK_SLASH; - case 44: - return KeyEvent.VK_Z; - case 45: - return KeyEvent.VK_X; - case 46: - return KeyEvent.VK_C; - case 47: - return KeyEvent.VK_V; - case 48: - return KeyEvent.VK_B; - case 49: - return KeyEvent.VK_N; - case 50: - return KeyEvent.VK_M; - case 51: - return KeyEvent.VK_COMMA; - case 52: // dot - return KeyEvent.VK_PERIOD; - case 53: - return KeyEvent.VK_SLASH; - case 54: - return KeyEvent.VK_SHIFT; - case 55: // kp asterisk - return KeyEvent.VK_ASTERISK; - case 56: // left alt - return KeyEvent.VK_ALT; - case 57: // Space - return KeyEvent.VK_SPACE; - case 58: - return KeyEvent.VK_CAPS_LOCK; - - case 59: - return KeyEvent.VK_F1; - case 60: - return KeyEvent.VK_F2; - case 61: - return KeyEvent.VK_F3; - case 62: - return KeyEvent.VK_F4; - case 63: - return KeyEvent.VK_F5; - case 64: - return KeyEvent.VK_F6; - case 65: - return KeyEvent.VK_F7; - case 66: - return KeyEvent.VK_F8; - case 67: - return KeyEvent.VK_F9; - case 68: - return KeyEvent.VK_F10; - - case 69: - return KeyEvent.VK_NUM_LOCK; - case 70: - return KeyEvent.VK_SCROLL_LOCK; - - case 74: // kp minus - return KeyEvent.VK_MINUS; - case 78: // kp plus - return KeyEvent.VK_PLUS; - case 83: // kp dot - return KeyEvent.VK_PERIOD; - - // TODO: add mappings for japanese special buttons - case 85: // zenkakuhankaku - case 86: // 102nd - break; // FIXME - - case 87: - return KeyEvent.VK_F11; - case 88: - return KeyEvent.VK_F12; - - case 89: // ro - return KeyEvent.VK_ROMAN_CHARACTERS; - case 90: // Katakana - return KeyEvent.VK_KATAKANA; - case 91: - return KeyEvent.VK_HIRAGANA; - - case 92: // kenkan - break; // FIXME - case 93: // katakana hiragana - break; // FIXME - case 94: // mu henkan - break; // FIXME - case 95: // kp jp comma - break; // FIXME - - case 97: // right ctrl - return KeyEvent.VK_CONTROL; - case 98: // kp slash - return KeyEvent.VK_SLASH; - - case 99: // sysrq - break; // FIXME - - case 100: // right alt - return KeyEvent.VK_ALT_GRAPH; - case 101: // linefeed - break; // FIXME - case 102: // home - return KeyEvent.VK_HOME; - case 103: // KEY_UP - return KeyEvent.VK_UP; - case 104: - return KeyEvent.VK_PAGE_UP; - case 105: // KEY_LEFT - return KeyEvent.VK_LEFT; - case 106: // KEY_RIGHT - return KeyEvent.VK_RIGHT; - case 107: - return KeyEvent.VK_END; - case 108: // KEY_DOWN - return KeyEvent.VK_DOWN; - case 109: - return KeyEvent.VK_PAGE_DOWN; - case 110: - return KeyEvent.VK_INSERT; - case 111: // del - return KeyEvent.VK_DELETE; - - case 112: // macro - break; // FIXME DEAD_MACRON? - case 113: // mute - break; // FIXME - case 114: // vol up - break; // FIXME - case 115: // vol down - break; // FIXME - case 116: // power - break; // FIXME - - case 117: // kp equals - return KeyEvent.VK_EQUALS; - case 118: // kp plus minux - break; // FIXME - case 119: // pause - return KeyEvent.VK_PAUSE; - case 120: // scale AL compiz scale expose - break; // FIXME - case 121: // kp comma - return KeyEvent.VK_COMMA; - case 122: // hangeul - break; // FIXME - case 123: // hanja - break; // FIXME - case 124: // yen - break; // FIXME - - case 125: // left meta - case 126: // right meta - return KeyEvent.VK_META; - case 127: // compose - return KeyEvent.VK_COMPOSE; - - case 128: // stop - return KeyEvent.VK_STOP; - case 129: // again - return KeyEvent.VK_AGAIN; - case 130: // properties - return KeyEvent.VK_PROPS; - case 131: // undo - return KeyEvent.VK_UNDO; - case 132: // front - break; // FIXME - case 133: // copy - return KeyEvent.VK_COPY; - case 134: // open - break; // FIXME - case 135: // paste - return KeyEvent.VK_PASTE; - case 136: // find - return KeyEvent.VK_FIND; - case 137: // cut - return KeyEvent.VK_CUT; - case 138: // help - return KeyEvent.VK_HELP; - case 139: // menu - break; // FIXME - case 140: // calc - break; // FIXME - case 141: // setup - break; // FIXME - case 142: // sleep - break; // FIXME - case 143: // wakeup - break; // FIXME - case 144: // file - break; // FIXME - case 145: // send file - break; // FIXME - case 146: // delete file - break; // FIXME - case 147: // xfer - break; // FIXME - case 148: // prog1 - break; // FIXME - case 149: // prog2 - break; // FIXME - case 150: // www - break; // FIXME - case 151: // msdos - break; // FIXME - case 152: // coffee - break; // FIXME - case 153: // direction - break; // FIXME - case 154: // cycle windows - break; // FIXME - case 155: // mail - break; // FIXME - case 156: // bookmarks - break; // FIXME - case 157: // computer - break; // FIXME - case 158: // back - break; // FIXME - case 159: // forward - break; // FIXME - case 160: // close cd - break; // FIXME - case 161: // eject cd - break; // FIXME - case 162: // eject close cd - break; // FIXME - case 163: // next song - break; // FIXME - case 164: // play pause - break; // FIXME - case 165: // previous song - break; // FIXME - case 166: // stop cd - break; // FIXME - case 167: // record - break; // FIXME - case 168: // rewind - break; // FIXME - case 169: // phone - break; // FIXME - case 170: // ISO - break; // FIXME - case 171: // config - break; // FIXME - case 172: // home page - break; // FIXME - case 173: // refresh - break; // FIXME - case 174: // exit - break; // FIXME - case 175: // move - break; // FIXME - case 176: // edit - break; // FIXME - case 177: // scroll up - break; // FIXME PAGE_UP? - case 178: // scroll down - break; // FIXME PAGE_DOWN? - case 179: // kp left paren - return KeyEvent.VK_LEFT_PARENTHESIS; - case 180: // kp right paren - return KeyEvent.VK_RIGHT_PARENTHESIS; - case 181: // new - break; // FIXME - case 182: // redo - break; // FIXME - - case 183: // F13 - return KeyEvent.VK_F13; - case 184: // F14 - return KeyEvent.VK_F14; - case 185: // F15 - return KeyEvent.VK_F15; - case 186: // F16 - return KeyEvent.VK_F16; - case 187: // F17 - return KeyEvent.VK_F17; - case 188: // F18 - return KeyEvent.VK_F18; - case 189: // F19 - return KeyEvent.VK_F19; - case 190: // F20 - return KeyEvent.VK_F20; - case 191: // F21 - return KeyEvent.VK_F21; - case 192: // F22 - return KeyEvent.VK_F22; - case 193: // F23 - return KeyEvent.VK_F23; - case 194: // F24 - return KeyEvent.VK_F24; - - case 200: // play cd - break; // FIXME - case 201: // pause cd - break; // FIXME - case 202: // prog 3 - break; // FIXME - case 203: // prog 4 - break; // FIXME - case 204: // dashboard - break; // FIXME - case 205: // suspend - break; // FIXME - case 206: // close - break; // FIXME - case 207: // play - break; // FIXME - case 208: // fast forward - break; // FIXME - case 210: // print - return KeyEvent.VK_PRINTSCREEN; // FIXME ? - case 211: // HP - break; // FIXME - case 212: // camera - break; // FIXME - case 213: // sound - break; // FIXME - case 214: // question - break; // FIXME - case 215: // email - break; // FIXME - case 216: // chat - break; // FIXME - case 217: // search - break; // FIXME - case 218: // connect - break; // FIXME - case 219: // finance - break; // FIXME - case 220: // sport - break; // FIXME - case 221: // shop - break; // FIXME - case 222: // alt erase - break; // FIXME - case 223: // cancel - break; // FIXME - case 224: // brightness down - break; // FIXME - case 225: // brightness up - break; // FIXME - case 226: // media - break; // FIXME - case 227: // switch video mode - break; // FIXME - case 228: // kb dillum toggle - break; // FIXME - case 229: // kb dillum down - break; // FIXME - case 230: // kb dillum up - break; // FIXME - case 231: // send - break; // FIXME - case 232: // reply - break; // FIXME - case 233: // forward mail - break; // FIXME - case 234: // save - break; // FIXME - case 235: // documents - break; // FIXME - case 236: // battery - break; // FIXME - case 237: // bluetooth - break; // FIXME - case 238: // wlan - break; // FIXME - case 239: // UWB - break; // FIXME - case 240: // unknown - return KeyEvent.VK_UNDEFINED; - case 241: // video next - break; // FIXME - case 242: // video prev - break; // FIXME - case 243: // brightness cycle - break; // FIXME - case 244: // brightness zero - break; // FIXME - case 245: // display off - break; // FIXME - case 246: // wimax - break; // FIXME - case 247: // rf kill radio off - break; // FIXME - case 248: // mic mute - break; // FIXME - - default: - } - - if(Window.DEBUG_KEY_EVENT) { - System.out.println("LinuxEVKey2NewtVKey: Unmapped EVKey "+EVKey); - } - + // This is the stuff normally mapped by a system keymap + + switch(EVKey) { + case 17: // w + return 'w'; + case 31: // s + return 's'; + case 30: // a + return 'a'; + case 32: // d + return 'd'; + case 1: // ESC + return 27; + case 28: // Enter + case 96: // Keypad Enter + return '\n'; + case 57: // Space + return ' '; + case 11: // 0 + case 82: // Numpad 0 + return '0'; + case 2: // 1 + case 79: // Numpad 1 + return '1'; + case 3: // 2 + case 80: // Numpad 1 + return '2'; + case 4: // 3 + case 81: // Numpad 3 + return '3'; + case 5: // 4 + case 75: // Numpad 4 + return '4'; + case 6: // 5 + case 76: // Numpad 5 + return '5'; + case 7: // 6 + case 77: // Numpad 6 + return '6'; + case 8: // 7 + case 71: // Numpad 7 + return '7'; + case 9: // 8 + case 72: // Numpad 8 + return '8'; + case 10: // 9 + case 73: // Numpad 9 + return '9'; + + default: + } + + return 0; + } + + private short LinuxEVKey2NewtVKey(short EVKey) { + + switch(EVKey) { + case 1: // ESC + return KeyEvent.VK_ESCAPE; + case 2: // 1 + return KeyEvent.VK_1; + case 79: // Numpad 1 + return KeyEvent.VK_NUMPAD1; + case 3: // 2 + return KeyEvent.VK_2; + case 80: // Numpad 2 + return KeyEvent.VK_NUMPAD2; + case 4: // 3 + return KeyEvent.VK_3; + case 81: // Numpad 3 + return KeyEvent.VK_NUMPAD3; + case 5: // 4 + return KeyEvent.VK_4; + case 75: // Numpad 4 + return KeyEvent.VK_NUMPAD4; + case 6: // 5 + return KeyEvent.VK_5; + case 76: // Numpad 5 + return KeyEvent.VK_NUMPAD5; + case 7: // 6 + return KeyEvent.VK_6; + case 77: // Numpad 6 + return KeyEvent.VK_NUMPAD6; + case 8: // 7 + return KeyEvent.VK_7; + case 71: // Numpad 7 + return KeyEvent.VK_NUMPAD7; + case 9: // 8 + return KeyEvent.VK_8; + case 72: // Numpad 8 + return KeyEvent.VK_NUMPAD8; + case 10: // 9 + return KeyEvent.VK_9; + case 73: // Numpad 9 + return KeyEvent.VK_NUMPAD9; + case 11: // 0 + return KeyEvent.VK_0; + case 82: // Numpad 0 + return KeyEvent.VK_NUMPAD0; + case 12: + return KeyEvent.VK_MINUS; + case 13: + return KeyEvent.VK_EQUALS; + case 14: // Backspace + return KeyEvent.VK_BACK_SPACE; + + case 15: + return KeyEvent.VK_TAB; + case 16: + return KeyEvent.VK_Q; + case 17: // w + return KeyEvent.VK_W; + case 18: + return KeyEvent.VK_E; + case 19: + return KeyEvent.VK_R; + case 20: + return KeyEvent.VK_T; + case 21: + return KeyEvent.VK_Y; + case 22: + return KeyEvent.VK_U; + case 23: + return KeyEvent.VK_I; + case 24: + return KeyEvent.VK_O; + case 25: + return KeyEvent.VK_P; + case 26: // left brace + return KeyEvent.VK_LEFT_PARENTHESIS; + case 27: // right brace + return KeyEvent.VK_RIGHT_PARENTHESIS; + case 28: // Enter + case 96: // Keypad Enter + return KeyEvent.VK_ENTER; + + case 29: // left ctrl + return KeyEvent.VK_CONTROL; + case 30: // a + return KeyEvent.VK_A; + case 31: // s + return KeyEvent.VK_S; + case 32: // d + return KeyEvent.VK_D; + case 33: + return KeyEvent.VK_F; + case 34: + return KeyEvent.VK_G; + case 35: + return KeyEvent.VK_H; + case 36: + return KeyEvent.VK_J; + case 37: + return KeyEvent.VK_K; + case 38: + return KeyEvent.VK_L; + case 39: + return KeyEvent.VK_SEMICOLON; + case 40: // apostrophe + return KeyEvent.VK_DEAD_ACUTE; + case 41: // grave + return KeyEvent.VK_DEAD_GRAVE; + + case 42: // left shift + return KeyEvent.VK_SHIFT; + case 43: + return KeyEvent.VK_BACK_SLASH; + case 44: + return KeyEvent.VK_Z; + case 45: + return KeyEvent.VK_X; + case 46: + return KeyEvent.VK_C; + case 47: + return KeyEvent.VK_V; + case 48: + return KeyEvent.VK_B; + case 49: + return KeyEvent.VK_N; + case 50: + return KeyEvent.VK_M; + case 51: + return KeyEvent.VK_COMMA; + case 52: // dot + return KeyEvent.VK_PERIOD; + case 53: + return KeyEvent.VK_SLASH; + case 54: + return KeyEvent.VK_SHIFT; + case 55: // kp asterisk + return KeyEvent.VK_ASTERISK; + case 56: // left alt + return KeyEvent.VK_ALT; + case 57: // Space + return KeyEvent.VK_SPACE; + case 58: + return KeyEvent.VK_CAPS_LOCK; + + case 59: + return KeyEvent.VK_F1; + case 60: + return KeyEvent.VK_F2; + case 61: + return KeyEvent.VK_F3; + case 62: + return KeyEvent.VK_F4; + case 63: + return KeyEvent.VK_F5; + case 64: + return KeyEvent.VK_F6; + case 65: + return KeyEvent.VK_F7; + case 66: + return KeyEvent.VK_F8; + case 67: + return KeyEvent.VK_F9; + case 68: + return KeyEvent.VK_F10; + + case 69: + return KeyEvent.VK_NUM_LOCK; + case 70: + return KeyEvent.VK_SCROLL_LOCK; + + case 74: // kp minus + return KeyEvent.VK_MINUS; + case 78: // kp plus + return KeyEvent.VK_PLUS; + case 83: // kp dot + return KeyEvent.VK_PERIOD; + + // TODO: add mappings for japanese special buttons + case 85: // zenkakuhankaku + case 86: // 102nd + break; // FIXME + + case 87: + return KeyEvent.VK_F11; + case 88: + return KeyEvent.VK_F12; + + case 89: // ro + return KeyEvent.VK_ROMAN_CHARACTERS; + case 90: // Katakana + return KeyEvent.VK_KATAKANA; + case 91: + return KeyEvent.VK_HIRAGANA; + + case 92: // kenkan + break; // FIXME + case 93: // katakana hiragana + break; // FIXME + case 94: // mu henkan + break; // FIXME + case 95: // kp jp comma + break; // FIXME + + case 97: // right ctrl + return KeyEvent.VK_CONTROL; + case 98: // kp slash + return KeyEvent.VK_SLASH; + + case 99: // sysrq + break; // FIXME + + case 100: // right alt + return KeyEvent.VK_ALT; + case 101: // linefeed + break; // FIXME + case 102: // home + return KeyEvent.VK_HOME; + case 103: // KEY_UP + return KeyEvent.VK_UP; + case 104: + return KeyEvent.VK_PAGE_UP; + case 105: // KEY_LEFT + return KeyEvent.VK_LEFT; + case 106: // KEY_RIGHT + return KeyEvent.VK_RIGHT; + case 107: + return KeyEvent.VK_END; + case 108: // KEY_DOWN + return KeyEvent.VK_DOWN; + case 109: + return KeyEvent.VK_PAGE_DOWN; + case 110: + return KeyEvent.VK_INSERT; + case 111: // del + return KeyEvent.VK_DELETE; + + case 112: // macro + break; // FIXME DEAD_MACRON? + case 113: // mute + break; // FIXME + case 114: // vol up + break; // FIXME + case 115: // vol down + break; // FIXME + case 116: // power + break; // FIXME + + case 117: // kp equals + return KeyEvent.VK_EQUALS; + case 118: // kp plus minux + break; // FIXME + case 119: // pause + return KeyEvent.VK_PAUSE; + case 120: // scale AL compiz scale expose + break; // FIXME + case 121: // kp comma + return KeyEvent.VK_COMMA; + case 122: // hangeul + break; // FIXME + case 123: // hanja + break; // FIXME + case 124: // yen + break; // FIXME + + case 125: // left meta + case 126: // right meta + return KeyEvent.VK_META; + case 127: // compose + return KeyEvent.VK_COMPOSE; + + case 128: // stop + return KeyEvent.VK_STOP; + case 129: // again + return KeyEvent.VK_AGAIN; + case 130: // properties + return KeyEvent.VK_PROPS; + case 131: // undo + return KeyEvent.VK_UNDO; + case 132: // front + break; // FIXME + case 133: // copy + return KeyEvent.VK_COPY; + case 134: // open + break; // FIXME + case 135: // paste + return KeyEvent.VK_PASTE; + case 136: // find + return KeyEvent.VK_FIND; + case 137: // cut + return KeyEvent.VK_CUT; + case 138: // help + return KeyEvent.VK_HELP; + case 139: // menu + break; // FIXME + case 140: // calc + break; // FIXME + case 141: // setup + break; // FIXME + case 142: // sleep + break; // FIXME + case 143: // wakeup + break; // FIXME + case 144: // file + break; // FIXME + case 145: // send file + break; // FIXME + case 146: // delete file + break; // FIXME + case 147: // xfer + break; // FIXME + case 148: // prog1 + break; // FIXME + case 149: // prog2 + break; // FIXME + case 150: // www + break; // FIXME + case 151: // msdos + break; // FIXME + case 152: // coffee + break; // FIXME + case 153: // direction + break; // FIXME + case 154: // cycle windows + break; // FIXME + case 155: // mail + break; // FIXME + case 156: // bookmarks + break; // FIXME + case 157: // computer + break; // FIXME + case 158: // back + break; // FIXME + case 159: // forward + break; // FIXME + case 160: // close cd + break; // FIXME + case 161: // eject cd + break; // FIXME + case 162: // eject close cd + break; // FIXME + case 163: // next song + break; // FIXME + case 164: // play pause + break; // FIXME + case 165: // previous song + break; // FIXME + case 166: // stop cd + break; // FIXME + case 167: // record + break; // FIXME + case 168: // rewind + break; // FIXME + case 169: // phone + break; // FIXME + case 170: // ISO + break; // FIXME + case 171: // config + break; // FIXME + case 172: // home page + break; // FIXME + case 173: // refresh + break; // FIXME + case 174: // exit + break; // FIXME + case 175: // move + break; // FIXME + case 176: // edit + break; // FIXME + case 177: // scroll up + break; // FIXME PAGE_UP? + case 178: // scroll down + break; // FIXME PAGE_DOWN? + case 179: // kp left paren + return KeyEvent.VK_LEFT_PARENTHESIS; + case 180: // kp right paren + return KeyEvent.VK_RIGHT_PARENTHESIS; + case 181: // new + break; // FIXME + case 182: // redo + break; // FIXME + + case 183: // F13 + return KeyEvent.VK_F13; + case 184: // F14 + return KeyEvent.VK_F14; + case 185: // F15 + return KeyEvent.VK_F15; + case 186: // F16 + return KeyEvent.VK_F16; + case 187: // F17 + return KeyEvent.VK_F17; + case 188: // F18 + return KeyEvent.VK_F18; + case 189: // F19 + return KeyEvent.VK_F19; + case 190: // F20 + return KeyEvent.VK_F20; + case 191: // F21 + return KeyEvent.VK_F21; + case 192: // F22 + return KeyEvent.VK_F22; + case 193: // F23 + return KeyEvent.VK_F23; + case 194: // F24 + return KeyEvent.VK_F24; + + case 200: // play cd + break; // FIXME + case 201: // pause cd + break; // FIXME + case 202: // prog 3 + break; // FIXME + case 203: // prog 4 + break; // FIXME + case 204: // dashboard + break; // FIXME + case 205: // suspend + break; // FIXME + case 206: // close + break; // FIXME + case 207: // play + break; // FIXME + case 208: // fast forward + break; // FIXME + case 210: // print + return KeyEvent.VK_PRINTSCREEN; // FIXME ? + case 211: // HP + break; // FIXME + case 212: // camera + break; // FIXME + case 213: // sound + break; // FIXME + case 214: // question + break; // FIXME + case 215: // email + break; // FIXME + case 216: // chat + break; // FIXME + case 217: // search + break; // FIXME + case 218: // connect + break; // FIXME + case 219: // finance + break; // FIXME + case 220: // sport + break; // FIXME + case 221: // shop + break; // FIXME + case 222: // alt erase + break; // FIXME + case 223: // cancel + break; // FIXME + case 224: // brightness down + break; // FIXME + case 225: // brightness up + break; // FIXME + case 226: // media + break; // FIXME + case 227: // switch video mode + break; // FIXME + case 228: // kb dillum toggle + break; // FIXME + case 229: // kb dillum down + break; // FIXME + case 230: // kb dillum up + break; // FIXME + case 231: // send + break; // FIXME + case 232: // reply + break; // FIXME + case 233: // forward mail + break; // FIXME + case 234: // save + break; // FIXME + case 235: // documents + break; // FIXME + case 236: // battery + break; // FIXME + case 237: // bluetooth + break; // FIXME + case 238: // wlan + break; // FIXME + case 239: // UWB + break; // FIXME + case 240: // unknown + return KeyEvent.VK_UNDEFINED; + case 241: // video next + break; // FIXME + case 242: // video prev + break; // FIXME + case 243: // brightness cycle + break; // FIXME + case 244: // brightness zero + break; // FIXME + case 245: // display off + break; // FIXME + case 246: // wimax + break; // FIXME + case 247: // rf kill radio off + break; // FIXME + case 248: // mic mute + break; // FIXME + + default: + } + + if(Window.DEBUG_KEY_EVENT) { + System.out.println("TODO LinuxEVKey2NewtVKey: Unmapped EVKey "+EVKey); + } + return KeyEvent.VK_UNDEFINED; - } - } + } + } } |