comparison include/SDL_scancode.h @ 2303:d87417504c75

First pass implementation of new SDL scancode concept, as discussed with Christian Walther. Currently only implemented on Mac OS X for sanity checking purposes.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 05 Feb 2008 07:19:23 +0000
parents
children fbe8ff44c519
comparison
equal deleted inserted replaced
2302:7ae1c419b626 2303:d87417504c75
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_HYPHENMINUS = 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_MAIL = 264,
290 SDL_SCANCODE_CALCULATOR = 265,
291 SDL_SCANCODE_COMPUTER = 266,
292 SDL_SCANCODE_AC_SEARCH = 267,
293 SDL_SCANCODE_AC_HOME = 268,
294 SDL_SCANCODE_AC_BACK = 269,
295 SDL_SCANCODE_AC_FORWARD = 270,
296 SDL_SCANCODE_AC_STOP = 271,
297 SDL_SCANCODE_AC_REFRESH = 272,
298 SDL_SCANCODE_AC_BOOKMARKS = 273,
299
300 /* These are values that Christian Walther added (for mac keyboard?) */
301
302 SDL_SCANCODE_BRIGHTNESSDOWN = 274,
303 SDL_SCANCODE_BRIGHTNESSUP = 275,
304 SDL_SCANCODE_DISPLAYSWITCH = 276, /**< display mirroring/dual display switch, video mode switch */
305 SDL_SCANCODE_KBDILLUMTOGGLE = 277,
306 SDL_SCANCODE_KBDILLUMDOWN = 278,
307 SDL_SCANCODE_KBDILLUMUP = 279,
308 SDL_SCANCODE_EJECT = 280,
309 SDL_SCANCODE_SLEEP = 281,
310
311 /* Add any other keys here */
312
313 SDL_NUM_SCANCODES = 512 /**< (not a key, just marks the number of scancodes for array bounds) */
314 } SDL_scancode;
315
316 #endif /* _SDL_scancode_h */
317
318 /* vi: set ts=4 sw=4 expandtab: */