Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/sdl/include/SDL3/SDL_scancode.h
9912 views
1
/*
2
Simple DirectMedia Layer
3
Copyright (C) 1997-2025 Sam Lantinga <[email protected]>
4
5
This software is provided 'as-is', without any express or implied
6
warranty. In no event will the authors be held liable for any damages
7
arising from the use of this software.
8
9
Permission is granted to anyone to use this software for any purpose,
10
including commercial applications, and to alter it and redistribute it
11
freely, subject to the following restrictions:
12
13
1. The origin of this software must not be misrepresented; you must not
14
claim that you wrote the original software. If you use this software
15
in a product, an acknowledgment in the product documentation would be
16
appreciated but is not required.
17
2. Altered source versions must be plainly marked as such, and must not be
18
misrepresented as being the original software.
19
3. This notice may not be removed or altered from any source distribution.
20
*/
21
22
/**
23
* # CategoryScancode
24
*
25
* Defines keyboard scancodes.
26
*
27
* Please refer to the Best Keyboard Practices document for details on what
28
* this information means and how best to use it.
29
*
30
* https://wiki.libsdl.org/SDL3/BestKeyboardPractices
31
*/
32
33
#ifndef SDL_scancode_h_
34
#define SDL_scancode_h_
35
36
#include <SDL3/SDL_stdinc.h>
37
38
/**
39
* The SDL keyboard scancode representation.
40
*
41
* An SDL scancode is the physical representation of a key on the keyboard,
42
* independent of language and keyboard mapping.
43
*
44
* Values of this type are used to represent keyboard keys, among other places
45
* in the `scancode` field of the SDL_KeyboardEvent structure.
46
*
47
* The values in this enumeration are based on the USB usage page standard:
48
* https://usb.org/sites/default/files/hut1_5.pdf
49
*
50
* \since This enum is available since SDL 3.2.0.
51
*/
52
typedef enum SDL_Scancode
53
{
54
SDL_SCANCODE_UNKNOWN = 0,
55
56
/**
57
* \name Usage page 0x07
58
*
59
* These values are from usage page 0x07 (USB keyboard page).
60
*/
61
/* @{ */
62
63
SDL_SCANCODE_A = 4,
64
SDL_SCANCODE_B = 5,
65
SDL_SCANCODE_C = 6,
66
SDL_SCANCODE_D = 7,
67
SDL_SCANCODE_E = 8,
68
SDL_SCANCODE_F = 9,
69
SDL_SCANCODE_G = 10,
70
SDL_SCANCODE_H = 11,
71
SDL_SCANCODE_I = 12,
72
SDL_SCANCODE_J = 13,
73
SDL_SCANCODE_K = 14,
74
SDL_SCANCODE_L = 15,
75
SDL_SCANCODE_M = 16,
76
SDL_SCANCODE_N = 17,
77
SDL_SCANCODE_O = 18,
78
SDL_SCANCODE_P = 19,
79
SDL_SCANCODE_Q = 20,
80
SDL_SCANCODE_R = 21,
81
SDL_SCANCODE_S = 22,
82
SDL_SCANCODE_T = 23,
83
SDL_SCANCODE_U = 24,
84
SDL_SCANCODE_V = 25,
85
SDL_SCANCODE_W = 26,
86
SDL_SCANCODE_X = 27,
87
SDL_SCANCODE_Y = 28,
88
SDL_SCANCODE_Z = 29,
89
90
SDL_SCANCODE_1 = 30,
91
SDL_SCANCODE_2 = 31,
92
SDL_SCANCODE_3 = 32,
93
SDL_SCANCODE_4 = 33,
94
SDL_SCANCODE_5 = 34,
95
SDL_SCANCODE_6 = 35,
96
SDL_SCANCODE_7 = 36,
97
SDL_SCANCODE_8 = 37,
98
SDL_SCANCODE_9 = 38,
99
SDL_SCANCODE_0 = 39,
100
101
SDL_SCANCODE_RETURN = 40,
102
SDL_SCANCODE_ESCAPE = 41,
103
SDL_SCANCODE_BACKSPACE = 42,
104
SDL_SCANCODE_TAB = 43,
105
SDL_SCANCODE_SPACE = 44,
106
107
SDL_SCANCODE_MINUS = 45,
108
SDL_SCANCODE_EQUALS = 46,
109
SDL_SCANCODE_LEFTBRACKET = 47,
110
SDL_SCANCODE_RIGHTBRACKET = 48,
111
SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
112
* key on ISO keyboards and at the right end
113
* of the QWERTY row on ANSI keyboards.
114
* Produces REVERSE SOLIDUS (backslash) and
115
* VERTICAL LINE in a US layout, REVERSE
116
* SOLIDUS and VERTICAL LINE in a UK Mac
117
* layout, NUMBER SIGN and TILDE in a UK
118
* Windows layout, DOLLAR SIGN and POUND SIGN
119
* in a Swiss German layout, NUMBER SIGN and
120
* APOSTROPHE in a German layout, GRAVE
121
* ACCENT and POUND SIGN in a French Mac
122
* layout, and ASTERISK and MICRO SIGN in a
123
* French Windows layout.
124
*/
125
SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
126
* instead of 49 for the same key, but all
127
* OSes I've seen treat the two codes
128
* identically. So, as an implementor, unless
129
* your keyboard generates both of those
130
* codes and your OS treats them differently,
131
* you should generate SDL_SCANCODE_BACKSLASH
132
* instead of this code. As a user, you
133
* should not rely on this code because SDL
134
* will never generate it with most (all?)
135
* keyboards.
136
*/
137
SDL_SCANCODE_SEMICOLON = 51,
138
SDL_SCANCODE_APOSTROPHE = 52,
139
SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
140
* and ISO keyboards). Produces GRAVE ACCENT and
141
* TILDE in a US Windows layout and in US and UK
142
* Mac layouts on ANSI keyboards, GRAVE ACCENT
143
* and NOT SIGN in a UK Windows layout, SECTION
144
* SIGN and PLUS-MINUS SIGN in US and UK Mac
145
* layouts on ISO keyboards, SECTION SIGN and
146
* DEGREE SIGN in a Swiss German layout (Mac:
147
* only on ISO keyboards), CIRCUMFLEX ACCENT and
148
* DEGREE SIGN in a German layout (Mac: only on
149
* ISO keyboards), SUPERSCRIPT TWO and TILDE in a
150
* French Windows layout, COMMERCIAL AT and
151
* NUMBER SIGN in a French Mac layout on ISO
152
* keyboards, and LESS-THAN SIGN and GREATER-THAN
153
* SIGN in a Swiss German, German, or French Mac
154
* layout on ANSI keyboards.
155
*/
156
SDL_SCANCODE_COMMA = 54,
157
SDL_SCANCODE_PERIOD = 55,
158
SDL_SCANCODE_SLASH = 56,
159
160
SDL_SCANCODE_CAPSLOCK = 57,
161
162
SDL_SCANCODE_F1 = 58,
163
SDL_SCANCODE_F2 = 59,
164
SDL_SCANCODE_F3 = 60,
165
SDL_SCANCODE_F4 = 61,
166
SDL_SCANCODE_F5 = 62,
167
SDL_SCANCODE_F6 = 63,
168
SDL_SCANCODE_F7 = 64,
169
SDL_SCANCODE_F8 = 65,
170
SDL_SCANCODE_F9 = 66,
171
SDL_SCANCODE_F10 = 67,
172
SDL_SCANCODE_F11 = 68,
173
SDL_SCANCODE_F12 = 69,
174
175
SDL_SCANCODE_PRINTSCREEN = 70,
176
SDL_SCANCODE_SCROLLLOCK = 71,
177
SDL_SCANCODE_PAUSE = 72,
178
SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
179
does send code 73, not 117) */
180
SDL_SCANCODE_HOME = 74,
181
SDL_SCANCODE_PAGEUP = 75,
182
SDL_SCANCODE_DELETE = 76,
183
SDL_SCANCODE_END = 77,
184
SDL_SCANCODE_PAGEDOWN = 78,
185
SDL_SCANCODE_RIGHT = 79,
186
SDL_SCANCODE_LEFT = 80,
187
SDL_SCANCODE_DOWN = 81,
188
SDL_SCANCODE_UP = 82,
189
190
SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
191
*/
192
SDL_SCANCODE_KP_DIVIDE = 84,
193
SDL_SCANCODE_KP_MULTIPLY = 85,
194
SDL_SCANCODE_KP_MINUS = 86,
195
SDL_SCANCODE_KP_PLUS = 87,
196
SDL_SCANCODE_KP_ENTER = 88,
197
SDL_SCANCODE_KP_1 = 89,
198
SDL_SCANCODE_KP_2 = 90,
199
SDL_SCANCODE_KP_3 = 91,
200
SDL_SCANCODE_KP_4 = 92,
201
SDL_SCANCODE_KP_5 = 93,
202
SDL_SCANCODE_KP_6 = 94,
203
SDL_SCANCODE_KP_7 = 95,
204
SDL_SCANCODE_KP_8 = 96,
205
SDL_SCANCODE_KP_9 = 97,
206
SDL_SCANCODE_KP_0 = 98,
207
SDL_SCANCODE_KP_PERIOD = 99,
208
209
SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
210
* keyboards have over ANSI ones,
211
* located between left shift and Y.
212
* Produces GRAVE ACCENT and TILDE in a
213
* US or UK Mac layout, REVERSE SOLIDUS
214
* (backslash) and VERTICAL LINE in a
215
* US or UK Windows layout, and
216
* LESS-THAN SIGN and GREATER-THAN SIGN
217
* in a Swiss German, German, or French
218
* layout. */
219
SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
220
SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
221
* not a physical key - but some Mac keyboards
222
* do have a power key. */
223
SDL_SCANCODE_KP_EQUALS = 103,
224
SDL_SCANCODE_F13 = 104,
225
SDL_SCANCODE_F14 = 105,
226
SDL_SCANCODE_F15 = 106,
227
SDL_SCANCODE_F16 = 107,
228
SDL_SCANCODE_F17 = 108,
229
SDL_SCANCODE_F18 = 109,
230
SDL_SCANCODE_F19 = 110,
231
SDL_SCANCODE_F20 = 111,
232
SDL_SCANCODE_F21 = 112,
233
SDL_SCANCODE_F22 = 113,
234
SDL_SCANCODE_F23 = 114,
235
SDL_SCANCODE_F24 = 115,
236
SDL_SCANCODE_EXECUTE = 116,
237
SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */
238
SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */
239
SDL_SCANCODE_SELECT = 119,
240
SDL_SCANCODE_STOP = 120, /**< AC Stop */
241
SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */
242
SDL_SCANCODE_UNDO = 122, /**< AC Undo */
243
SDL_SCANCODE_CUT = 123, /**< AC Cut */
244
SDL_SCANCODE_COPY = 124, /**< AC Copy */
245
SDL_SCANCODE_PASTE = 125, /**< AC Paste */
246
SDL_SCANCODE_FIND = 126, /**< AC Find */
247
SDL_SCANCODE_MUTE = 127,
248
SDL_SCANCODE_VOLUMEUP = 128,
249
SDL_SCANCODE_VOLUMEDOWN = 129,
250
/* not sure whether there's a reason to enable these */
251
/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
252
/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
253
/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
254
SDL_SCANCODE_KP_COMMA = 133,
255
SDL_SCANCODE_KP_EQUALSAS400 = 134,
256
257
SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
258
footnotes in USB doc */
259
SDL_SCANCODE_INTERNATIONAL2 = 136,
260
SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */
261
SDL_SCANCODE_INTERNATIONAL4 = 138,
262
SDL_SCANCODE_INTERNATIONAL5 = 139,
263
SDL_SCANCODE_INTERNATIONAL6 = 140,
264
SDL_SCANCODE_INTERNATIONAL7 = 141,
265
SDL_SCANCODE_INTERNATIONAL8 = 142,
266
SDL_SCANCODE_INTERNATIONAL9 = 143,
267
SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
268
SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
269
SDL_SCANCODE_LANG3 = 146, /**< Katakana */
270
SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
271
SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
272
SDL_SCANCODE_LANG6 = 149, /**< reserved */
273
SDL_SCANCODE_LANG7 = 150, /**< reserved */
274
SDL_SCANCODE_LANG8 = 151, /**< reserved */
275
SDL_SCANCODE_LANG9 = 152, /**< reserved */
276
277
SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
278
SDL_SCANCODE_SYSREQ = 154,
279
SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */
280
SDL_SCANCODE_CLEAR = 156,
281
SDL_SCANCODE_PRIOR = 157,
282
SDL_SCANCODE_RETURN2 = 158,
283
SDL_SCANCODE_SEPARATOR = 159,
284
SDL_SCANCODE_OUT = 160,
285
SDL_SCANCODE_OPER = 161,
286
SDL_SCANCODE_CLEARAGAIN = 162,
287
SDL_SCANCODE_CRSEL = 163,
288
SDL_SCANCODE_EXSEL = 164,
289
290
SDL_SCANCODE_KP_00 = 176,
291
SDL_SCANCODE_KP_000 = 177,
292
SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
293
SDL_SCANCODE_DECIMALSEPARATOR = 179,
294
SDL_SCANCODE_CURRENCYUNIT = 180,
295
SDL_SCANCODE_CURRENCYSUBUNIT = 181,
296
SDL_SCANCODE_KP_LEFTPAREN = 182,
297
SDL_SCANCODE_KP_RIGHTPAREN = 183,
298
SDL_SCANCODE_KP_LEFTBRACE = 184,
299
SDL_SCANCODE_KP_RIGHTBRACE = 185,
300
SDL_SCANCODE_KP_TAB = 186,
301
SDL_SCANCODE_KP_BACKSPACE = 187,
302
SDL_SCANCODE_KP_A = 188,
303
SDL_SCANCODE_KP_B = 189,
304
SDL_SCANCODE_KP_C = 190,
305
SDL_SCANCODE_KP_D = 191,
306
SDL_SCANCODE_KP_E = 192,
307
SDL_SCANCODE_KP_F = 193,
308
SDL_SCANCODE_KP_XOR = 194,
309
SDL_SCANCODE_KP_POWER = 195,
310
SDL_SCANCODE_KP_PERCENT = 196,
311
SDL_SCANCODE_KP_LESS = 197,
312
SDL_SCANCODE_KP_GREATER = 198,
313
SDL_SCANCODE_KP_AMPERSAND = 199,
314
SDL_SCANCODE_KP_DBLAMPERSAND = 200,
315
SDL_SCANCODE_KP_VERTICALBAR = 201,
316
SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
317
SDL_SCANCODE_KP_COLON = 203,
318
SDL_SCANCODE_KP_HASH = 204,
319
SDL_SCANCODE_KP_SPACE = 205,
320
SDL_SCANCODE_KP_AT = 206,
321
SDL_SCANCODE_KP_EXCLAM = 207,
322
SDL_SCANCODE_KP_MEMSTORE = 208,
323
SDL_SCANCODE_KP_MEMRECALL = 209,
324
SDL_SCANCODE_KP_MEMCLEAR = 210,
325
SDL_SCANCODE_KP_MEMADD = 211,
326
SDL_SCANCODE_KP_MEMSUBTRACT = 212,
327
SDL_SCANCODE_KP_MEMMULTIPLY = 213,
328
SDL_SCANCODE_KP_MEMDIVIDE = 214,
329
SDL_SCANCODE_KP_PLUSMINUS = 215,
330
SDL_SCANCODE_KP_CLEAR = 216,
331
SDL_SCANCODE_KP_CLEARENTRY = 217,
332
SDL_SCANCODE_KP_BINARY = 218,
333
SDL_SCANCODE_KP_OCTAL = 219,
334
SDL_SCANCODE_KP_DECIMAL = 220,
335
SDL_SCANCODE_KP_HEXADECIMAL = 221,
336
337
SDL_SCANCODE_LCTRL = 224,
338
SDL_SCANCODE_LSHIFT = 225,
339
SDL_SCANCODE_LALT = 226, /**< alt, option */
340
SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
341
SDL_SCANCODE_RCTRL = 228,
342
SDL_SCANCODE_RSHIFT = 229,
343
SDL_SCANCODE_RALT = 230, /**< alt gr, option */
344
SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
345
346
SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
347
* by any of the above, but since there's a
348
* special SDL_KMOD_MODE for it I'm adding it here
349
*/
350
351
/* @} *//* Usage page 0x07 */
352
353
/**
354
* \name Usage page 0x0C
355
*
356
* These values are mapped from usage page 0x0C (USB consumer page).
357
*
358
* There are way more keys in the spec than we can represent in the
359
* current scancode range, so pick the ones that commonly come up in
360
* real world usage.
361
*/
362
/* @{ */
363
364
SDL_SCANCODE_SLEEP = 258, /**< Sleep */
365
SDL_SCANCODE_WAKE = 259, /**< Wake */
366
367
SDL_SCANCODE_CHANNEL_INCREMENT = 260, /**< Channel Increment */
368
SDL_SCANCODE_CHANNEL_DECREMENT = 261, /**< Channel Decrement */
369
370
SDL_SCANCODE_MEDIA_PLAY = 262, /**< Play */
371
SDL_SCANCODE_MEDIA_PAUSE = 263, /**< Pause */
372
SDL_SCANCODE_MEDIA_RECORD = 264, /**< Record */
373
SDL_SCANCODE_MEDIA_FAST_FORWARD = 265, /**< Fast Forward */
374
SDL_SCANCODE_MEDIA_REWIND = 266, /**< Rewind */
375
SDL_SCANCODE_MEDIA_NEXT_TRACK = 267, /**< Next Track */
376
SDL_SCANCODE_MEDIA_PREVIOUS_TRACK = 268, /**< Previous Track */
377
SDL_SCANCODE_MEDIA_STOP = 269, /**< Stop */
378
SDL_SCANCODE_MEDIA_EJECT = 270, /**< Eject */
379
SDL_SCANCODE_MEDIA_PLAY_PAUSE = 271, /**< Play / Pause */
380
SDL_SCANCODE_MEDIA_SELECT = 272, /* Media Select */
381
382
SDL_SCANCODE_AC_NEW = 273, /**< AC New */
383
SDL_SCANCODE_AC_OPEN = 274, /**< AC Open */
384
SDL_SCANCODE_AC_CLOSE = 275, /**< AC Close */
385
SDL_SCANCODE_AC_EXIT = 276, /**< AC Exit */
386
SDL_SCANCODE_AC_SAVE = 277, /**< AC Save */
387
SDL_SCANCODE_AC_PRINT = 278, /**< AC Print */
388
SDL_SCANCODE_AC_PROPERTIES = 279, /**< AC Properties */
389
390
SDL_SCANCODE_AC_SEARCH = 280, /**< AC Search */
391
SDL_SCANCODE_AC_HOME = 281, /**< AC Home */
392
SDL_SCANCODE_AC_BACK = 282, /**< AC Back */
393
SDL_SCANCODE_AC_FORWARD = 283, /**< AC Forward */
394
SDL_SCANCODE_AC_STOP = 284, /**< AC Stop */
395
SDL_SCANCODE_AC_REFRESH = 285, /**< AC Refresh */
396
SDL_SCANCODE_AC_BOOKMARKS = 286, /**< AC Bookmarks */
397
398
/* @} *//* Usage page 0x0C */
399
400
401
/**
402
* \name Mobile keys
403
*
404
* These are values that are often used on mobile phones.
405
*/
406
/* @{ */
407
408
SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and
409
used as a multi-function feature key for selecting
410
a software defined function shown on the bottom left
411
of the display. */
412
SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and
413
used as a multi-function feature key for selecting
414
a software defined function shown on the bottom right
415
of the display. */
416
SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */
417
SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */
418
419
/* @} *//* Mobile keys */
420
421
/* Add any other keys here. */
422
423
SDL_SCANCODE_RESERVED = 400, /**< 400-500 reserved for dynamic keycodes */
424
425
SDL_SCANCODE_COUNT = 512 /**< not a key, just marks the number of scancodes for array bounds */
426
427
} SDL_Scancode;
428
429
#endif /* SDL_scancode_h_ */
430
431