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 * # CategoryScancode
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 `scancode` field of the SDL_KeyboardEvent structure.
41 *
42 * The values in this enumeration are based on the USB usage page standard:
43 * https://usb.org/sites/default/files/hut1_5.pdf
44 *
45 * \since This enum is available since SDL 3.0.0.
46 */
47typedef enum SDL_Scancode
48{
50
51 /**
52 * \name Usage page 0x07
53 *
54 * These values are from usage page 0x07 (USB keyboard page).
55 */
56 /* @{ */
57
84
95
101
106 SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return
107 * key on ISO keyboards and at the right end
108 * of the QWERTY row on ANSI keyboards.
109 * Produces REVERSE SOLIDUS (backslash) and
110 * VERTICAL LINE in a US layout, REVERSE
111 * SOLIDUS and VERTICAL LINE in a UK Mac
112 * layout, NUMBER SIGN and TILDE in a UK
113 * Windows layout, DOLLAR SIGN and POUND SIGN
114 * in a Swiss German layout, NUMBER SIGN and
115 * APOSTROPHE in a German layout, GRAVE
116 * ACCENT and POUND SIGN in a French Mac
117 * layout, and ASTERISK and MICRO SIGN in a
118 * French Windows layout.
119 */
120 SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
121 * instead of 49 for the same key, but all
122 * OSes I've seen treat the two codes
123 * identically. So, as an implementor, unless
124 * your keyboard generates both of those
125 * codes and your OS treats them differently,
126 * you should generate SDL_SCANCODE_BACKSLASH
127 * instead of this code. As a user, you
128 * should not rely on this code because SDL
129 * will never generate it with most (all?)
130 * keyboards.
131 */
134 SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI
135 * and ISO keyboards). Produces GRAVE ACCENT and
136 * TILDE in a US Windows layout and in US and UK
137 * Mac layouts on ANSI keyboards, GRAVE ACCENT
138 * and NOT SIGN in a UK Windows layout, SECTION
139 * SIGN and PLUS-MINUS SIGN in US and UK Mac
140 * layouts on ISO keyboards, SECTION SIGN and
141 * DEGREE SIGN in a Swiss German layout (Mac:
142 * only on ISO keyboards), CIRCUMFLEX ACCENT and
143 * DEGREE SIGN in a German layout (Mac: only on
144 * ISO keyboards), SUPERSCRIPT TWO and TILDE in a
145 * French Windows layout, COMMERCIAL AT and
146 * NUMBER SIGN in a French Mac layout on ISO
147 * keyboards, and LESS-THAN SIGN and GREATER-THAN
148 * SIGN in a Swiss German, German, or French Mac
149 * layout on ANSI keyboards.
150 */
154
156
169
173 SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
174 does send code 73, not 117) */
184
185 SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
186 */
203
204 SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
205 * keyboards have over ANSI ones,
206 * located between left shift and Y.
207 * Produces GRAVE ACCENT and TILDE in a
208 * US or UK Mac layout, REVERSE SOLIDUS
209 * (backslash) and VERTICAL LINE in a
210 * US or UK Windows layout, and
211 * LESS-THAN SIGN and GREATER-THAN SIGN
212 * in a Swiss German, German, or French
213 * layout. */
214 SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */
215 SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag,
216 * not a physical key - but some Mac keyboards
217 * do have a power key. */
232 SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */
233 SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */
235 SDL_SCANCODE_STOP = 120, /**< AC Stop */
236 SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */
237 SDL_SCANCODE_UNDO = 122, /**< AC Undo */
238 SDL_SCANCODE_CUT = 123, /**< AC Cut */
239 SDL_SCANCODE_COPY = 124, /**< AC Copy */
240 SDL_SCANCODE_PASTE = 125, /**< AC Paste */
241 SDL_SCANCODE_FIND = 126, /**< AC Find */
245/* not sure whether there's a reason to enable these */
246/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
247/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
248/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
251
252 SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
253 footnotes in USB doc */
262 SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */
263 SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */
264 SDL_SCANCODE_LANG3 = 146, /**< Katakana */
265 SDL_SCANCODE_LANG4 = 147, /**< Hiragana */
266 SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */
267 SDL_SCANCODE_LANG6 = 149, /**< reserved */
268 SDL_SCANCODE_LANG7 = 150, /**< reserved */
269 SDL_SCANCODE_LANG8 = 151, /**< reserved */
270 SDL_SCANCODE_LANG9 = 152, /**< reserved */
271
272 SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */
274 SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */
284
331
334 SDL_SCANCODE_LALT = 226, /**< alt, option */
335 SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */
338 SDL_SCANCODE_RALT = 230, /**< alt gr, option */
339 SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */
340
341 SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered
342 * by any of the above, but since there's a
343 * special SDL_KMOD_MODE for it I'm adding it here
344 */
345
346 /* @} *//* Usage page 0x07 */
347
348 /**
349 * \name Usage page 0x0C
350 *
351 * These values are mapped from usage page 0x0C (USB consumer page).
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
359 SDL_SCANCODE_SLEEP = 258, /**< Sleep */
360 SDL_SCANCODE_WAKE = 259, /**< Wake */
361
362 SDL_SCANCODE_CHANNEL_INCREMENT = 260, /**< Channel Increment */
363 SDL_SCANCODE_CHANNEL_DECREMENT = 261, /**< Channel Decrement */
364
365 SDL_SCANCODE_MEDIA_PLAY = 262, /**< Play */
366 SDL_SCANCODE_MEDIA_PAUSE = 263, /**< Pause */
367 SDL_SCANCODE_MEDIA_RECORD = 264, /**< Record */
368 SDL_SCANCODE_MEDIA_FAST_FORWARD = 265, /**< Fast Forward */
369 SDL_SCANCODE_MEDIA_REWIND = 266, /**< Rewind */
370 SDL_SCANCODE_MEDIA_NEXT_TRACK = 267, /**< Next Track */
371 SDL_SCANCODE_MEDIA_PREVIOUS_TRACK = 268, /**< Previous Track */
372 SDL_SCANCODE_MEDIA_STOP = 269, /**< Stop */
373 SDL_SCANCODE_MEDIA_EJECT = 270, /**< Eject */
374 SDL_SCANCODE_MEDIA_PLAY_PAUSE = 271, /**< Play / Pause */
375 SDL_SCANCODE_MEDIA_SELECT = 272, /* Media Select */
376
377 SDL_SCANCODE_AC_NEW = 273, /**< AC New */
378 SDL_SCANCODE_AC_OPEN = 274, /**< AC Open */
379 SDL_SCANCODE_AC_CLOSE = 275, /**< AC Close */
380 SDL_SCANCODE_AC_EXIT = 276, /**< AC Exit */
381 SDL_SCANCODE_AC_SAVE = 277, /**< AC Save */
382 SDL_SCANCODE_AC_PRINT = 278, /**< AC Print */
383 SDL_SCANCODE_AC_PROPERTIES = 279, /**< AC Properties */
384
385 SDL_SCANCODE_AC_SEARCH = 280, /**< AC Search */
386 SDL_SCANCODE_AC_HOME = 281, /**< AC Home */
387 SDL_SCANCODE_AC_BACK = 282, /**< AC Back */
388 SDL_SCANCODE_AC_FORWARD = 283, /**< AC Forward */
389 SDL_SCANCODE_AC_STOP = 284, /**< AC Stop */
390 SDL_SCANCODE_AC_REFRESH = 285, /**< AC Refresh */
391 SDL_SCANCODE_AC_BOOKMARKS = 286, /**< AC Bookmarks */
392
393 /* @} *//* Usage page 0x0C */
394
395
396 /**
397 * \name Mobile keys
398 *
399 * These are values that are often used on mobile phones.
400 */
401 /* @{ */
402
403 SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and
404 used as a multi-function feature key for selecting
405 a software defined function shown on the bottom left
406 of the display. */
407 SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and
408 used as a multi-function feature key for selecting
409 a software defined function shown on the bottom right
410 of the display. */
411 SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */
412 SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */
413
414 /* @} *//* Mobile keys */
415
416 /* Add any other keys here. */
417
418 SDL_SCANCODE_RESERVED = 400, /**< 400-500 reserved for dynamic keycodes */
419
420 SDL_SCANCODE_COUNT = 512 /**< not a key, just marks the number of scancodes for array bounds */
421
423
424#endif /* SDL_scancode_h_ */
SDL_Scancode
@ SDL_SCANCODE_E
@ SDL_SCANCODE_END
@ SDL_SCANCODE_OUT
@ SDL_SCANCODE_AC_NEW
@ SDL_SCANCODE_BACKSLASH
@ SDL_SCANCODE_MEDIA_PREVIOUS_TRACK
@ SDL_SCANCODE_ESCAPE
@ SDL_SCANCODE_KP_OCTAL
@ SDL_SCANCODE_KP_CLEARENTRY
@ 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_MEDIA_REWIND
@ SDL_SCANCODE_F4
@ SDL_SCANCODE_LANG8
@ SDL_SCANCODE_RIGHTBRACKET
@ SDL_SCANCODE_MEDIA_PLAY
@ 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_AC_SAVE
@ 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_AC_EXIT
@ 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_CHANNEL_INCREMENT
@ SDL_SCANCODE_KP_COLON
@ SDL_SCANCODE_CHANNEL_DECREMENT
@ 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_MEDIA_FAST_FORWARD
@ SDL_SCANCODE_MEDIA_RECORD
@ SDL_SCANCODE_VOLUMEUP
@ SDL_SCANCODE_INTERNATIONAL8
@ SDL_SCANCODE_CRSEL
@ SDL_SCANCODE_ENDCALL
@ SDL_SCANCODE_NUMLOCKCLEAR
@ SDL_SCANCODE_MEDIA_PLAY_PAUSE
@ SDL_SCANCODE_PRINTSCREEN
@ SDL_SCANCODE_KP_XOR
@ SDL_SCANCODE_POWER
@ SDL_SCANCODE_KP_3
@ SDL_SCANCODE_SCROLLLOCK
@ SDL_SCANCODE_PAUSE
@ SDL_SCANCODE_RETURN
@ SDL_SCANCODE_KP_000
@ SDL_SCANCODE_HELP
@ SDL_SCANCODE_PAGEDOWN
@ SDL_SCANCODE_INTERNATIONAL3
@ SDL_SCANCODE_LSHIFT
@ 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_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_MEDIA_STOP
@ 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_AC_OPEN
@ 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_P
@ SDL_SCANCODE_D
@ SDL_SCANCODE_F23
@ SDL_SCANCODE_PERIOD
@ SDL_SCANCODE_CALL
@ SDL_SCANCODE_KP_MEMRECALL
@ SDL_SCANCODE_MEDIA_NEXT_TRACK
@ 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_INTERNATIONAL6
@ SDL_SCANCODE_MINUS
@ SDL_SCANCODE_MEDIA_SELECT
@ SDL_SCANCODE_A
@ SDL_SCANCODE_MODE
@ SDL_SCANCODE_NONUSHASH
@ SDL_SCANCODE_WAKE
@ 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_MEDIA_EJECT
@ SDL_SCANCODE_KP_EQUALSAS400
@ SDL_SCANCODE_KP_MULTIPLY
@ SDL_SCANCODE_KP_C
@ SDL_SCANCODE_KP_POWER
@ SDL_SCANCODE_4
@ SDL_SCANCODE_KP_DBLVERTICALBAR
@ SDL_SCANCODE_F9
@ SDL_SCANCODE_AC_PRINT
@ SDL_SCANCODE_F5
@ SDL_SCANCODE_AC_CLOSE
@ SDL_SCANCODE_UP
@ SDL_SCANCODE_LEFT
@ 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_F8
@ SDL_SCANCODE_LALT
@ SDL_SCANCODE_KP_8
@ SDL_SCANCODE_MEDIA_PAUSE
@ 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_RESERVED
@ SDL_SCANCODE_CURRENCYUNIT
@ SDL_SCANCODE_N
@ SDL_SCANCODE_SOFTLEFT
@ SDL_SCANCODE_BACKSPACE
@ SDL_SCANCODE_LANG9
@ SDL_SCANCODE_EQUALS
@ SDL_SCANCODE_SPACE
@ SDL_SCANCODE_COUNT
@ SDL_SCANCODE_SEPARATOR
@ SDL_SCANCODE_RSHIFT
@ SDL_SCANCODE_INSERT
@ SDL_SCANCODE_AC_FORWARD
@ SDL_SCANCODE_KP_MEMDIVIDE
@ SDL_SCANCODE_J
@ SDL_SCANCODE_AC_PROPERTIES
@ SDL_SCANCODE_1
@ SDL_SCANCODE_Q