1#![allow(missing_docs)]
4
5use crate::bind;
6
7use super::key_code::KeyCode;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10#[non_exhaustive]
11pub enum ScanCode {
12 Unknown,
13 A,
14 B,
15 C,
16 D,
17 E,
18 F,
19 G,
20 H,
21 I,
22 J,
23 K,
24 L,
25 M,
26 N,
27 O,
28 P,
29 Q,
30 R,
31 S,
32 T,
33 U,
34 V,
35 W,
36 X,
37 Y,
38 Z,
39 Num1,
40 Num2,
41 Num3,
42 Num4,
43 Num5,
44 Num6,
45 Num7,
46 Num8,
47 Num9,
48 Num0,
49 Return,
50 Escape,
51 Backspace,
52 Tab,
53 Space,
54 Minus,
55 Equals,
56 LeftBracket,
57 RightBracket,
58 Backslash,
59 NonUsHash,
60 Semicolon,
61 Apostrophe,
62 Grave,
63 Comma,
64 Period,
65 Slash,
66 CapsLock,
67 F1,
68 F2,
69 F3,
70 F4,
71 F5,
72 F6,
73 F7,
74 F8,
75 F9,
76 F10,
77 F11,
78 F12,
79 PrintScreen,
80 ScrollLock,
81 Pause,
82 Insert,
83 Home,
84 PageUp,
85 Delete,
86 End,
87 PageDown,
88 Right,
89 Left,
90 Down,
91 Up,
92 NumLockClear,
93 KeypadDivide,
94 KeypadMultiply,
95 KeypadMinus,
96 KeypadPlus,
97 KeypadEnter,
98 Keypad1,
99 Keypad2,
100 Keypad3,
101 Keypad4,
102 Keypad5,
103 Keypad6,
104 Keypad7,
105 Keypad8,
106 Keypad9,
107 Keypad0,
108 KeypadPeriod,
109 NonUsBackslash,
110 Application,
111 Power,
112 KeypadEquals,
113 F13,
114 F14,
115 F15,
116 F16,
117 F17,
118 F18,
119 F19,
120 F20,
121 F21,
122 F22,
123 F23,
124 F24,
125 Execute,
126 Help,
127 Menu,
128 Select,
129 Stop,
130 Again,
131 Undo,
132 Cut,
133 Copy,
134 Paste,
135 Find,
136 Mute,
137 VolumeUp,
138 VolumeDown,
139 KeypadComma,
140 KeypadEqualsAs400,
141 International1,
142 International2,
143 International3,
144 International4,
145 International5,
146 International6,
147 International7,
148 International8,
149 International9,
150 Lang1,
151 Lang2,
152 Lang3,
153 Lang4,
154 Lang5,
155 Lang6,
156 Lang7,
157 Lang8,
158 Lang9,
159 AltErase,
160 SysReq,
161 Cancel,
162 Clear,
163 Prior,
164 Return2,
165 Separator,
166 Out,
167 Oper,
168 ClearAgain,
169 CrSel,
170 ExSel,
171 Keypad00,
172 Keypad000,
173 ThousandsSeparator,
174 DecimalSeparator,
175 CurrencyUnit,
176 CurrencySubunit,
177 KeypadLeftParen,
178 KeypadRightParen,
179 KeypadLeftBrace,
180 KeypadRightBrace,
181 KeypadTab,
182 KeypadBackspace,
183 KeypadA,
184 KeypadB,
185 KeypadC,
186 KeypadD,
187 KeypadE,
188 KeypadF,
189 KeypadXor,
190 KeypadPower,
191 KeypadPercent,
192 KeypadLess,
193 KeypadGreater,
194 KeypadAmpersand,
195 KeypadDblAmpersand,
196 KeypadVerticalBar,
197 KeypadDblVerticalBar,
198 KeypadColon,
199 KeypadHash,
200 KeypadSpace,
201 KeypadAt,
202 KeypadExclam,
203 KeypadMemStore,
204 KeypadMemRecall,
205 KeypadMemClear,
206 KeypadMemAdd,
207 KeypadMemSubtract,
208 KeypadMemMultiply,
209 KeypadMemDivide,
210 KeypadPlusMinus,
211 KeypadClear,
212 KeypadClearEntry,
213 KeypadBinary,
214 KeypadOctal,
215 KeypadDecimal,
216 KeypadHexadecimal,
217 LCtrl,
218 LShift,
219 LAlt,
220 LGui,
221 RCtrl,
222 RShift,
223 RAlt,
224 RGui,
225 Mode,
226 AudioNext,
227 AudioPrev,
228 AudioStop,
229 AudioPlay,
230 AudioMute,
231 MediaSelect,
232 Www,
233 Mail,
234 Calculator,
235 Computer,
236 ApplicationSearch,
237 ApplicationHome,
238 ApplicationBack,
239 ApplicationForward,
240 ApplicationStop,
241 ApplicationRefresh,
242 ApplicationBookmarks,
243 BrightnessDown,
244 BrightnessUp,
245 DisplaySwitch,
246 KeyboardIllumToggle,
247 KeyboardIllumDown,
248 KeyboardIllumUp,
249 Eject,
250 Sleep,
251 App1,
252 App2,
253 AudioRewind,
254 AudioFastForward,
255}
256
257pub const NUM_SCANCODES: u16 = 512;
258
259impl ScanCode {
260 pub(crate) fn as_raw(self) -> bind::SDL_Scancode {
261 match self {
262 ScanCode::Unknown => bind::SDL_SCANCODE_UNKNOWN,
263 ScanCode::A => bind::SDL_SCANCODE_A,
264 ScanCode::B => bind::SDL_SCANCODE_B,
265 ScanCode::C => bind::SDL_SCANCODE_C,
266 ScanCode::D => bind::SDL_SCANCODE_D,
267 ScanCode::E => bind::SDL_SCANCODE_E,
268 ScanCode::F => bind::SDL_SCANCODE_F,
269 ScanCode::G => bind::SDL_SCANCODE_G,
270 ScanCode::H => bind::SDL_SCANCODE_H,
271 ScanCode::I => bind::SDL_SCANCODE_I,
272 ScanCode::J => bind::SDL_SCANCODE_J,
273 ScanCode::K => bind::SDL_SCANCODE_K,
274 ScanCode::L => bind::SDL_SCANCODE_L,
275 ScanCode::M => bind::SDL_SCANCODE_M,
276 ScanCode::N => bind::SDL_SCANCODE_N,
277 ScanCode::O => bind::SDL_SCANCODE_O,
278 ScanCode::P => bind::SDL_SCANCODE_P,
279 ScanCode::Q => bind::SDL_SCANCODE_Q,
280 ScanCode::R => bind::SDL_SCANCODE_R,
281 ScanCode::S => bind::SDL_SCANCODE_S,
282 ScanCode::T => bind::SDL_SCANCODE_T,
283 ScanCode::U => bind::SDL_SCANCODE_U,
284 ScanCode::V => bind::SDL_SCANCODE_V,
285 ScanCode::W => bind::SDL_SCANCODE_W,
286 ScanCode::X => bind::SDL_SCANCODE_X,
287 ScanCode::Y => bind::SDL_SCANCODE_Y,
288 ScanCode::Z => bind::SDL_SCANCODE_Z,
289 ScanCode::Num1 => bind::SDL_SCANCODE_1,
290 ScanCode::Num2 => bind::SDL_SCANCODE_2,
291 ScanCode::Num3 => bind::SDL_SCANCODE_3,
292 ScanCode::Num4 => bind::SDL_SCANCODE_4,
293 ScanCode::Num5 => bind::SDL_SCANCODE_5,
294 ScanCode::Num6 => bind::SDL_SCANCODE_6,
295 ScanCode::Num7 => bind::SDL_SCANCODE_7,
296 ScanCode::Num8 => bind::SDL_SCANCODE_8,
297 ScanCode::Num9 => bind::SDL_SCANCODE_9,
298 ScanCode::Num0 => bind::SDL_SCANCODE_0,
299 ScanCode::Return => bind::SDL_SCANCODE_RETURN,
300 ScanCode::Escape => bind::SDL_SCANCODE_ESCAPE,
301 ScanCode::Backspace => bind::SDL_SCANCODE_BACKSPACE,
302 ScanCode::Tab => bind::SDL_SCANCODE_TAB,
303 ScanCode::Space => bind::SDL_SCANCODE_SPACE,
304 ScanCode::Minus => bind::SDL_SCANCODE_MINUS,
305 ScanCode::Equals => bind::SDL_SCANCODE_EQUALS,
306 ScanCode::LeftBracket => bind::SDL_SCANCODE_LEFTBRACKET,
307 ScanCode::RightBracket => bind::SDL_SCANCODE_RIGHTBRACKET,
308 ScanCode::Backslash => bind::SDL_SCANCODE_BACKSLASH,
309 ScanCode::NonUsHash => bind::SDL_SCANCODE_NONUSHASH,
310 ScanCode::Semicolon => bind::SDL_SCANCODE_SEMICOLON,
311 ScanCode::Apostrophe => bind::SDL_SCANCODE_APOSTROPHE,
312 ScanCode::Grave => bind::SDL_SCANCODE_GRAVE,
313 ScanCode::Comma => bind::SDL_SCANCODE_COMMA,
314 ScanCode::Period => bind::SDL_SCANCODE_PERIOD,
315 ScanCode::Slash => bind::SDL_SCANCODE_SLASH,
316 ScanCode::CapsLock => bind::SDL_SCANCODE_CAPSLOCK,
317 ScanCode::F1 => bind::SDL_SCANCODE_F1,
318 ScanCode::F2 => bind::SDL_SCANCODE_F2,
319 ScanCode::F3 => bind::SDL_SCANCODE_F3,
320 ScanCode::F4 => bind::SDL_SCANCODE_F4,
321 ScanCode::F5 => bind::SDL_SCANCODE_F5,
322 ScanCode::F6 => bind::SDL_SCANCODE_F6,
323 ScanCode::F7 => bind::SDL_SCANCODE_F7,
324 ScanCode::F8 => bind::SDL_SCANCODE_F8,
325 ScanCode::F9 => bind::SDL_SCANCODE_F9,
326 ScanCode::F10 => bind::SDL_SCANCODE_F10,
327 ScanCode::F11 => bind::SDL_SCANCODE_F11,
328 ScanCode::F12 => bind::SDL_SCANCODE_F12,
329 ScanCode::PrintScreen => bind::SDL_SCANCODE_PRINTSCREEN,
330 ScanCode::ScrollLock => bind::SDL_SCANCODE_SCROLLLOCK,
331 ScanCode::Pause => bind::SDL_SCANCODE_PAUSE,
332 ScanCode::Insert => bind::SDL_SCANCODE_INSERT,
333 ScanCode::Home => bind::SDL_SCANCODE_HOME,
334 ScanCode::PageUp => bind::SDL_SCANCODE_PAGEUP,
335 ScanCode::Delete => bind::SDL_SCANCODE_DELETE,
336 ScanCode::End => bind::SDL_SCANCODE_END,
337 ScanCode::PageDown => bind::SDL_SCANCODE_PAGEDOWN,
338 ScanCode::Right => bind::SDL_SCANCODE_RIGHT,
339 ScanCode::Left => bind::SDL_SCANCODE_LEFT,
340 ScanCode::Down => bind::SDL_SCANCODE_DOWN,
341 ScanCode::Up => bind::SDL_SCANCODE_UP,
342 ScanCode::NumLockClear => bind::SDL_SCANCODE_NUMLOCKCLEAR,
343 ScanCode::KeypadDivide => bind::SDL_SCANCODE_KP_DIVIDE,
344 ScanCode::KeypadMultiply => bind::SDL_SCANCODE_KP_MULTIPLY,
345 ScanCode::KeypadMinus => bind::SDL_SCANCODE_KP_MINUS,
346 ScanCode::KeypadPlus => bind::SDL_SCANCODE_KP_PLUS,
347 ScanCode::KeypadEnter => bind::SDL_SCANCODE_KP_ENTER,
348 ScanCode::Keypad1 => bind::SDL_SCANCODE_KP_1,
349 ScanCode::Keypad2 => bind::SDL_SCANCODE_KP_2,
350 ScanCode::Keypad3 => bind::SDL_SCANCODE_KP_3,
351 ScanCode::Keypad4 => bind::SDL_SCANCODE_KP_4,
352 ScanCode::Keypad5 => bind::SDL_SCANCODE_KP_5,
353 ScanCode::Keypad6 => bind::SDL_SCANCODE_KP_6,
354 ScanCode::Keypad7 => bind::SDL_SCANCODE_KP_7,
355 ScanCode::Keypad8 => bind::SDL_SCANCODE_KP_8,
356 ScanCode::Keypad9 => bind::SDL_SCANCODE_KP_9,
357 ScanCode::Keypad0 => bind::SDL_SCANCODE_KP_0,
358 ScanCode::KeypadPeriod => bind::SDL_SCANCODE_KP_PERIOD,
359 ScanCode::NonUsBackslash => bind::SDL_SCANCODE_NONUSBACKSLASH,
360 ScanCode::Application => bind::SDL_SCANCODE_APPLICATION,
361 ScanCode::Power => bind::SDL_SCANCODE_POWER,
362 ScanCode::KeypadEquals => bind::SDL_SCANCODE_KP_EQUALS,
363 ScanCode::F13 => bind::SDL_SCANCODE_F13,
364 ScanCode::F14 => bind::SDL_SCANCODE_F14,
365 ScanCode::F15 => bind::SDL_SCANCODE_F15,
366 ScanCode::F16 => bind::SDL_SCANCODE_F16,
367 ScanCode::F17 => bind::SDL_SCANCODE_F17,
368 ScanCode::F18 => bind::SDL_SCANCODE_F18,
369 ScanCode::F19 => bind::SDL_SCANCODE_F19,
370 ScanCode::F20 => bind::SDL_SCANCODE_F20,
371 ScanCode::F21 => bind::SDL_SCANCODE_F21,
372 ScanCode::F22 => bind::SDL_SCANCODE_F22,
373 ScanCode::F23 => bind::SDL_SCANCODE_F23,
374 ScanCode::F24 => bind::SDL_SCANCODE_F24,
375 ScanCode::Execute => bind::SDL_SCANCODE_EXECUTE,
376 ScanCode::Help => bind::SDL_SCANCODE_HELP,
377 ScanCode::Menu => bind::SDL_SCANCODE_MENU,
378 ScanCode::Select => bind::SDL_SCANCODE_SELECT,
379 ScanCode::Stop => bind::SDL_SCANCODE_STOP,
380 ScanCode::Again => bind::SDL_SCANCODE_AGAIN,
381 ScanCode::Undo => bind::SDL_SCANCODE_UNDO,
382 ScanCode::Cut => bind::SDL_SCANCODE_CUT,
383 ScanCode::Copy => bind::SDL_SCANCODE_COPY,
384 ScanCode::Paste => bind::SDL_SCANCODE_PASTE,
385 ScanCode::Find => bind::SDL_SCANCODE_FIND,
386 ScanCode::Mute => bind::SDL_SCANCODE_MUTE,
387 ScanCode::VolumeUp => bind::SDL_SCANCODE_VOLUMEUP,
388 ScanCode::VolumeDown => bind::SDL_SCANCODE_VOLUMEDOWN,
389 ScanCode::KeypadComma => bind::SDL_SCANCODE_KP_COMMA,
390 ScanCode::KeypadEqualsAs400 => bind::SDL_SCANCODE_KP_EQUALSAS400,
391 ScanCode::International1 => bind::SDL_SCANCODE_INTERNATIONAL1,
392 ScanCode::International2 => bind::SDL_SCANCODE_INTERNATIONAL2,
393 ScanCode::International3 => bind::SDL_SCANCODE_INTERNATIONAL3,
394 ScanCode::International4 => bind::SDL_SCANCODE_INTERNATIONAL4,
395 ScanCode::International5 => bind::SDL_SCANCODE_INTERNATIONAL5,
396 ScanCode::International6 => bind::SDL_SCANCODE_INTERNATIONAL6,
397 ScanCode::International7 => bind::SDL_SCANCODE_INTERNATIONAL7,
398 ScanCode::International8 => bind::SDL_SCANCODE_INTERNATIONAL8,
399 ScanCode::International9 => bind::SDL_SCANCODE_INTERNATIONAL9,
400 ScanCode::Lang1 => bind::SDL_SCANCODE_LANG1,
401 ScanCode::Lang2 => bind::SDL_SCANCODE_LANG2,
402 ScanCode::Lang3 => bind::SDL_SCANCODE_LANG3,
403 ScanCode::Lang4 => bind::SDL_SCANCODE_LANG4,
404 ScanCode::Lang5 => bind::SDL_SCANCODE_LANG5,
405 ScanCode::Lang6 => bind::SDL_SCANCODE_LANG6,
406 ScanCode::Lang7 => bind::SDL_SCANCODE_LANG7,
407 ScanCode::Lang8 => bind::SDL_SCANCODE_LANG8,
408 ScanCode::Lang9 => bind::SDL_SCANCODE_LANG9,
409 ScanCode::AltErase => bind::SDL_SCANCODE_ALTERASE,
410 ScanCode::SysReq => bind::SDL_SCANCODE_SYSREQ,
411 ScanCode::Cancel => bind::SDL_SCANCODE_CANCEL,
412 ScanCode::Clear => bind::SDL_SCANCODE_CLEAR,
413 ScanCode::Prior => bind::SDL_SCANCODE_PRIOR,
414 ScanCode::Return2 => bind::SDL_SCANCODE_RETURN2,
415 ScanCode::Separator => bind::SDL_SCANCODE_SEPARATOR,
416 ScanCode::Out => bind::SDL_SCANCODE_OUT,
417 ScanCode::Oper => bind::SDL_SCANCODE_OPER,
418 ScanCode::ClearAgain => bind::SDL_SCANCODE_CLEARAGAIN,
419 ScanCode::CrSel => bind::SDL_SCANCODE_CRSEL,
420 ScanCode::ExSel => bind::SDL_SCANCODE_EXSEL,
421 ScanCode::Keypad00 => bind::SDL_SCANCODE_KP_00,
422 ScanCode::Keypad000 => bind::SDL_SCANCODE_KP_000,
423 ScanCode::ThousandsSeparator => bind::SDL_SCANCODE_THOUSANDSSEPARATOR,
424 ScanCode::DecimalSeparator => bind::SDL_SCANCODE_DECIMALSEPARATOR,
425 ScanCode::CurrencyUnit => bind::SDL_SCANCODE_CURRENCYUNIT,
426 ScanCode::CurrencySubunit => bind::SDL_SCANCODE_CURRENCYSUBUNIT,
427 ScanCode::KeypadLeftParen => bind::SDL_SCANCODE_KP_LEFTPAREN,
428 ScanCode::KeypadRightParen => bind::SDL_SCANCODE_KP_RIGHTPAREN,
429 ScanCode::KeypadLeftBrace => bind::SDL_SCANCODE_KP_LEFTBRACE,
430 ScanCode::KeypadRightBrace => bind::SDL_SCANCODE_KP_RIGHTBRACE,
431 ScanCode::KeypadTab => bind::SDL_SCANCODE_KP_TAB,
432 ScanCode::KeypadBackspace => bind::SDL_SCANCODE_KP_BACKSPACE,
433 ScanCode::KeypadA => bind::SDL_SCANCODE_KP_A,
434 ScanCode::KeypadB => bind::SDL_SCANCODE_KP_B,
435 ScanCode::KeypadC => bind::SDL_SCANCODE_KP_C,
436 ScanCode::KeypadD => bind::SDL_SCANCODE_KP_D,
437 ScanCode::KeypadE => bind::SDL_SCANCODE_KP_E,
438 ScanCode::KeypadF => bind::SDL_SCANCODE_KP_F,
439 ScanCode::KeypadXor => bind::SDL_SCANCODE_KP_XOR,
440 ScanCode::KeypadPower => bind::SDL_SCANCODE_KP_POWER,
441 ScanCode::KeypadPercent => bind::SDL_SCANCODE_KP_PERCENT,
442 ScanCode::KeypadLess => bind::SDL_SCANCODE_KP_LESS,
443 ScanCode::KeypadGreater => bind::SDL_SCANCODE_KP_GREATER,
444 ScanCode::KeypadAmpersand => bind::SDL_SCANCODE_KP_AMPERSAND,
445 ScanCode::KeypadDblAmpersand => bind::SDL_SCANCODE_KP_DBLAMPERSAND,
446 ScanCode::KeypadVerticalBar => bind::SDL_SCANCODE_KP_VERTICALBAR,
447 ScanCode::KeypadDblVerticalBar => bind::SDL_SCANCODE_KP_DBLVERTICALBAR,
448 ScanCode::KeypadColon => bind::SDL_SCANCODE_KP_COLON,
449 ScanCode::KeypadHash => bind::SDL_SCANCODE_KP_HASH,
450 ScanCode::KeypadSpace => bind::SDL_SCANCODE_KP_SPACE,
451 ScanCode::KeypadAt => bind::SDL_SCANCODE_KP_AT,
452 ScanCode::KeypadExclam => bind::SDL_SCANCODE_KP_EXCLAM,
453 ScanCode::KeypadMemStore => bind::SDL_SCANCODE_KP_MEMSTORE,
454 ScanCode::KeypadMemRecall => bind::SDL_SCANCODE_KP_MEMRECALL,
455 ScanCode::KeypadMemClear => bind::SDL_SCANCODE_KP_MEMCLEAR,
456 ScanCode::KeypadMemAdd => bind::SDL_SCANCODE_KP_MEMADD,
457 ScanCode::KeypadMemSubtract => bind::SDL_SCANCODE_KP_MEMSUBTRACT,
458 ScanCode::KeypadMemMultiply => bind::SDL_SCANCODE_KP_MEMMULTIPLY,
459 ScanCode::KeypadMemDivide => bind::SDL_SCANCODE_KP_MEMDIVIDE,
460 ScanCode::KeypadPlusMinus => bind::SDL_SCANCODE_KP_PLUSMINUS,
461 ScanCode::KeypadClear => bind::SDL_SCANCODE_KP_CLEAR,
462 ScanCode::KeypadClearEntry => bind::SDL_SCANCODE_KP_CLEARENTRY,
463 ScanCode::KeypadBinary => bind::SDL_SCANCODE_KP_BINARY,
464 ScanCode::KeypadOctal => bind::SDL_SCANCODE_KP_OCTAL,
465 ScanCode::KeypadDecimal => bind::SDL_SCANCODE_KP_DECIMAL,
466 ScanCode::KeypadHexadecimal => bind::SDL_SCANCODE_KP_HEXADECIMAL,
467 ScanCode::LCtrl => bind::SDL_SCANCODE_LCTRL,
468 ScanCode::LShift => bind::SDL_SCANCODE_LSHIFT,
469 ScanCode::LAlt => bind::SDL_SCANCODE_LALT,
470 ScanCode::LGui => bind::SDL_SCANCODE_LGUI,
471 ScanCode::RCtrl => bind::SDL_SCANCODE_RCTRL,
472 ScanCode::RShift => bind::SDL_SCANCODE_RSHIFT,
473 ScanCode::RAlt => bind::SDL_SCANCODE_RALT,
474 ScanCode::RGui => bind::SDL_SCANCODE_RGUI,
475 ScanCode::Mode => bind::SDL_SCANCODE_MODE,
476 ScanCode::AudioNext => bind::SDL_SCANCODE_AUDIONEXT,
477 ScanCode::AudioPrev => bind::SDL_SCANCODE_AUDIOPREV,
478 ScanCode::AudioStop => bind::SDL_SCANCODE_AUDIOSTOP,
479 ScanCode::AudioPlay => bind::SDL_SCANCODE_AUDIOPLAY,
480 ScanCode::AudioMute => bind::SDL_SCANCODE_AUDIOMUTE,
481 ScanCode::MediaSelect => bind::SDL_SCANCODE_MEDIASELECT,
482 ScanCode::Www => bind::SDL_SCANCODE_WWW,
483 ScanCode::Mail => bind::SDL_SCANCODE_MAIL,
484 ScanCode::Calculator => bind::SDL_SCANCODE_CALCULATOR,
485 ScanCode::Computer => bind::SDL_SCANCODE_COMPUTER,
486 ScanCode::ApplicationSearch => bind::SDL_SCANCODE_AC_SEARCH,
487 ScanCode::ApplicationHome => bind::SDL_SCANCODE_AC_HOME,
488 ScanCode::ApplicationBack => bind::SDL_SCANCODE_AC_BACK,
489 ScanCode::ApplicationForward => bind::SDL_SCANCODE_AC_FORWARD,
490 ScanCode::ApplicationStop => bind::SDL_SCANCODE_AC_STOP,
491 ScanCode::ApplicationRefresh => bind::SDL_SCANCODE_AC_REFRESH,
492 ScanCode::ApplicationBookmarks => bind::SDL_SCANCODE_AC_BOOKMARKS,
493 ScanCode::BrightnessDown => bind::SDL_SCANCODE_BRIGHTNESSDOWN,
494 ScanCode::BrightnessUp => bind::SDL_SCANCODE_BRIGHTNESSUP,
495 ScanCode::DisplaySwitch => bind::SDL_SCANCODE_DISPLAYSWITCH,
496 ScanCode::KeyboardIllumToggle => bind::SDL_SCANCODE_KBDILLUMTOGGLE,
497 ScanCode::KeyboardIllumDown => bind::SDL_SCANCODE_KBDILLUMDOWN,
498 ScanCode::KeyboardIllumUp => bind::SDL_SCANCODE_KBDILLUMUP,
499 ScanCode::Eject => bind::SDL_SCANCODE_EJECT,
500 ScanCode::Sleep => bind::SDL_SCANCODE_SLEEP,
501 ScanCode::App1 => bind::SDL_SCANCODE_APP1,
502 ScanCode::App2 => bind::SDL_SCANCODE_APP2,
503 ScanCode::AudioRewind => bind::SDL_SCANCODE_AUDIOREWIND,
504 ScanCode::AudioFastForward => bind::SDL_SCANCODE_AUDIOFASTFORWARD,
505 }
506 }
507}
508
509impl From<KeyCode> for ScanCode {
510 fn from(key_code: KeyCode) -> Self {
511 unsafe { bind::SDL_GetScancodeFromKey(key_code.as_raw()) }.into()
512 }
513}
514
515impl From<bind::SDL_Scancode> for ScanCode {
516 fn from(code: bind::SDL_Scancode) -> Self {
517 match code {
518 bind::SDL_SCANCODE_A => ScanCode::A,
519 bind::SDL_SCANCODE_B => ScanCode::B,
520 bind::SDL_SCANCODE_C => ScanCode::C,
521 bind::SDL_SCANCODE_D => ScanCode::D,
522 bind::SDL_SCANCODE_E => ScanCode::E,
523 bind::SDL_SCANCODE_F => ScanCode::F,
524 bind::SDL_SCANCODE_G => ScanCode::G,
525 bind::SDL_SCANCODE_H => ScanCode::H,
526 bind::SDL_SCANCODE_I => ScanCode::I,
527 bind::SDL_SCANCODE_J => ScanCode::J,
528 bind::SDL_SCANCODE_K => ScanCode::K,
529 bind::SDL_SCANCODE_L => ScanCode::L,
530 bind::SDL_SCANCODE_M => ScanCode::M,
531 bind::SDL_SCANCODE_N => ScanCode::N,
532 bind::SDL_SCANCODE_O => ScanCode::O,
533 bind::SDL_SCANCODE_P => ScanCode::P,
534 bind::SDL_SCANCODE_Q => ScanCode::Q,
535 bind::SDL_SCANCODE_R => ScanCode::R,
536 bind::SDL_SCANCODE_S => ScanCode::S,
537 bind::SDL_SCANCODE_T => ScanCode::T,
538 bind::SDL_SCANCODE_U => ScanCode::U,
539 bind::SDL_SCANCODE_V => ScanCode::V,
540 bind::SDL_SCANCODE_W => ScanCode::W,
541 bind::SDL_SCANCODE_X => ScanCode::X,
542 bind::SDL_SCANCODE_Y => ScanCode::Y,
543 bind::SDL_SCANCODE_Z => ScanCode::Z,
544 bind::SDL_SCANCODE_1 => ScanCode::Num1,
545 bind::SDL_SCANCODE_2 => ScanCode::Num2,
546 bind::SDL_SCANCODE_3 => ScanCode::Num3,
547 bind::SDL_SCANCODE_4 => ScanCode::Num4,
548 bind::SDL_SCANCODE_5 => ScanCode::Num5,
549 bind::SDL_SCANCODE_6 => ScanCode::Num6,
550 bind::SDL_SCANCODE_7 => ScanCode::Num7,
551 bind::SDL_SCANCODE_8 => ScanCode::Num8,
552 bind::SDL_SCANCODE_9 => ScanCode::Num9,
553 bind::SDL_SCANCODE_0 => ScanCode::Num0,
554 bind::SDL_SCANCODE_RETURN => ScanCode::Return,
555 bind::SDL_SCANCODE_ESCAPE => ScanCode::Escape,
556 bind::SDL_SCANCODE_BACKSPACE => ScanCode::Backspace,
557 bind::SDL_SCANCODE_TAB => ScanCode::Tab,
558 bind::SDL_SCANCODE_SPACE => ScanCode::Space,
559 bind::SDL_SCANCODE_MINUS => ScanCode::Minus,
560 bind::SDL_SCANCODE_EQUALS => ScanCode::Equals,
561 bind::SDL_SCANCODE_LEFTBRACKET => ScanCode::LeftBracket,
562 bind::SDL_SCANCODE_RIGHTBRACKET => ScanCode::RightBracket,
563 bind::SDL_SCANCODE_BACKSLASH => ScanCode::Backslash,
564 bind::SDL_SCANCODE_NONUSHASH => ScanCode::NonUsHash,
565 bind::SDL_SCANCODE_SEMICOLON => ScanCode::Semicolon,
566 bind::SDL_SCANCODE_APOSTROPHE => ScanCode::Apostrophe,
567 bind::SDL_SCANCODE_GRAVE => ScanCode::Grave,
568 bind::SDL_SCANCODE_COMMA => ScanCode::Comma,
569 bind::SDL_SCANCODE_PERIOD => ScanCode::Period,
570 bind::SDL_SCANCODE_SLASH => ScanCode::Slash,
571 bind::SDL_SCANCODE_CAPSLOCK => ScanCode::CapsLock,
572 bind::SDL_SCANCODE_F1 => ScanCode::F1,
573 bind::SDL_SCANCODE_F2 => ScanCode::F2,
574 bind::SDL_SCANCODE_F3 => ScanCode::F3,
575 bind::SDL_SCANCODE_F4 => ScanCode::F4,
576 bind::SDL_SCANCODE_F5 => ScanCode::F5,
577 bind::SDL_SCANCODE_F6 => ScanCode::F6,
578 bind::SDL_SCANCODE_F7 => ScanCode::F7,
579 bind::SDL_SCANCODE_F8 => ScanCode::F8,
580 bind::SDL_SCANCODE_F9 => ScanCode::F9,
581 bind::SDL_SCANCODE_F10 => ScanCode::F10,
582 bind::SDL_SCANCODE_F11 => ScanCode::F11,
583 bind::SDL_SCANCODE_F12 => ScanCode::F12,
584 bind::SDL_SCANCODE_PRINTSCREEN => ScanCode::PrintScreen,
585 bind::SDL_SCANCODE_SCROLLLOCK => ScanCode::ScrollLock,
586 bind::SDL_SCANCODE_PAUSE => ScanCode::Pause,
587 bind::SDL_SCANCODE_INSERT => ScanCode::Insert,
588 bind::SDL_SCANCODE_HOME => ScanCode::Home,
589 bind::SDL_SCANCODE_PAGEUP => ScanCode::PageUp,
590 bind::SDL_SCANCODE_DELETE => ScanCode::Delete,
591 bind::SDL_SCANCODE_END => ScanCode::End,
592 bind::SDL_SCANCODE_PAGEDOWN => ScanCode::PageDown,
593 bind::SDL_SCANCODE_RIGHT => ScanCode::Right,
594 bind::SDL_SCANCODE_LEFT => ScanCode::Left,
595 bind::SDL_SCANCODE_DOWN => ScanCode::Down,
596 bind::SDL_SCANCODE_UP => ScanCode::Up,
597 bind::SDL_SCANCODE_NUMLOCKCLEAR => ScanCode::NumLockClear,
598 bind::SDL_SCANCODE_KP_DIVIDE => ScanCode::KeypadDivide,
599 bind::SDL_SCANCODE_KP_MULTIPLY => ScanCode::KeypadMultiply,
600 bind::SDL_SCANCODE_KP_MINUS => ScanCode::KeypadMinus,
601 bind::SDL_SCANCODE_KP_PLUS => ScanCode::KeypadPlus,
602 bind::SDL_SCANCODE_KP_ENTER => ScanCode::KeypadEnter,
603 bind::SDL_SCANCODE_KP_1 => ScanCode::Keypad1,
604 bind::SDL_SCANCODE_KP_2 => ScanCode::Keypad2,
605 bind::SDL_SCANCODE_KP_3 => ScanCode::Keypad3,
606 bind::SDL_SCANCODE_KP_4 => ScanCode::Keypad4,
607 bind::SDL_SCANCODE_KP_5 => ScanCode::Keypad5,
608 bind::SDL_SCANCODE_KP_6 => ScanCode::Keypad6,
609 bind::SDL_SCANCODE_KP_7 => ScanCode::Keypad7,
610 bind::SDL_SCANCODE_KP_8 => ScanCode::Keypad8,
611 bind::SDL_SCANCODE_KP_9 => ScanCode::Keypad9,
612 bind::SDL_SCANCODE_KP_0 => ScanCode::Keypad0,
613 bind::SDL_SCANCODE_KP_PERIOD => ScanCode::KeypadPeriod,
614 bind::SDL_SCANCODE_NONUSBACKSLASH => ScanCode::NonUsBackslash,
615 bind::SDL_SCANCODE_APPLICATION => ScanCode::Application,
616 bind::SDL_SCANCODE_POWER => ScanCode::Power,
617 bind::SDL_SCANCODE_KP_EQUALS => ScanCode::KeypadEquals,
618 bind::SDL_SCANCODE_F13 => ScanCode::F13,
619 bind::SDL_SCANCODE_F14 => ScanCode::F14,
620 bind::SDL_SCANCODE_F15 => ScanCode::F15,
621 bind::SDL_SCANCODE_F16 => ScanCode::F16,
622 bind::SDL_SCANCODE_F17 => ScanCode::F17,
623 bind::SDL_SCANCODE_F18 => ScanCode::F18,
624 bind::SDL_SCANCODE_F19 => ScanCode::F19,
625 bind::SDL_SCANCODE_F20 => ScanCode::F20,
626 bind::SDL_SCANCODE_F21 => ScanCode::F21,
627 bind::SDL_SCANCODE_F22 => ScanCode::F22,
628 bind::SDL_SCANCODE_F23 => ScanCode::F23,
629 bind::SDL_SCANCODE_F24 => ScanCode::F24,
630 bind::SDL_SCANCODE_EXECUTE => ScanCode::Execute,
631 bind::SDL_SCANCODE_HELP => ScanCode::Help,
632 bind::SDL_SCANCODE_MENU => ScanCode::Menu,
633 bind::SDL_SCANCODE_SELECT => ScanCode::Select,
634 bind::SDL_SCANCODE_STOP => ScanCode::Stop,
635 bind::SDL_SCANCODE_AGAIN => ScanCode::Again,
636 bind::SDL_SCANCODE_UNDO => ScanCode::Undo,
637 bind::SDL_SCANCODE_CUT => ScanCode::Cut,
638 bind::SDL_SCANCODE_COPY => ScanCode::Copy,
639 bind::SDL_SCANCODE_PASTE => ScanCode::Paste,
640 bind::SDL_SCANCODE_FIND => ScanCode::Find,
641 bind::SDL_SCANCODE_MUTE => ScanCode::Mute,
642 bind::SDL_SCANCODE_VOLUMEUP => ScanCode::VolumeUp,
643 bind::SDL_SCANCODE_VOLUMEDOWN => ScanCode::VolumeDown,
644 bind::SDL_SCANCODE_KP_COMMA => ScanCode::KeypadComma,
645 bind::SDL_SCANCODE_KP_EQUALSAS400 => ScanCode::KeypadEqualsAs400,
646 bind::SDL_SCANCODE_INTERNATIONAL1 => ScanCode::International1,
647 bind::SDL_SCANCODE_INTERNATIONAL2 => ScanCode::International2,
648 bind::SDL_SCANCODE_INTERNATIONAL3 => ScanCode::International3,
649 bind::SDL_SCANCODE_INTERNATIONAL4 => ScanCode::International4,
650 bind::SDL_SCANCODE_INTERNATIONAL5 => ScanCode::International5,
651 bind::SDL_SCANCODE_INTERNATIONAL6 => ScanCode::International6,
652 bind::SDL_SCANCODE_INTERNATIONAL7 => ScanCode::International7,
653 bind::SDL_SCANCODE_INTERNATIONAL8 => ScanCode::International8,
654 bind::SDL_SCANCODE_INTERNATIONAL9 => ScanCode::International9,
655 bind::SDL_SCANCODE_LANG1 => ScanCode::Lang1,
656 bind::SDL_SCANCODE_LANG2 => ScanCode::Lang2,
657 bind::SDL_SCANCODE_LANG3 => ScanCode::Lang3,
658 bind::SDL_SCANCODE_LANG4 => ScanCode::Lang4,
659 bind::SDL_SCANCODE_LANG5 => ScanCode::Lang5,
660 bind::SDL_SCANCODE_LANG6 => ScanCode::Lang6,
661 bind::SDL_SCANCODE_LANG7 => ScanCode::Lang7,
662 bind::SDL_SCANCODE_LANG8 => ScanCode::Lang8,
663 bind::SDL_SCANCODE_LANG9 => ScanCode::Lang9,
664 bind::SDL_SCANCODE_ALTERASE => ScanCode::AltErase,
665 bind::SDL_SCANCODE_SYSREQ => ScanCode::SysReq,
666 bind::SDL_SCANCODE_CANCEL => ScanCode::Cancel,
667 bind::SDL_SCANCODE_CLEAR => ScanCode::Clear,
668 bind::SDL_SCANCODE_PRIOR => ScanCode::Prior,
669 bind::SDL_SCANCODE_RETURN2 => ScanCode::Return2,
670 bind::SDL_SCANCODE_SEPARATOR => ScanCode::Separator,
671 bind::SDL_SCANCODE_OUT => ScanCode::Out,
672 bind::SDL_SCANCODE_OPER => ScanCode::Oper,
673 bind::SDL_SCANCODE_CLEARAGAIN => ScanCode::ClearAgain,
674 bind::SDL_SCANCODE_CRSEL => ScanCode::CrSel,
675 bind::SDL_SCANCODE_EXSEL => ScanCode::ExSel,
676 bind::SDL_SCANCODE_KP_00 => ScanCode::Keypad00,
677 bind::SDL_SCANCODE_KP_000 => ScanCode::Keypad000,
678 bind::SDL_SCANCODE_THOUSANDSSEPARATOR => ScanCode::ThousandsSeparator,
679 bind::SDL_SCANCODE_DECIMALSEPARATOR => ScanCode::DecimalSeparator,
680 bind::SDL_SCANCODE_CURRENCYUNIT => ScanCode::CurrencyUnit,
681 bind::SDL_SCANCODE_CURRENCYSUBUNIT => ScanCode::CurrencySubunit,
682 bind::SDL_SCANCODE_KP_LEFTPAREN => ScanCode::KeypadLeftParen,
683 bind::SDL_SCANCODE_KP_RIGHTPAREN => ScanCode::KeypadRightParen,
684 bind::SDL_SCANCODE_KP_LEFTBRACE => ScanCode::KeypadLeftBrace,
685 bind::SDL_SCANCODE_KP_RIGHTBRACE => ScanCode::KeypadRightBrace,
686 bind::SDL_SCANCODE_KP_TAB => ScanCode::KeypadTab,
687 bind::SDL_SCANCODE_KP_BACKSPACE => ScanCode::KeypadBackspace,
688 bind::SDL_SCANCODE_KP_A => ScanCode::KeypadA,
689 bind::SDL_SCANCODE_KP_B => ScanCode::KeypadB,
690 bind::SDL_SCANCODE_KP_C => ScanCode::KeypadC,
691 bind::SDL_SCANCODE_KP_D => ScanCode::KeypadD,
692 bind::SDL_SCANCODE_KP_E => ScanCode::KeypadE,
693 bind::SDL_SCANCODE_KP_F => ScanCode::KeypadF,
694 bind::SDL_SCANCODE_KP_XOR => ScanCode::KeypadXor,
695 bind::SDL_SCANCODE_KP_POWER => ScanCode::KeypadPower,
696 bind::SDL_SCANCODE_KP_PERCENT => ScanCode::KeypadPercent,
697 bind::SDL_SCANCODE_KP_LESS => ScanCode::KeypadLess,
698 bind::SDL_SCANCODE_KP_GREATER => ScanCode::KeypadGreater,
699 bind::SDL_SCANCODE_KP_AMPERSAND => ScanCode::KeypadAmpersand,
700 bind::SDL_SCANCODE_KP_DBLAMPERSAND => ScanCode::KeypadDblAmpersand,
701 bind::SDL_SCANCODE_KP_VERTICALBAR => ScanCode::KeypadVerticalBar,
702 bind::SDL_SCANCODE_KP_DBLVERTICALBAR => ScanCode::KeypadDblVerticalBar,
703 bind::SDL_SCANCODE_KP_COLON => ScanCode::KeypadColon,
704 bind::SDL_SCANCODE_KP_HASH => ScanCode::KeypadHash,
705 bind::SDL_SCANCODE_KP_SPACE => ScanCode::KeypadSpace,
706 bind::SDL_SCANCODE_KP_AT => ScanCode::KeypadAt,
707 bind::SDL_SCANCODE_KP_EXCLAM => ScanCode::KeypadExclam,
708 bind::SDL_SCANCODE_KP_MEMSTORE => ScanCode::KeypadMemStore,
709 bind::SDL_SCANCODE_KP_MEMRECALL => ScanCode::KeypadMemRecall,
710 bind::SDL_SCANCODE_KP_MEMCLEAR => ScanCode::KeypadMemClear,
711 bind::SDL_SCANCODE_KP_MEMADD => ScanCode::KeypadMemAdd,
712 bind::SDL_SCANCODE_KP_MEMSUBTRACT => ScanCode::KeypadMemSubtract,
713 bind::SDL_SCANCODE_KP_MEMMULTIPLY => ScanCode::KeypadMemMultiply,
714 bind::SDL_SCANCODE_KP_MEMDIVIDE => ScanCode::KeypadMemDivide,
715 bind::SDL_SCANCODE_KP_PLUSMINUS => ScanCode::KeypadPlusMinus,
716 bind::SDL_SCANCODE_KP_CLEAR => ScanCode::KeypadClear,
717 bind::SDL_SCANCODE_KP_CLEARENTRY => ScanCode::KeypadClearEntry,
718 bind::SDL_SCANCODE_KP_BINARY => ScanCode::KeypadBinary,
719 bind::SDL_SCANCODE_KP_OCTAL => ScanCode::KeypadOctal,
720 bind::SDL_SCANCODE_KP_DECIMAL => ScanCode::KeypadDecimal,
721 bind::SDL_SCANCODE_KP_HEXADECIMAL => ScanCode::KeypadHexadecimal,
722 bind::SDL_SCANCODE_LCTRL => ScanCode::LCtrl,
723 bind::SDL_SCANCODE_LSHIFT => ScanCode::LShift,
724 bind::SDL_SCANCODE_LALT => ScanCode::LAlt,
725 bind::SDL_SCANCODE_LGUI => ScanCode::LGui,
726 bind::SDL_SCANCODE_RCTRL => ScanCode::RCtrl,
727 bind::SDL_SCANCODE_RSHIFT => ScanCode::RShift,
728 bind::SDL_SCANCODE_RALT => ScanCode::RAlt,
729 bind::SDL_SCANCODE_RGUI => ScanCode::RGui,
730 bind::SDL_SCANCODE_MODE => ScanCode::Mode,
731 bind::SDL_SCANCODE_AUDIONEXT => ScanCode::AudioNext,
732 bind::SDL_SCANCODE_AUDIOPREV => ScanCode::AudioPrev,
733 bind::SDL_SCANCODE_AUDIOSTOP => ScanCode::AudioStop,
734 bind::SDL_SCANCODE_AUDIOPLAY => ScanCode::AudioPlay,
735 bind::SDL_SCANCODE_AUDIOMUTE => ScanCode::AudioMute,
736 bind::SDL_SCANCODE_MEDIASELECT => ScanCode::MediaSelect,
737 bind::SDL_SCANCODE_WWW => ScanCode::Www,
738 bind::SDL_SCANCODE_MAIL => ScanCode::Mail,
739 bind::SDL_SCANCODE_CALCULATOR => ScanCode::Calculator,
740 bind::SDL_SCANCODE_COMPUTER => ScanCode::Computer,
741 bind::SDL_SCANCODE_AC_SEARCH => ScanCode::ApplicationSearch,
742 bind::SDL_SCANCODE_AC_HOME => ScanCode::ApplicationHome,
743 bind::SDL_SCANCODE_AC_BACK => ScanCode::ApplicationBack,
744 bind::SDL_SCANCODE_AC_FORWARD => ScanCode::ApplicationForward,
745 bind::SDL_SCANCODE_AC_STOP => ScanCode::ApplicationStop,
746 bind::SDL_SCANCODE_AC_REFRESH => ScanCode::ApplicationRefresh,
747 bind::SDL_SCANCODE_AC_BOOKMARKS => ScanCode::ApplicationBookmarks,
748 bind::SDL_SCANCODE_BRIGHTNESSDOWN => ScanCode::BrightnessDown,
749 bind::SDL_SCANCODE_BRIGHTNESSUP => ScanCode::BrightnessUp,
750 bind::SDL_SCANCODE_DISPLAYSWITCH => ScanCode::DisplaySwitch,
751 bind::SDL_SCANCODE_KBDILLUMTOGGLE => ScanCode::KeyboardIllumToggle,
752 bind::SDL_SCANCODE_KBDILLUMDOWN => ScanCode::KeyboardIllumDown,
753 bind::SDL_SCANCODE_KBDILLUMUP => ScanCode::KeyboardIllumUp,
754 bind::SDL_SCANCODE_EJECT => ScanCode::Eject,
755 bind::SDL_SCANCODE_SLEEP => ScanCode::Sleep,
756 bind::SDL_SCANCODE_APP1 => ScanCode::App1,
757 bind::SDL_SCANCODE_APP2 => ScanCode::App2,
758 bind::SDL_SCANCODE_AUDIOREWIND => ScanCode::AudioRewind,
759 bind::SDL_SCANCODE_AUDIOFASTFORWARD => ScanCode::AudioFastForward,
760 _ => ScanCode::Unknown,
761 }
762 }
763}