Atlas - SDL_scancode.h

Home / ext / SDL / include / SDL3 Lines: 4 | Size: 17246 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)]
[FILE BEGIN]
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 */ 52typedef 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 Z. 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
[FILE END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.