rich_sdl2_rust/event/keyboard/
scan_code.rs

1//! Actual scan codes corresponded to virtual key codes.
2
3#![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}