SDL 3.0
SDL_scancode.h
Go to the documentation of this file.
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
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 * \file SDL_scancode.h
24 *
25 * Defines keyboard scancodes.
26 */
27
28#ifndef SDL_scancode_h_
29#define SDL_scancode_h_
30
31#include <SDL3/SDL_stdinc.h>
32
33/**
34 * The SDL keyboard scancode representation.
35 *
36 * An SDL scancode is the physical representation of a key on the keyboard,
37 * independent of language and keyboard mapping.
38 *
39 * Values of this type are used to represent keyboard keys, among other places
40 * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the
41 * SDL_Event structure.
42 *
43 * The values in this enumeration are based on the USB usage page standard:
44 * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
45 */
46typedef enum
47{
49
50 /**
51 * \name Usage page 0x07
52 *
53 * These values are from usage page 0x07 (USB keyboard page).
54 */
55 /* @{ */
56
83
94
100
105 SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
106 * key on ISO keyboards and at the right end
107 * of the QWERTY row on ANSI keyboards.
108 * Produces REVERSE SOLIDUS (backslash) and
109 * VERTICAL LINE in a US layout, REVERSE
110 * SOLIDUS and VERTICAL LINE in a UK Mac
111 * layout, NUMBER SIGN and TILDE in a UK
112 * Windows layout, DOLLAR SIGN and POUND SIGN
113 * in a Swiss German layout, NUMBER SIGN and
114 * APOSTROPHE in a German layout, GRAVE
115 * ACCENT and POUND SIGN in a French Mac
116 * layout, and ASTERISK and MICRO SIGN in a
117 * French Windows layout.
118 */
119 SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
120 * instead of 49 for the same key, but all
121 * OSes I've seen treat the two codes
122 * identically. So, as an implementor, unless
123 * your keyboard generates both of those
124 * codes and your OS treats them differently,
125 * you should generate SDL_SCANCODE_BACKSLASH
126 * instead of this code. As a user, you
127 * should not rely on this code because SDL
128 * will never generate it with most (all?)
129 * keyboards.
130 */
133 SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
134 * and ISO keyboards). Produces GRAVE ACCENT and
135 * TILDE in a US Windows layout and in US and UK
136 * Mac layouts on ANSI keyboards, GRAVE ACCENT
137 * and NOT SIGN in a UK Windows layout, SECTION
138 * SIGN and PLUS-MINUS SIGN in US and UK Mac
139 * layouts on ISO keyboards, SECTION SIGN and
140 * DEGREE SIGN in a Swiss German layout (Mac:
141 * only on ISO keyboards), CIRCUMFLEX ACCENT and
142 * DEGREE SIGN in a German layout (Mac: only on
143 * ISO keyboards), SUPERSCRIPT TWO and TILDE in a
144 * French Windows layout, COMMERCIAL AT and
145 * NUMBER SIGN in a French Mac layout on ISO
146 * keyboards, and LESS-THAN SIGN and GREATER-THAN
147 * SIGN in a Swiss German, German, or French Mac
148 * layout on ANSI keyboards.
149 */
153
155
168
172 SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
173 does send code 73, not 117) */
183
184 SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
185 */
202
203 SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
204 * keyboards have over ANSI ones,
205 * located between left shift and Y.
206 * Produces GRAVE ACCENT and TILDE in a
207 * US or UK Mac layout, REVERSE SOLIDUS
208 * (backslash) and VERTICAL LINE in a
209 * US or UK Windows layout, and
210 * LESS-THAN SIGN and GREATER-THAN SIGN
211 * in a Swiss German, German, or French
212 * layout. */
213 SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
214 SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
215 * not a physical key - but some Mac keyboards
216 * do have a power key. */
231 SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */
232 SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */
234 SDL_SCANCODE_STOP = 120, /**< AC Stop */
235 SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */
236 SDL_SCANCODE_UNDO = 122, /**< AC Undo */
237 SDL_SCANCODE_CUT = 123, /**< AC Cut */
238 SDL_SCANCODE_COPY = 124, /**< AC Copy */
239 SDL_SCANCODE_PASTE = 125, /**< AC Paste */
240 SDL_SCANCODE_FIND = 126, /**< AC Find */
244/* not sure whether there's a reason to enable these */
245/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
246/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
247/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
250
251 SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
252 footnotes in USB doc */
261 SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
262 SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
263 SDL_SCANCODE_LANG3 = 146, /**< Katakana */
264 SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
265 SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
266 SDL_SCANCODE_LANG6 = 149, /**< reserved */
267 SDL_SCANCODE_LANG7 = 150, /**< reserved */
268 SDL_SCANCODE_LANG8 = 151, /**< reserved */
269 SDL_SCANCODE_LANG9 = 152, /**< reserved */
270
271 SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
273 SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */
283
330
333 SDL_SCANCODE_LALT = 226, /**< alt, option */
334 SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
337 SDL_SCANCODE_RALT = 230, /**< alt gr, option */
338 SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
339
340 SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
341 * by any of the above, but since there's a
342 * special SDL_KMOD_MODE for it I'm adding it here
343 */
344
345 /* @} *//* Usage page 0x07 */
346
347 /**
348 * \name Usage page 0x0C
349 *
350 * These values are mapped from usage page 0x0C (USB consumer page).
351 * See https://usb.org/sites/default/files/hut1_2.pdf
352 *
353 * There are way more keys in the spec than we can represent in the
354 * current scancode range, so pick the ones that commonly come up in
355 * real world usage.
356 */
357 /* @{ */
358
365 SDL_SCANCODE_WWW = 264, /**< AL Internet Browser */
367 SDL_SCANCODE_CALCULATOR = 266, /**< AL Calculator */
369 SDL_SCANCODE_AC_SEARCH = 268, /**< AC Search */
370 SDL_SCANCODE_AC_HOME = 269, /**< AC Home */
371 SDL_SCANCODE_AC_BACK = 270, /**< AC Back */
372 SDL_SCANCODE_AC_FORWARD = 271, /**< AC Forward */
373 SDL_SCANCODE_AC_STOP = 272, /**< AC Stop */
374 SDL_SCANCODE_AC_REFRESH = 273, /**< AC Refresh */
375 SDL_SCANCODE_AC_BOOKMARKS = 274, /**< AC Bookmarks */
376
377 /* @} *//* Usage page 0x0C */
378
379 /**
380 * \name Walther keys
381 *
382 * These are values that Christian Walther added (for mac keyboard?).
383 */
384 /* @{ */
385
388 SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display
389 switch, video mode switch */
394 SDL_SCANCODE_SLEEP = 282, /**< SC System Sleep */
395
398
399 /* @} *//* Walther keys */
400
401 /**
402 * \name Usage page 0x0C (additional media keys)
403 *
404 * These values are mapped from usage page 0x0C (USB consumer page).
405 */
406 /* @{ */
407
410
411 /* @} *//* Usage page 0x0C (additional media keys) */
412
413 /**
414 * \name Mobile keys
415 *
416 * These are values that are often used on mobile phones.
417 */
418 /* @{ */
419
420 SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and
421 used as a multi-function feature key for selecting
422 a software defined function shown on the bottom left
423 of the display. */
424 SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and
425 used as a multi-function feature key for selecting
426 a software defined function shown on the bottom right
427 of the display. */
428 SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */
429 SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */
430
431 /* @} *//* Mobile keys */
432
433 /* Add any other keys here. */
434
435 SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes
436 for array bounds */
438
439#endif /* SDL_scancode_h_ */
SDL_Scancode
@ SDL_SCANCODE_E
@ SDL_SCANCODE_END
@ SDL_SCANCODE_OUT
@ SDL_SCANCODE_BACKSLASH
@ SDL_SCANCODE_ESCAPE
@ SDL_SCANCODE_KP_OCTAL
@ SDL_SCANCODE_KP_CLEARENTRY
@ SDL_SCANCODE_BRIGHTNESSUP
@ SDL_SCANCODE_KP_EXCLAM
@ SDL_SCANCODE_KP_DECIMAL
@ SDL_SCANCODE_F15
@ SDL_SCANCODE_M
@ SDL_SCANCODE_F12
@ SDL_SCANCODE_X
@ SDL_SCANCODE_W
@ SDL_SCANCODE_KP_E
@ SDL_SCANCODE_INTERNATIONAL4
@ SDL_SCANCODE_KP_PLUS
@ SDL_SCANCODE_F4
@ SDL_SCANCODE_LANG8
@ SDL_SCANCODE_RIGHTBRACKET
@ SDL_SCANCODE_INTERNATIONAL1
@ SDL_SCANCODE_INTERNATIONAL7
@ SDL_SCANCODE_KP_GREATER
@ SDL_SCANCODE_LANG2
@ SDL_SCANCODE_CAPSLOCK
@ SDL_SCANCODE_B
@ SDL_SCANCODE_F2
@ SDL_SCANCODE_KP_MINUS
@ SDL_SCANCODE_KP_00
@ SDL_SCANCODE_F6
@ SDL_SCANCODE_NONUSBACKSLASH
@ SDL_SCANCODE_KP_0
@ SDL_SCANCODE_KP_B
@ SDL_SCANCODE_F11
@ SDL_SCANCODE_CANCEL
@ SDL_SCANCODE_COMMA
@ SDL_SCANCODE_KP_PERIOD
@ SDL_SCANCODE_KP_F
@ SDL_SCANCODE_KP_LEFTPAREN
@ SDL_SCANCODE_F24
@ SDL_SCANCODE_AUDIOMUTE
@ SDL_SCANCODE_CALCULATOR
@ SDL_SCANCODE_CUT
@ SDL_SCANCODE_Y
@ SDL_SCANCODE_KP_VERTICALBAR
@ SDL_SCANCODE_APOSTROPHE
@ SDL_SCANCODE_KP_HEXADECIMAL
@ SDL_SCANCODE_KP_COMMA
@ SDL_SCANCODE_KP_SPACE
@ SDL_SCANCODE_2
@ SDL_SCANCODE_KP_BACKSPACE
@ SDL_SCANCODE_O
@ SDL_SCANCODE_CLEARAGAIN
@ SDL_SCANCODE_RGUI
@ SDL_SCANCODE_K
@ SDL_SCANCODE_F
@ SDL_SCANCODE_DELETE
@ SDL_SCANCODE_F10
@ SDL_SCANCODE_F3
@ SDL_SCANCODE_KP_AMPERSAND
@ SDL_SCANCODE_KP_COLON
@ SDL_SCANCODE_5
@ SDL_SCANCODE_KP_RIGHTPAREN
@ SDL_SCANCODE_H
@ SDL_SCANCODE_KP_D
@ SDL_SCANCODE_SLASH
@ SDL_SCANCODE_F1
@ SDL_SCANCODE_KP_EQUALS
@ SDL_SCANCODE_F21
@ SDL_SCANCODE_KP_6
@ SDL_SCANCODE_KP_HASH
@ SDL_SCANCODE_7
@ SDL_SCANCODE_9
@ SDL_SCANCODE_KP_TAB
@ SDL_SCANCODE_KP_7
@ SDL_SCANCODE_AC_REFRESH
@ SDL_SCANCODE_INTERNATIONAL9
@ SDL_SCANCODE_KP_9
@ SDL_SCANCODE_EXSEL
@ SDL_SCANCODE_VOLUMEUP
@ SDL_SCANCODE_APP2
@ SDL_SCANCODE_INTERNATIONAL8
@ SDL_SCANCODE_CRSEL
@ SDL_SCANCODE_ENDCALL
@ SDL_SCANCODE_NUMLOCKCLEAR
@ SDL_SCANCODE_PRINTSCREEN
@ SDL_SCANCODE_KP_XOR
@ SDL_SCANCODE_POWER
@ SDL_SCANCODE_MAIL
@ SDL_SCANCODE_KP_3
@ SDL_SCANCODE_SCROLLLOCK
@ SDL_SCANCODE_EJECT
@ SDL_SCANCODE_AUDIOPREV
@ SDL_SCANCODE_PAUSE
@ SDL_SCANCODE_RETURN
@ SDL_SCANCODE_KBDILLUMTOGGLE
@ SDL_SCANCODE_KP_000
@ SDL_SCANCODE_HELP
@ SDL_SCANCODE_PAGEDOWN
@ SDL_SCANCODE_INTERNATIONAL3
@ SDL_SCANCODE_LSHIFT
@ SDL_SCANCODE_AUDIOSTOP
@ SDL_SCANCODE_TAB
@ SDL_SCANCODE_STOP
@ SDL_SCANCODE_CURRENCYSUBUNIT
@ SDL_SCANCODE_LANG1
@ SDL_SCANCODE_3
@ SDL_SCANCODE_LCTRL
@ SDL_SCANCODE_SEMICOLON
@ SDL_SCANCODE_F16
@ SDL_SCANCODE_F22
@ SDL_SCANCODE_UNKNOWN
@ SDL_SCANCODE_DISPLAYSWITCH
@ SDL_SCANCODE_KP_MEMCLEAR
@ SDL_SCANCODE_LGUI
@ SDL_SCANCODE_0
@ SDL_SCANCODE_KP_LESS
@ SDL_SCANCODE_AC_STOP
@ SDL_SCANCODE_OPER
@ SDL_SCANCODE_LEFTBRACKET
@ SDL_SCANCODE_KP_MEMSUBTRACT
@ SDL_SCANCODE_KP_A
@ SDL_SCANCODE_AC_SEARCH
@ SDL_SCANCODE_INTERNATIONAL2
@ SDL_SCANCODE_DECIMALSEPARATOR
@ SDL_SCANCODE_F19
@ SDL_SCANCODE_V
@ SDL_SCANCODE_EXECUTE
@ SDL_SCANCODE_GRAVE
@ SDL_SCANCODE_KP_LEFTBRACE
@ SDL_SCANCODE_MENU
@ SDL_SCANCODE_RALT
@ SDL_SCANCODE_MUTE
@ SDL_SCANCODE_SYSREQ
@ SDL_SCANCODE_8
@ SDL_SCANCODE_I
@ SDL_SCANCODE_LANG4
@ SDL_SCANCODE_KP_PERCENT
@ SDL_SCANCODE_F17
@ SDL_SCANCODE_RETURN2
@ SDL_SCANCODE_LANG3
@ SDL_SCANCODE_KP_MEMADD
@ SDL_SCANCODE_KP_PLUSMINUS
@ SDL_SCANCODE_INTERNATIONAL5
@ SDL_SCANCODE_THOUSANDSSEPARATOR
@ SDL_SCANCODE_6
@ SDL_SCANCODE_S
@ SDL_SCANCODE_KP_ENTER
@ SDL_SCANCODE_AC_BACK
@ SDL_SCANCODE_FIND
@ SDL_SCANCODE_KP_MEMSTORE
@ SDL_SCANCODE_PAGEUP
@ SDL_SCANCODE_Z
@ SDL_SCANCODE_COMPUTER
@ SDL_SCANCODE_AUDIOPLAY
@ SDL_SCANCODE_P
@ SDL_SCANCODE_D
@ SDL_SCANCODE_F23
@ SDL_SCANCODE_PERIOD
@ SDL_SCANCODE_CALL
@ SDL_SCANCODE_KP_MEMRECALL
@ SDL_SCANCODE_R
@ SDL_SCANCODE_KP_AT
@ SDL_SCANCODE_KP_1
@ SDL_SCANCODE_AC_BOOKMARKS
@ SDL_SCANCODE_KP_MEMMULTIPLY
@ SDL_SCANCODE_DOWN
@ SDL_SCANCODE_COPY
@ SDL_SCANCODE_RIGHT
@ SDL_SCANCODE_F7
@ SDL_SCANCODE_WWW
@ SDL_SCANCODE_INTERNATIONAL6
@ SDL_SCANCODE_MINUS
@ SDL_SCANCODE_A
@ SDL_SCANCODE_MODE
@ SDL_SCANCODE_NONUSHASH
@ SDL_SCANCODE_LANG7
@ SDL_SCANCODE_ALTERASE
@ SDL_SCANCODE_G
@ SDL_SCANCODE_KP_2
@ SDL_SCANCODE_KP_RIGHTBRACE
@ SDL_SCANCODE_U
@ SDL_SCANCODE_AGAIN
@ SDL_SCANCODE_KP_EQUALSAS400
@ SDL_SCANCODE_KP_MULTIPLY
@ SDL_SCANCODE_KP_C
@ SDL_SCANCODE_KP_POWER
@ SDL_SCANCODE_AUDIOREWIND
@ SDL_SCANCODE_4
@ SDL_SCANCODE_KP_DBLVERTICALBAR
@ SDL_SCANCODE_APP1
@ SDL_SCANCODE_F9
@ SDL_SCANCODE_F5
@ SDL_SCANCODE_BRIGHTNESSDOWN
@ SDL_NUM_SCANCODES
@ SDL_SCANCODE_UP
@ SDL_SCANCODE_LEFT
@ SDL_SCANCODE_AUDIONEXT
@ SDL_SCANCODE_KBDILLUMDOWN
@ SDL_SCANCODE_KP_BINARY
@ SDL_SCANCODE_SELECT
@ SDL_SCANCODE_APPLICATION
@ SDL_SCANCODE_LANG5
@ SDL_SCANCODE_KP_4
@ SDL_SCANCODE_C
@ SDL_SCANCODE_HOME
@ SDL_SCANCODE_F14
@ SDL_SCANCODE_T
@ SDL_SCANCODE_KP_CLEAR
@ SDL_SCANCODE_AUDIOFASTFORWARD
@ SDL_SCANCODE_KBDILLUMUP
@ SDL_SCANCODE_F8
@ SDL_SCANCODE_LALT
@ SDL_SCANCODE_KP_8
@ SDL_SCANCODE_PASTE
@ SDL_SCANCODE_RCTRL
@ SDL_SCANCODE_F20
@ SDL_SCANCODE_KP_5
@ SDL_SCANCODE_L
@ SDL_SCANCODE_UNDO
@ SDL_SCANCODE_KP_DBLAMPERSAND
@ SDL_SCANCODE_CLEAR
@ SDL_SCANCODE_LANG6
@ SDL_SCANCODE_AC_HOME
@ SDL_SCANCODE_VOLUMEDOWN
@ SDL_SCANCODE_SOFTRIGHT
@ SDL_SCANCODE_SLEEP
@ SDL_SCANCODE_KP_DIVIDE
@ SDL_SCANCODE_PRIOR
@ SDL_SCANCODE_F18
@ SDL_SCANCODE_F13
@ SDL_SCANCODE_CURRENCYUNIT
@ SDL_SCANCODE_N
@ SDL_SCANCODE_SOFTLEFT
@ SDL_SCANCODE_MEDIASELECT
@ SDL_SCANCODE_BACKSPACE
@ SDL_SCANCODE_LANG9
@ SDL_SCANCODE_EQUALS
@ SDL_SCANCODE_SPACE
@ SDL_SCANCODE_SEPARATOR
@ SDL_SCANCODE_RSHIFT
@ SDL_SCANCODE_INSERT
@ SDL_SCANCODE_AC_FORWARD
@ SDL_SCANCODE_KP_MEMDIVIDE
@ SDL_SCANCODE_J
@ SDL_SCANCODE_1
@ SDL_SCANCODE_Q