1 /*
   2  * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package com.sun.glass.events;
  26 
  27 import com.sun.glass.ui.Application;
  28 
  29 public class KeyEvent {
  30 
  31     /***************************************************************************
  32      *                                                                         *
  33      * Flags                                                                   *
  34      *                                                                         *
  35      **************************************************************************/
  36 
  37     /*
  38      * Key event type.
  39      */
  40     public final static int PRESS   = 111;
  41     public final static int RELEASE = 112;
  42     public final static int TYPED   = 113; // synthetic
  43 
  44     /*
  45      * Key event modifier flags.
  46      *
  47      * CONTROL/WINDOWS and OPTION/ALT are equal, because they
  48      * are mapped to each other on Mac/Windows
  49      */
  50     public final static int MODIFIER_NONE              = 0;
  51     public final static int MODIFIER_SHIFT             = 1 << 0;
  52     public final static int MODIFIER_FUNCTION          = 1 << 1;
  53     public final static int MODIFIER_CONTROL           = 1 << 2;
  54 
  55     public final static int MODIFIER_OPTION            = 1 << 3;
  56     public final static int MODIFIER_ALT               = 1 << 3;
  57 
  58     // The following should be named Meta perhaps?
  59     public final static int MODIFIER_COMMAND           = 1 << 4;
  60     public final static int MODIFIER_WINDOWS           = 1 << 4;
  61 
  62     // Mouse buttons
  63     public final static int MODIFIER_BUTTON_PRIMARY    = 1 << 5;
  64     public final static int MODIFIER_BUTTON_SECONDARY  = 1 << 6;
  65     public final static int MODIFIER_BUTTON_MIDDLE     = 1 << 7;
  66 
  67     /*
  68      * Key event key codes.
  69      */
  70     public final static int VK_UNDEFINED      = 0x0;
  71     // Misc
  72     public final static int VK_ENTER              = '\n';
  73     public final static int VK_BACKSPACE          = '\b';
  74     public final static int VK_TAB                = '\t';
  75 //    public final static int VK_CANCEL             = 0x03;
  76     public final static int VK_CLEAR              = 0x0C;
  77     public final static int VK_PAUSE              = 0x13;
  78     public final static int VK_ESCAPE             = 0x1B;
  79     public final static int VK_SPACE              = 0x20;
  80     public final static int VK_DELETE             = 0x7F;
  81     public final static int VK_PRINTSCREEN        = 0x9A;
  82     public final static int VK_INSERT             = 0x9B;
  83     public final static int VK_HELP               = 0x9C;
  84     // Modifiers
  85     public final static int VK_SHIFT              = 0x10;
  86     public final static int VK_CONTROL            = 0x11;
  87     public final static int VK_ALT                = 0x12;
  88     public final static int VK_ALT_GRAPH          = 0xFF7E;
  89     public final static int VK_WINDOWS            = 0x020C;
  90     public static final int VK_CONTEXT_MENU       = 0x020D;
  91     public final static int VK_CAPS_LOCK          = 0x14;
  92     public final static int VK_NUM_LOCK           = 0x90;
  93     public final static int VK_SCROLL_LOCK        = 0x91;
  94     public final static int VK_COMMAND            = 0x0300;
  95     // Navigation keys
  96     public final static int VK_PAGE_UP            = 0x21;
  97     public final static int VK_PAGE_DOWN          = 0x22;
  98     public final static int VK_END                = 0x23;
  99     public final static int VK_HOME               = 0x24;
 100     public final static int VK_LEFT               = 0x25;
 101     public final static int VK_UP                 = 0x26;
 102     public final static int VK_RIGHT              = 0x27;
 103     public final static int VK_DOWN               = 0x28;
 104 
 105     // Misc 2
 106     public final static int VK_COMMA              = 0x2C; // ','
 107     public final static int VK_MINUS              = 0x2D; // '-'
 108     public final static int VK_PERIOD             = 0x2E; // '.'
 109     public final static int VK_SLASH              = 0x2F; // '/'
 110     public final static int VK_SEMICOLON          = 0x3B; // ';'
 111     public final static int VK_EQUALS             = 0x3D; // '='
 112     public final static int VK_OPEN_BRACKET       = 0x5B; // '['
 113     public final static int VK_BACK_SLASH         = 0x5C; // '\'
 114     public final static int VK_CLOSE_BRACKET      = 0x5D; // ']'
 115     public final static int VK_MULTIPLY           = 0x6A; // '*'
 116     public final static int VK_ADD                = 0x6B; // '+'
 117     public final static int VK_SEPARATOR          = 0x6C;
 118     public final static int VK_SUBTRACT           = 0x6D;
 119     public final static int VK_DECIMAL            = 0x6E;
 120     public final static int VK_DIVIDE             = 0x6F;
 121     public final static int VK_AMPERSAND          = 0x96;
 122     public final static int VK_ASTERISK           = 0x97;
 123     public final static int VK_DOUBLE_QUOTE       = 0x98; // '"'
 124     public final static int VK_LESS               = 0x99; // '<'
 125     public final static int VK_GREATER            = 0xa0; // '>'
 126     public final static int VK_BRACELEFT          = 0xa1; // '{'
 127     public final static int VK_BRACERIGHT         = 0xa2; // '}'
 128     public final static int VK_BACK_QUOTE         = 0xC0; // '`'
 129     public final static int VK_QUOTE              = 0xDE; // '''
 130     public final static int VK_AT                 = 0x0200; // '@'
 131     public final static int VK_COLON              = 0x0201; // ':'
 132     public final static int VK_CIRCUMFLEX         = 0x0202; // '^'
 133     public final static int VK_DOLLAR             = 0x0203; // '$'
 134     public final static int VK_EURO_SIGN          = 0x0204;
 135     public final static int VK_EXCLAMATION        = 0x0205; // '!'
 136     public final static int VK_INV_EXCLAMATION    = 0x0206;
 137     public final static int VK_LEFT_PARENTHESIS   = 0x0207; // '('
 138     public final static int VK_NUMBER_SIGN        = 0x0208; // '#'
 139     public final static int VK_PLUS               = 0x0209; // '+'
 140     public final static int VK_RIGHT_PARENTHESIS  = 0x020A; // ')'
 141     public final static int VK_UNDERSCORE         = 0x020B; // '_'
 142     // Numeric keys
 143     public final static int VK_0                  = 0x30; // '0'
 144     public final static int VK_1                  = 0x31; // '1'
 145     public final static int VK_2                  = 0x32; // '2'
 146     public final static int VK_3                  = 0x33; // '3'
 147     public final static int VK_4                  = 0x34; // '4'
 148     public final static int VK_5                  = 0x35; // '5'
 149     public final static int VK_6                  = 0x36; // '6'
 150     public final static int VK_7                  = 0x37; // '7'
 151     public final static int VK_8                  = 0x38; // '8'
 152     public final static int VK_9                  = 0x39; // '9'
 153     // Alpha keys
 154     public final static int VK_A                  = 0x41; // 'A'
 155     public final static int VK_B                  = 0x42; // 'B'
 156     public final static int VK_C                  = 0x43; // 'C'
 157     public final static int VK_D                  = 0x44; // 'D'
 158     public final static int VK_E                  = 0x45; // 'E'
 159     public final static int VK_F                  = 0x46; // 'F'
 160     public final static int VK_G                  = 0x47; // 'G'
 161     public final static int VK_H                  = 0x48; // 'H'
 162     public final static int VK_I                  = 0x49; // 'I'
 163     public final static int VK_J                  = 0x4A; // 'J'
 164     public final static int VK_K                  = 0x4B; // 'K'
 165     public final static int VK_L                  = 0x4C; // 'L'
 166     public final static int VK_M                  = 0x4D; // 'M'
 167     public final static int VK_N                  = 0x4E; // 'N'
 168     public final static int VK_O                  = 0x4F; // 'O'
 169     public final static int VK_P                  = 0x50; // 'P'
 170     public final static int VK_Q                  = 0x51; // 'Q'
 171     public final static int VK_R                  = 0x52; // 'R'
 172     public final static int VK_S                  = 0x53; // 'S'
 173     public final static int VK_T                  = 0x54; // 'T'
 174     public final static int VK_U                  = 0x55; // 'U'
 175     public final static int VK_V                  = 0x56; // 'V'
 176     public final static int VK_W                  = 0x57; // 'W'
 177     public final static int VK_X                  = 0x58; // 'X'
 178     public final static int VK_Y                  = 0x59; // 'Y'
 179     public final static int VK_Z                  = 0x5A; // 'Z'
 180     // Numpad keys
 181     public final static int VK_NUMPAD0            = 0x60;
 182     public final static int VK_NUMPAD1            = 0x61;
 183     public final static int VK_NUMPAD2            = 0x62;
 184     public final static int VK_NUMPAD3            = 0x63;
 185     public final static int VK_NUMPAD4            = 0x64;
 186     public final static int VK_NUMPAD5            = 0x65;
 187     public final static int VK_NUMPAD6            = 0x66;
 188     public final static int VK_NUMPAD7            = 0x67;
 189     public final static int VK_NUMPAD8            = 0x68;
 190     public final static int VK_NUMPAD9            = 0x69;
 191     // Function keys
 192     public final static int VK_F1                 = 0x70;
 193     public final static int VK_F2                 = 0x71;
 194     public final static int VK_F3                 = 0x72;
 195     public final static int VK_F4                 = 0x73;
 196     public final static int VK_F5                 = 0x74;
 197     public final static int VK_F6                 = 0x75;
 198     public final static int VK_F7                 = 0x76;
 199     public final static int VK_F8                 = 0x77;
 200     public final static int VK_F9                 = 0x78;
 201     public final static int VK_F10                = 0x79;
 202     public final static int VK_F11                = 0x7A;
 203     public final static int VK_F12                = 0x7B;
 204     public final static int VK_F13                = 0xF000;
 205     public final static int VK_F14                = 0xF001;
 206     public final static int VK_F15                = 0xF002;
 207     public final static int VK_F16                = 0xF003;
 208     public final static int VK_F17                = 0xF004;
 209     public final static int VK_F18                = 0xF005;
 210     public final static int VK_F19                = 0xF006;
 211     public final static int VK_F20                = 0xF007;
 212     public final static int VK_F21                = 0xF008;
 213     public final static int VK_F22                = 0xF009;
 214     public final static int VK_F23                = 0xF00A;
 215     public final static int VK_F24                = 0xF00B;
 216 
 217     public final static int VK_DEAD_GRAVE               = 0x80;
 218     public final static int VK_DEAD_ACUTE               = 0x81;
 219     public final static int VK_DEAD_CIRCUMFLEX          = 0x82;
 220     public final static int VK_DEAD_TILDE               = 0x83;
 221     public final static int VK_DEAD_MACRON              = 0x84;
 222     public final static int VK_DEAD_BREVE               = 0x85;
 223     public final static int VK_DEAD_ABOVEDOT            = 0x86;
 224     public final static int VK_DEAD_DIAERESIS           = 0x87;
 225     public final static int VK_DEAD_ABOVERING           = 0x88;
 226     public final static int VK_DEAD_DOUBLEACUTE         = 0x89;
 227     public final static int VK_DEAD_CARON               = 0x8a;
 228     public final static int VK_DEAD_CEDILLA             = 0x8b;
 229     public final static int VK_DEAD_OGONEK              = 0x8c;
 230     public final static int VK_DEAD_IOTA                = 0x8d;
 231     public final static int VK_DEAD_VOICED_SOUND        = 0x8e;
 232     public final static int VK_DEAD_SEMIVOICED_SOUND    = 0x8f;
 233 
 234     /***************************************************************************
 235      *                                                                         *
 236      * Static Methods                                                          *
 237      *                                                                         *
 238      **************************************************************************/
 239 
 240     /**
 241      * Returns a VK_ code of a key capable of producing the given unicode
 242      * character with respect to the currently active keyboard layout or
 243      * VK_UNDEFINED if the character isn't present in the current layout.
 244      *
 245      * @return integer code for the given char
 246      */
 247     public static int getKeyCodeForChar(char c) {
 248         return Application.getKeyCodeForChar(c);
 249     }
 250 
 251     /**
 252      * Gets a string representation of the KeyEvent type (PRESS, RELEASE, TYPED,
 253      * or UNKNOWN).
 254      * @param type Should be one of PRESS, RELEASE, or TYPED.
 255      * @return A string representation of the key event type. This will be
 256      *           UNKNOWN if the type is something other than what was expected.
 257      */
 258     public final static String getTypeString(int type) {
 259         switch (type) {
 260             case PRESS:   return "PRESS";
 261             case RELEASE: return "RELEASE";
 262             case TYPED:   return "TYPED";
 263             default:      return "UNKNOWN";
 264         }
 265     }
 266 }