35package com.jogamp.newt.event;
37import com.jogamp.common.util.Bitfield;
118@SuppressWarnings(
"serial")
121 private KeyEvent(
final short eventType,
final Object source,
final long when,
final int modifiers,
final short keyCode,
final short keySym,
final int keySymModMask,
final char keyChar) {
122 super(eventType, source, when, modifiers | keySymModMask);
123 this.keyCode=keyCode;
125 this.keyChar=keyChar;
128 if( isPrintableKey(keySym,
false) && isPrintableKey((
short)keyChar,
true) ) {
129 _flags |= F_PRINTABLE_MASK;
131 if( 0 != keySymModMask ) {
132 _flags |= F_MODIFIER_MASK;
135 _flags |= F_ACTION_MASK;
143 final int pma_bits = flags & ( F_PRINTABLE_MASK | F_MODIFIER_MASK | F_ACTION_MASK ) ;
144 final int pma_count = Bitfield.Util.bitCount(pma_bits);
145 if ( 1 != pma_count ) {
146 throw new InternalError(
"Key must be either of type printable, modifier or action - but it is of "+pma_count+
" types: "+
this);
151 public static KeyEvent create(
final short eventType,
final Object source,
final long when,
final int modifiers,
final short keyCode,
final short keySym,
final char keyChar) {
152 return new KeyEvent(eventType, source, when, modifiers, keyCode, keySym, getModifierMask(keySym), keyChar);
201 return toString(
null).toString();
205 public final StringBuilder
toString(StringBuilder sb) {
207 sb =
new StringBuilder();
209 sb.append(
"KeyEvent[").append(getEventTypeString(getEventType())).append(
", code ").append(toHexString(keyCode)).append(
", sym ").append(toHexString(keySym)).append(
", char '").append(keyChar).append(
"' (").append(toHexString((
short)keyChar))
210 .append(
"), printable ").append(isPrintableKey()).append(
", modifier ").append(isModifierKey()).append(
", action ").append(isActionKey()).append(
", ");
211 return super.toString(sb).append(
"]");
216 case EVENT_KEY_PRESSED:
return "PRESSED";
217 case EVENT_KEY_RELEASED:
return "RELEASED";
218 default:
return "unknown (" + type +
")";
228 if(
'a' <= keyChar && keyChar <=
'z' ) {
231 return (
short) keyChar;
283 return 0 != ( F_MODIFIER_MASK & flags ) ;
297 return 0 != ( F_ACTION_MASK & flags ) ;
316 public static boolean isPrintableKey(
final short uniChar,
final boolean isKeyChar) {
317 if ( VK_BACK_SPACE == uniChar || VK_TAB == uniChar || VK_ENTER == uniChar ) {
321 if( ( nonPrintableKeys[0].min <= uniChar && uniChar <= nonPrintableKeys[0].max ) ||
322 ( nonPrintableKeys[1].min <= uniChar && uniChar <= nonPrintableKeys[1].max ) ||
323 ( nonPrintableKeys[2].min <= uniChar && uniChar <= nonPrintableKeys[2].max ) ||
324 ( nonPrintableKeys[3].min <= uniChar && uniChar <= nonPrintableKeys[3].max ) ) {
328 if( ( nonPrintableKeys[0].inclKeyChar && nonPrintableKeys[0].min <= uniChar && uniChar <= nonPrintableKeys[0].max ) ||
329 ( nonPrintableKeys[1].inclKeyChar && nonPrintableKeys[1].min <= uniChar && uniChar <= nonPrintableKeys[1].max ) ||
330 ( nonPrintableKeys[2].inclKeyChar && nonPrintableKeys[2].min <= uniChar && uniChar <= nonPrintableKeys[2].max ) ||
331 ( nonPrintableKeys[3].inclKeyChar && nonPrintableKeys[3].min <= uniChar && uniChar <= nonPrintableKeys[3].max ) ) {
335 return VK_UNDEFINED != uniChar;
350 return 0 != ( F_PRINTABLE_MASK & flags ) ;
353 private final short keyCode;
354 private final short keySym;
355 private final char keyChar;
356 private final byte flags;
357 private static final byte F_MODIFIER_MASK = 1 << 0;
358 private static final byte F_ACTION_MASK = 1 << 1;
359 private static final byte F_PRINTABLE_MASK = 1 << 2;
362 public static final short EVENT_KEY_PRESSED = 300;
364 public static final short EVENT_KEY_RELEASED= 301;
369 public static final char NULL_CHAR =
'\0';
380 private NonPrintableRange(
final short min,
final short max,
final boolean inclKeyChar) {
383 this.inclKeyChar = inclKeyChar;
411 public static final short VK_UNDEFINED = (short) 0x0;
413 static final short VK_FREE01 = (short) 0x01;
416 public static final short VK_HOME = (short) 0x02;
419 public static final short VK_END = (short) 0x03;
422 public static final short VK_FINAL = (short) 0x04;
425 public static final short VK_PRINTSCREEN = (short) 0x05;
427 static final short VK_FREE06 = (short) 0x06;
428 static final short VK_FREE07 = (short) 0x07;
431 public static final short VK_BACK_SPACE = (short) 0x08;
434 public static final short VK_TAB = (short) 0x09;
437 static final short VK_FREE0A = (short) 0x0A;
440 public static final short VK_PAGE_DOWN = (short) 0x0B;
443 public static final short VK_CLEAR = (short) 0x0C;
446 public static final short VK_ENTER = (short) 0x0D;
448 static final short VK_FREE0E = (short) 0x0E;
451 public static final short VK_SHIFT = (short) 0x0F;
454 public static final short VK_PAGE_UP = (short) 0x10;
457 public static final short VK_CONTROL = (short) 0x11;
460 public static final short VK_ALT = (short) 0x12;
463 public static final short VK_ALT_GRAPH = (short) 0x13;
466 public static final short VK_CAPS_LOCK = (short) 0x14;
468 static final short VK_FREE15 = (short) 0x15;
471 public static final short VK_PAUSE = (short) 0x16;
474 public static final short VK_SCROLL_LOCK = (short) 0x17;
477 public static final short VK_CANCEL = (short) 0x18;
479 static final short VK_FREE19 = (short) 0x19;
482 public static final short VK_INSERT = (short) 0x1A;
485 public static final short VK_ESCAPE = (short) 0x1B;
488 public static final short VK_CONVERT = (short) 0x1C;
491 public static final short VK_NONCONVERT = (short) 0x1D;
494 public static final short VK_ACCEPT = (short) 0x1E;
497 public static final short VK_MODECHANGE = (short) 0x1F;
505 public static final short VK_SPACE = (short) 0x20;
508 public static final short VK_EXCLAMATION_MARK = (short) 0x21;
511 public static final short VK_QUOTEDBL = (short) 0x22;
514 public static final short VK_NUMBER_SIGN = (short) 0x23;
517 public static final short VK_DOLLAR = (short) 0x24;
520 public static final short VK_PERCENT = (short) 0x25;
523 public static final short VK_AMPERSAND = (short) 0x26;
526 public static final short VK_QUOTE = (short) 0x27;
529 public static final short VK_LEFT_PARENTHESIS = (short) 0x28;
532 public static final short VK_RIGHT_PARENTHESIS = (short) 0x29;
535 public static final short VK_ASTERISK = (short) 0x2A;
538 public static final short VK_PLUS = (short) 0x2B;
541 public static final short VK_COMMA = (short) 0x2C;
544 public static final short VK_MINUS = (short) 0x2D;
547 public static final short VK_PERIOD = (short) 0x2E;
550 public static final short VK_SLASH = (short) 0x2F;
553 public static final short VK_0 = (short) 0x30;
555 public static final short VK_1 = (short) 0x31;
557 public static final short VK_2 = (short) 0x32;
559 public static final short VK_3 = (short) 0x33;
561 public static final short VK_4 = (short) 0x34;
563 public static final short VK_5 = (short) 0x35;
565 public static final short VK_6 = (short) 0x36;
567 public static final short VK_7 = (short) 0x37;
569 public static final short VK_8 = (short) 0x38;
571 public static final short VK_9 = (short) 0x39;
574 public static final short VK_COLON = (short) 0x3A;
577 public static final short VK_SEMICOLON = (short) 0x3B;
580 public static final short VK_LESS = (short) 0x3C;
583 public static final short VK_EQUALS = (short) 0x3D;
586 public static final short VK_GREATER = (short) 0x3E;
589 public static final short VK_QUESTIONMARK = (short) 0x3F;
592 public static final short VK_AT = (short) 0x40;
595 public static final short VK_A = (short) 0x41;
597 public static final short VK_B = (short) 0x42;
599 public static final short VK_C = (short) 0x43;
601 public static final short VK_D = (short) 0x44;
603 public static final short VK_E = (short) 0x45;
605 public static final short VK_F = (short) 0x46;
607 public static final short VK_G = (short) 0x47;
609 public static final short VK_H = (short) 0x48;
611 public static final short VK_I = (short) 0x49;
613 public static final short VK_J = (short) 0x4A;
615 public static final short VK_K = (short) 0x4B;
617 public static final short VK_L = (short) 0x4C;
619 public static final short VK_M = (short) 0x4D;
621 public static final short VK_N = (short) 0x4E;
623 public static final short VK_O = (short) 0x4F;
625 public static final short VK_P = (short) 0x50;
627 public static final short VK_Q = (short) 0x51;
629 public static final short VK_R = (short) 0x52;
631 public static final short VK_S = (short) 0x53;
633 public static final short VK_T = (short) 0x54;
635 public static final short VK_U = (short) 0x55;
637 public static final short VK_V = (short) 0x56;
639 public static final short VK_W = (short) 0x57;
641 public static final short VK_X = (short) 0x58;
643 public static final short VK_Y = (short) 0x59;
645 public static final short VK_Z = (short) 0x5A;
648 public static final short VK_OPEN_BRACKET = (short) 0x5B;
651 public static final short VK_BACK_SLASH = (short) 0x5C;
654 public static final short VK_CLOSE_BRACKET = (short) 0x5D;
657 public static final short VK_CIRCUMFLEX = (short) 0x5E;
660 public static final short VK_UNDERSCORE = (short) 0x5F;
663 public static final short VK_BACK_QUOTE = (short) 0x60;
677 public static final short VK_F1 = (short) ( 0x60+ 1 );
680 public static final short VK_F2 = (short) ( 0x60+ 2 );
683 public static final short VK_F3 = (short) ( 0x60+ 3 );
686 public static final short VK_F4 = (short) ( 0x60+ 4 );
689 public static final short VK_F5 = (short) ( 0x60+ 5 );
692 public static final short VK_F6 = (short) ( 0x60+ 6 );
695 public static final short VK_F7 = (short) ( 0x60+ 7 );
698 public static final short VK_F8 = (short) ( 0x60+ 8 );
701 public static final short VK_F9 = (short) ( 0x60+ 9 );
704 public static final short VK_F10 = (short) ( 0x60+10 );
707 public static final short VK_F11 = (short) ( 0x60+11 );
710 public static final short VK_F12 = (short) ( 0x60+12 );
713 public static final short VK_F13 = (short) ( 0x60+13 );
716 public static final short VK_F14 = (short) ( 0x60+14 );
719 public static final short VK_F15 = (short) ( 0x60+15 );
722 public static final short VK_F16 = (short) ( 0x60+16 );
725 public static final short VK_F17 = (short) ( 0x60+17 );
728 public static final short VK_F18 = (short) ( 0x60+18 );
731 public static final short VK_F19 = (short) ( 0x60+19 );
734 public static final short VK_F20 = (short) ( 0x60+20 );
737 public static final short VK_F21 = (short) ( 0x60+21 );
740 public static final short VK_F22 = (short) ( 0x60+22 );
743 public static final short VK_F23 = (short) ( 0x60+23 );
746 public static final short VK_F24 = (short) ( 0x60+24 );
750 public static final short VK_LEFT_BRACE = (short) 0x7B;
752 public static final short VK_PIPE = (short) 0x7C;
754 public static final short VK_RIGHT_BRACE = (short) 0x7D;
757 public static final short VK_TILDE = (short) 0x7E;
766 public static final short VK_SEPARATOR = (short) 0x7F;
769 public static final short VK_NUMPAD0 = (short) 0x80;
771 public static final short VK_NUMPAD1 = (short) 0x81;
773 public static final short VK_NUMPAD2 = (short) 0x82;
775 public static final short VK_NUMPAD3 = (short) 0x83;
777 public static final short VK_NUMPAD4 = (short) 0x84;
779 public static final short VK_NUMPAD5 = (short) 0x85;
781 public static final short VK_NUMPAD6 = (short) 0x86;
783 public static final short VK_NUMPAD7 = (short) 0x87;
785 public static final short VK_NUMPAD8 = (short) 0x88;
787 public static final short VK_NUMPAD9 = (short) 0x89;
790 public static final short VK_DECIMAL = (short) 0x8A;
793 public static final short VK_ADD = (short) 0x8B;
796 public static final short VK_SUBTRACT = (short) 0x8C;
799 public static final short VK_MULTIPLY = (short) 0x8D;
802 public static final short VK_DIVIDE = (short) 0x8E;
805 public static final short VK_DELETE = (short) 0x93;
808 public static final short VK_NUM_LOCK = (short) 0x94;
811 public static final short VK_LEFT = (short) 0x95;
814 public static final short VK_UP = (short) 0x96;
817 public static final short VK_RIGHT = (short) 0x97;
820 public static final short VK_DOWN = (short) 0x98;
823 public static final short VK_CONTEXT_MENU = (short) 0x99;
829 public static final short VK_WINDOWS = (short) 0x9A;
832 public static final short VK_META = (short) 0x9B;
835 public static final short VK_HELP = (short) 0x9C;
838 public static final short VK_COMPOSE = (short) 0x9D;
841 public static final short VK_BEGIN = (short) 0x9E;
844 public static final short VK_STOP = (short) 0x9F;
851 public static final short VK_INVERTED_EXCLAMATION_MARK = (short) 0xA1;
854 public static final short VK_EURO_SIGN = (short) 0x20AC;
861 public static final short VK_CUT = (short) 0xF879;
862 public static final short VK_COPY = (short) 0xF87A;
863 public static final short VK_PASTE = (short) 0xF87B;
864 public static final short VK_UNDO = (short) 0xF87C;
865 public static final short VK_AGAIN = (short) 0xF87D;
866 public static final short VK_FIND = (short) 0xF87E;
867 public static final short VK_PROPS = (short) 0xF87F;
875 public static final short VK_INPUT_METHOD_ON_OFF = (short) 0xF890;
881 public static final short VK_CODE_INPUT = (short) 0xF891;
887 public static final short VK_ROMAN_CHARACTERS = (short) 0xF892;
893 public static final short VK_ALL_CANDIDATES = (short) 0xF893;
899 public static final short VK_PREVIOUS_CANDIDATE = (short) 0xF894;
905 public static final short VK_ALPHANUMERIC = (short) 0xF895;
911 public static final short VK_KATAKANA = (short) 0xF896;
917 public static final short VK_HIRAGANA = (short) 0xF897;
923 public static final short VK_FULL_WIDTH = (short) 0xF898;
929 public static final short VK_HALF_WIDTH = (short) 0xF89A;
936 public static final short VK_JAPANESE_KATAKANA = (short) 0xF89B;
943 public static final short VK_JAPANESE_HIRAGANA = (short) 0xF89C;
950 public static final short VK_JAPANESE_ROMAN = (short) 0xF89D;
957 public static final short VK_KANA_LOCK = (short) 0xF89F;
962 public static final short VK_KEYBOARD_INVISIBLE = (short) 0xF8FF;
final boolean inclKeyChar
true if valid for keyChar values as well, otherwise only valid for keyCode and keySym due to collisio...
final boolean isPrintableKey()
Returns true if key symbol and key char represents a printable character, i.e.
final StringBuilder toString(StringBuilder sb)
static final short VK_A
VK_A thru VK_Z are the same as Capital UTF16/ASCII 'A' thru 'Z' (0x41 - 0x5A)
static String getEventTypeString(final short type)
final char getKeyChar()
Returns the UTF-16 character reflecting the key symbol incl.
final boolean isModifierKey()
Returns true if key symbol represents a modifier key, otherwise false.
final short getKeySymbol()
Returns the virtual key symbol reflecting the current keyboard layout.
static int getModifierMask(final short vKey)
If vKey is a modifier key, method returns the corresponding modifier mask, otherwise 0.
static boolean isModifierKey(final short vKey)
Returns true if the given virtualKey represents a modifier key, otherwise false.
final boolean isActionKey()
Returns true if key symbol represents a non-printable and non-modifier action key,...
static KeyEvent create(final short eventType, final Object source, final long when, final int modifiers, final short keyCode, final short keySym, final char keyChar)
final short getKeyCode()
Returns the virtual key code using a fixed mapping to the US keyboard layout.
static boolean isPrintableKey(final short uniChar, final boolean isKeyChar)
Returns true if given uniChar represents a printable character, i.e.
static short utf16ToVKey(final char keyChar)