include/SDL_scancode.h
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Feb 2008 15:31:09 +0000
changeset 2305 fbe8ff44c519
parent 2303 d87417504c75
child 2859 99210400e8b9
permissions -rw-r--r--
First pass of new SDL scancode concept for X11.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2006 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 /**
    24  * \file SDL_scancode.h
    25  */
    26 
    27 #ifndef _SDL_scancode_h
    28 #define _SDL_scancode_h
    29 
    30 #include "SDL_stdinc.h"
    31 
    32 /**
    33  * \enum SDL_scancode
    34  *
    35  * \brief The SDL keyboard scancode representation.
    36  *
    37  * Values of this type are used to represent keyboard keys, among other places
    38  * in the \link SDL_keysym::scancode key.keysym.scancode \endlink field of the
    39  * SDL_Event structure.
    40  *
    41  * The values in this enumeration are based on the USB usage page standard:
    42  * http://www.usb.org/developers/devclass_docs/Hut1_12.pdf
    43  */
    44 typedef enum
    45 {
    46     SDL_SCANCODE_UNKNOWN = 0,
    47 
    48     /* These values are from usage page 0x07 (USB keyboard page) */
    49 
    50     SDL_SCANCODE_A = 4,
    51     SDL_SCANCODE_B = 5,
    52     SDL_SCANCODE_C = 6,
    53     SDL_SCANCODE_D = 7,
    54     SDL_SCANCODE_E = 8,
    55     SDL_SCANCODE_F = 9,
    56     SDL_SCANCODE_G = 10,
    57     SDL_SCANCODE_H = 11,
    58     SDL_SCANCODE_I = 12,
    59     SDL_SCANCODE_J = 13,
    60     SDL_SCANCODE_K = 14,
    61     SDL_SCANCODE_L = 15,
    62     SDL_SCANCODE_M = 16,
    63     SDL_SCANCODE_N = 17,
    64     SDL_SCANCODE_O = 18,
    65     SDL_SCANCODE_P = 19,
    66     SDL_SCANCODE_Q = 20,
    67     SDL_SCANCODE_R = 21,
    68     SDL_SCANCODE_S = 22,
    69     SDL_SCANCODE_T = 23,
    70     SDL_SCANCODE_U = 24,
    71     SDL_SCANCODE_V = 25,
    72     SDL_SCANCODE_W = 26,
    73     SDL_SCANCODE_X = 27,
    74     SDL_SCANCODE_Y = 28,
    75     SDL_SCANCODE_Z = 29,
    76 
    77     SDL_SCANCODE_1 = 30,
    78     SDL_SCANCODE_2 = 31,
    79     SDL_SCANCODE_3 = 32,
    80     SDL_SCANCODE_4 = 33,
    81     SDL_SCANCODE_5 = 34,
    82     SDL_SCANCODE_6 = 35,
    83     SDL_SCANCODE_7 = 36,
    84     SDL_SCANCODE_8 = 37,
    85     SDL_SCANCODE_9 = 38,
    86     SDL_SCANCODE_0 = 39,
    87 
    88     SDL_SCANCODE_RETURN = 40,
    89     SDL_SCANCODE_ESCAPE = 41,
    90     SDL_SCANCODE_BACKSPACE = 42,
    91     SDL_SCANCODE_TAB = 43,
    92     SDL_SCANCODE_SPACE = 44,
    93 
    94     SDL_SCANCODE_MINUS = 45,
    95     SDL_SCANCODE_EQUALS = 46,
    96     SDL_SCANCODE_LEFTBRACKET = 47,
    97     SDL_SCANCODE_RIGHTBRACKET = 48,
    98     SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return key on ISO keyboards and at the right end of the QWERTY row on ANSI keyboards. Produces REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US layout, REVERSE SOLIDUS and VERTICAL LINE in a UK Mac layout, NUMBER SIGN and TILDE in a UK Windows layout, DOLLAR SIGN and POUND SIGN in a Swiss German layout, NUMBER SIGN and APOSTROPHE in a German layout, GRAVE ACCENT and POUND SIGN in a French Mac layout, and ASTERISK and MICRO SIGN in a French Windows layout. */
    99     SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code instead of 49 for the same key, but all OSes I've seen treat the two codes identically. So, as an implementor, unless your keyboard generates both of those codes and your OS treats them differently, you should generate SDL_SCANCODE_BACKSLASH instead of this code. As a user, you should not rely on this code because SDL will never generate it with most (all?) keyboards. */
   100     SDL_SCANCODE_SEMICOLON = 51,
   101     SDL_SCANCODE_APOSTROPHE = 52,
   102     SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI and ISO keyboards). Produces GRAVE ACCENT and TILDE in a US Windows layout and in US and UK Mac layouts on ANSI keyboards, GRAVE ACCENT and NOT SIGN in a UK Windows layout, SECTION SIGN and PLUS-MINUS SIGN in US and UK Mac layouts on ISO keyboards, SECTION SIGN and DEGREE SIGN in a Swiss German layout (Mac: only on ISO keyboards), CIRCUMFLEX ACCENT and DEGREE SIGN in a German layout (Mac: only on ISO keyboards), SUPERSCRIPT TWO and TILDE in a French Windows layout, COMMERCIAL AT and NUMBER SIGN in a French Mac layout on ISO keyboards, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French Mac layout on ANSI keyboards. */
   103     SDL_SCANCODE_COMMA = 54,
   104     SDL_SCANCODE_PERIOD = 55,
   105     SDL_SCANCODE_SLASH = 56,
   106 
   107     SDL_SCANCODE_CAPSLOCK = 57,
   108 
   109     SDL_SCANCODE_F1 = 58,
   110     SDL_SCANCODE_F2 = 59,
   111     SDL_SCANCODE_F3 = 60,
   112     SDL_SCANCODE_F4 = 61,
   113     SDL_SCANCODE_F5 = 62,
   114     SDL_SCANCODE_F6 = 63,
   115     SDL_SCANCODE_F7 = 64,
   116     SDL_SCANCODE_F8 = 65,
   117     SDL_SCANCODE_F9 = 66,
   118     SDL_SCANCODE_F10 = 67,
   119     SDL_SCANCODE_F11 = 68,
   120     SDL_SCANCODE_F12 = 69,
   121 
   122     SDL_SCANCODE_PRINTSCREEN = 70,
   123     SDL_SCANCODE_SCROLLLOCK = 71,
   124     SDL_SCANCODE_PAUSE = 72,
   125     SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but does send code 73, not 117) */
   126     SDL_SCANCODE_HOME = 74,
   127     SDL_SCANCODE_PAGEUP = 75,
   128     SDL_SCANCODE_DELETE = 76,
   129     SDL_SCANCODE_END = 77,
   130     SDL_SCANCODE_PAGEDOWN = 78,
   131     SDL_SCANCODE_RIGHT = 79,
   132     SDL_SCANCODE_LEFT = 80,
   133     SDL_SCANCODE_DOWN = 81,
   134     SDL_SCANCODE_UP = 82,
   135 
   136     SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards */
   137     SDL_SCANCODE_KP_DIVIDE = 84,
   138     SDL_SCANCODE_KP_MULTIPLY = 85,
   139     SDL_SCANCODE_KP_MINUS = 86,
   140     SDL_SCANCODE_KP_PLUS = 87,
   141     SDL_SCANCODE_KP_ENTER = 88,
   142     SDL_SCANCODE_KP_1 = 89,
   143     SDL_SCANCODE_KP_2 = 90,
   144     SDL_SCANCODE_KP_3 = 91,
   145     SDL_SCANCODE_KP_4 = 92,
   146     SDL_SCANCODE_KP_5 = 93,
   147     SDL_SCANCODE_KP_6 = 94,
   148     SDL_SCANCODE_KP_7 = 95,
   149     SDL_SCANCODE_KP_8 = 96,
   150     SDL_SCANCODE_KP_9 = 97,
   151     SDL_SCANCODE_KP_0 = 98,
   152     SDL_SCANCODE_KP_PERIOD = 99,
   153 
   154     SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO keyboards have over ANSI ones, located between left shift and Y. Produces GRAVE ACCENT and TILDE in a US or UK Mac layout, REVERSE SOLIDUS (backslash) and VERTICAL LINE in a US or UK Windows layout, and LESS-THAN SIGN and GREATER-THAN SIGN in a Swiss German, German, or French layout. */
   155     SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
   156     SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, not a physical key - but some Mac keyboards do have a power key. */
   157     SDL_SCANCODE_KP_EQUALS = 103,
   158     SDL_SCANCODE_F13 = 104,
   159     SDL_SCANCODE_F14 = 105,
   160     SDL_SCANCODE_F15 = 106,
   161     SDL_SCANCODE_F16 = 107,
   162     SDL_SCANCODE_F17 = 108,
   163     SDL_SCANCODE_F18 = 109,
   164     SDL_SCANCODE_F19 = 110,
   165     SDL_SCANCODE_F20 = 111,
   166     SDL_SCANCODE_F21 = 112,
   167     SDL_SCANCODE_F22 = 113,
   168     SDL_SCANCODE_F23 = 114,
   169     SDL_SCANCODE_F24 = 115,
   170     SDL_SCANCODE_EXECUTE = 116,
   171     SDL_SCANCODE_HELP = 117,
   172     SDL_SCANCODE_MENU = 118,
   173     SDL_SCANCODE_SELECT = 119,
   174     SDL_SCANCODE_STOP = 120,
   175     SDL_SCANCODE_AGAIN = 121,   /*!< redo */
   176     SDL_SCANCODE_UNDO = 122,
   177     SDL_SCANCODE_CUT = 123,
   178     SDL_SCANCODE_COPY = 124,
   179     SDL_SCANCODE_PASTE = 125,
   180     SDL_SCANCODE_FIND = 126,
   181     SDL_SCANCODE_MUTE = 127,
   182     SDL_SCANCODE_VOLUMEUP = 128,
   183     SDL_SCANCODE_VOLUMEDOWN = 129,
   184 /* not sure whether there's a reason to enable these */
   185 /*     SDL_SCANCODE_LOCKINGCAPSLOCK = 130,  */
   186 /*     SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
   187 /*     SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
   188     SDL_SCANCODE_KP_COMMA = 133,
   189     SDL_SCANCODE_KP_EQUALSAS400 = 134,
   190 
   191     SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see footnotes in USB doc */
   192     SDL_SCANCODE_INTERNATIONAL2 = 136,
   193     SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */
   194     SDL_SCANCODE_INTERNATIONAL4 = 138,
   195     SDL_SCANCODE_INTERNATIONAL5 = 139,
   196     SDL_SCANCODE_INTERNATIONAL6 = 140,
   197     SDL_SCANCODE_INTERNATIONAL7 = 141,
   198     SDL_SCANCODE_INTERNATIONAL8 = 142,
   199     SDL_SCANCODE_INTERNATIONAL9 = 143,
   200     SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
   201     SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
   202     SDL_SCANCODE_LANG3 = 146, /**< Katakana */
   203     SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
   204     SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
   205     SDL_SCANCODE_LANG6 = 149, /**< reserved */
   206     SDL_SCANCODE_LANG7 = 150, /**< reserved */
   207     SDL_SCANCODE_LANG8 = 151, /**< reserved */
   208     SDL_SCANCODE_LANG9 = 152, /**< reserved */
   209 
   210     SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
   211     SDL_SCANCODE_SYSREQ = 154,
   212     SDL_SCANCODE_CANCEL = 155,
   213     SDL_SCANCODE_CLEAR = 156,
   214     SDL_SCANCODE_PRIOR = 157,
   215     SDL_SCANCODE_RETURN2 = 158,
   216     SDL_SCANCODE_SEPARATOR = 159,
   217     SDL_SCANCODE_OUT = 160,
   218     SDL_SCANCODE_OPER = 161,
   219     SDL_SCANCODE_CLEARAGAIN = 162,
   220     SDL_SCANCODE_CRSEL = 163,
   221     SDL_SCANCODE_EXSEL = 164,
   222 
   223     SDL_SCANCODE_KP_00 = 176,
   224     SDL_SCANCODE_KP_000 = 177,
   225     SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
   226     SDL_SCANCODE_DECIMALSEPARATOR = 179,
   227     SDL_SCANCODE_CURRENCYUNIT = 180,
   228     SDL_SCANCODE_CURRENCYSUBUNIT = 181,
   229     SDL_SCANCODE_KP_LEFTPAREN = 182,
   230     SDL_SCANCODE_KP_RIGHTPAREN = 183,
   231     SDL_SCANCODE_KP_LEFTBRACE = 184,
   232     SDL_SCANCODE_KP_RIGHTBRACE = 185,
   233     SDL_SCANCODE_KP_TAB = 186,
   234     SDL_SCANCODE_KP_BACKSPACE = 187,
   235     SDL_SCANCODE_KP_A = 188,
   236     SDL_SCANCODE_KP_B = 189,
   237     SDL_SCANCODE_KP_C = 190,
   238     SDL_SCANCODE_KP_D = 191,
   239     SDL_SCANCODE_KP_E = 192,
   240     SDL_SCANCODE_KP_F = 193,
   241     SDL_SCANCODE_KP_XOR = 194,
   242     SDL_SCANCODE_KP_POWER = 195,
   243     SDL_SCANCODE_KP_PERCENT = 196,
   244     SDL_SCANCODE_KP_LESS = 197,
   245     SDL_SCANCODE_KP_GREATER = 198,
   246     SDL_SCANCODE_KP_AMPERSAND = 199,
   247     SDL_SCANCODE_KP_DBLAMPERSAND = 200,
   248     SDL_SCANCODE_KP_VERTICALBAR = 201,
   249     SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
   250     SDL_SCANCODE_KP_COLON = 203,
   251     SDL_SCANCODE_KP_HASH = 204,
   252     SDL_SCANCODE_KP_SPACE = 205,
   253     SDL_SCANCODE_KP_AT = 206,
   254     SDL_SCANCODE_KP_EXCLAM = 207,
   255     SDL_SCANCODE_KP_MEMSTORE = 208,
   256     SDL_SCANCODE_KP_MEMRECALL = 209,
   257     SDL_SCANCODE_KP_MEMCLEAR = 210,
   258     SDL_SCANCODE_KP_MEMADD = 211,
   259     SDL_SCANCODE_KP_MEMSUBTRACT = 212,
   260     SDL_SCANCODE_KP_MEMMULTIPLY = 213,
   261     SDL_SCANCODE_KP_MEMDIVIDE = 214,
   262     SDL_SCANCODE_KP_PLUSMINUS = 215,
   263     SDL_SCANCODE_KP_CLEAR = 216,
   264     SDL_SCANCODE_KP_CLEARENTRY = 217,
   265     SDL_SCANCODE_KP_BINARY = 218,
   266     SDL_SCANCODE_KP_OCTAL = 219,
   267     SDL_SCANCODE_KP_DECIMAL = 220,
   268     SDL_SCANCODE_KP_HEXADECIMAL = 221,
   269 
   270     SDL_SCANCODE_LCTRL = 224,
   271     SDL_SCANCODE_LSHIFT = 225,
   272     SDL_SCANCODE_LALT = 226, /**< alt, option */
   273     SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
   274     SDL_SCANCODE_RCTRL = 228,
   275     SDL_SCANCODE_RSHIFT = 229,
   276     SDL_SCANCODE_RALT = 230, /**< alt gr, option */
   277     SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
   278 
   279     SDL_SCANCODE_MODE = 257,    /* I'm not sure if this is really not covered by any of the above, but since there's a special KMOD_MODE for it I'm adding it here */
   280 
   281     /* These values are mapped from usage page 0x0C (USB consumer page) */
   282 
   283     SDL_SCANCODE_AUDIONEXT = 258,
   284     SDL_SCANCODE_AUDIOPREV = 259,
   285     SDL_SCANCODE_AUDIOSTOP = 260,
   286     SDL_SCANCODE_AUDIOPLAY = 261,
   287     SDL_SCANCODE_AUDIOMUTE = 262,
   288     SDL_SCANCODE_MEDIASELECT = 263,
   289     SDL_SCANCODE_WWW = 264,
   290     SDL_SCANCODE_MAIL = 265,
   291     SDL_SCANCODE_CALCULATOR = 266,
   292     SDL_SCANCODE_COMPUTER = 267,
   293     SDL_SCANCODE_AC_SEARCH = 268,
   294     SDL_SCANCODE_AC_HOME = 269,
   295     SDL_SCANCODE_AC_BACK = 270,
   296     SDL_SCANCODE_AC_FORWARD = 271,
   297     SDL_SCANCODE_AC_STOP = 272,
   298     SDL_SCANCODE_AC_REFRESH = 273,
   299     SDL_SCANCODE_AC_BOOKMARKS = 274,
   300 
   301     /* These are values that Christian Walther added (for mac keyboard?) */
   302 
   303     SDL_SCANCODE_BRIGHTNESSDOWN = 275,
   304     SDL_SCANCODE_BRIGHTNESSUP = 276,
   305     SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display switch, video mode switch */
   306     SDL_SCANCODE_KBDILLUMTOGGLE = 278,
   307     SDL_SCANCODE_KBDILLUMDOWN = 279,
   308     SDL_SCANCODE_KBDILLUMUP = 280,
   309     SDL_SCANCODE_EJECT = 281,
   310     SDL_SCANCODE_SLEEP = 282,
   311 
   312     /* Add any other keys here */
   313 
   314     SDL_NUM_SCANCODES = 512 /**< (not a key, just marks the number of scancodes for array bounds) */
   315 } SDL_scancode;
   316 
   317 #endif /* _SDL_scancode_h */
   318 
   319 /* vi: set ts=4 sw=4 expandtab: */