1#![allow(missing_docs)]
4
5use std::ffi::{CStr, CString};
6
7use crate::{bind, EnumInt};
8
9use super::scan_code::ScanCode;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12#[non_exhaustive]
13pub enum KeyCode {
14 Unknown,
15 Return,
16 Escape,
17 Backspace,
18 Tab,
19 Space,
20 Exclaim,
21 Quotedbl,
22 Hash,
23 Percent,
24 Dollar,
25 Ampersand,
26 Quote,
27 Leftparen,
28 Rightparen,
29 Asterisk,
30 Plus,
31 Comma,
32 Minus,
33 Period,
34 Slash,
35 Num0,
36 Num1,
37 Num2,
38 Num3,
39 Num4,
40 Num5,
41 Num6,
42 Num7,
43 Num8,
44 Num9,
45 Colon,
46 Semicolon,
47 Less,
48 Equals,
49 Greater,
50 Question,
51 At,
52 LeftBracket,
53 Backslash,
54 RightBracket,
55 Caret,
56 Underscore,
57 Backquote,
58 A,
59 B,
60 C,
61 D,
62 E,
63 F,
64 G,
65 H,
66 I,
67 J,
68 K,
69 L,
70 M,
71 N,
72 O,
73 P,
74 Q,
75 R,
76 S,
77 T,
78 U,
79 V,
80 W,
81 X,
82 Y,
83 Z,
84 CapsLock,
85 F1,
86 F2,
87 F3,
88 F4,
89 F5,
90 F6,
91 F7,
92 F8,
93 F9,
94 F10,
95 F11,
96 F12,
97 PrintScreen,
98 ScrollLock,
99 Pause,
100 Insert,
101 Home,
102 PageUp,
103 Delete,
104 End,
105 PageDown,
106 Right,
107 Left,
108 Down,
109 Up,
110 NumLockClear,
111 KeypadDivide,
112 KeypadMultiply,
113 KeypadMinus,
114 KeypadPlus,
115 KeypadEnter,
116 Keypad1,
117 Keypad2,
118 Keypad3,
119 Keypad4,
120 Keypad5,
121 Keypad6,
122 Keypad7,
123 Keypad8,
124 Keypad9,
125 Keypad0,
126 KeypadPeriod,
127 Application,
128 Power,
129 KeypadEquals,
130 F13,
131 F14,
132 F15,
133 F16,
134 F17,
135 F18,
136 F19,
137 F20,
138 F21,
139 F22,
140 F23,
141 F24,
142 Execute,
143 Help,
144 Menu,
145 Select,
146 Stop,
147 Again,
148 Undo,
149 Cut,
150 Copy,
151 Paste,
152 Find,
153 Mute,
154 VolumeUp,
155 VolumeDown,
156 KeypadComma,
157 KeypadEqualsAs400,
158 Alterase,
159 SysReq,
160 Cancel,
161 Clear,
162 Prior,
163 Return2,
164 Separator,
165 Out,
166 Oper,
167 ClearAgain,
168 CrSel,
169 ExSel,
170 Keypad00,
171 Keypad000,
172 ThousandsSeparator,
173 DecimalSeparator,
174 CurrencyUnit,
175 CurrencySubunit,
176 KeypadLeftParen,
177 KeypadRightParen,
178 KeypadLeftBrace,
179 KeypadRightBrace,
180 KeypadTab,
181 KeypadBackspace,
182 KeypadA,
183 KeypadB,
184 KeypadC,
185 KeypadD,
186 KeypadE,
187 KeypadF,
188 KeypadXor,
189 KeypadPower,
190 KeypadPercent,
191 KeypadLess,
192 KeypadGreater,
193 KeypadAmpersand,
194 KeypadDblAmpersand,
195 KeypadVerticalBar,
196 KeypadDblverticalBar,
197 KeypadColon,
198 KeypadHash,
199 KeypadSpace,
200 KeypadAt,
201 KeypadExclam,
202 KeypadMemStore,
203 KeypadMemRecall,
204 KeypadMemClear,
205 KeypadMemAdd,
206 KeypadMemSubtract,
207 KeypadMemMultiply,
208 KeypadMemDivide,
209 KeypadPlusMinus,
210 KeypadClear,
211 KeypadClearEntry,
212 KeypadBinary,
213 KeypadOctal,
214 KeypadDecimal,
215 KeypadHexadecimal,
216 LCtrl,
217 LShift,
218 LAlt,
219 LGui,
220 RCtrl,
221 RShift,
222 RAlt,
223 RGui,
224 Mode,
225 AudioNext,
226 AudioPrev,
227 AudioStop,
228 AudioPlay,
229 AudioMute,
230 MediaSelect,
231 Www,
232 Mail,
233 Calculator,
234 Computer,
235 ApplicationSearch,
236 ApplicationHome,
237 ApplicationBack,
238 ApplicationForward,
239 ApplicationStop,
240 ApplicationRefresh,
241 ApplicationBookmarks,
242 BrightnessDown,
243 BrightnessUp,
244 DisplaySwitch,
245 KeyboardIllumToggle,
246 KeyboardIllumDown,
247 KeyboardIllumUp,
248 Eject,
249 Sleep,
250 App1,
251 App2,
252 AudioRewind,
253 AudioFastForward,
254}
255
256impl KeyCode {
257 #[must_use]
258 pub fn from_name(name: &str) -> Self {
259 let c_str = CString::new(name).expect("name must be a valid string");
260 unsafe { bind::SDL_GetKeyFromName(c_str.as_ptr()) }.into()
261 }
262
263 #[must_use]
264 pub fn name(&self) -> Option<String> {
265 let name: String = unsafe { CStr::from_ptr(bind::SDL_GetKeyName(self.as_raw())) }
266 .to_str()
267 .unwrap()
268 .into();
269 (!name.is_empty()).then(|| name)
270 }
271
272 pub(crate) fn as_raw(self) -> bind::SDL_Keycode {
273 (match self {
274 KeyCode::Unknown => bind::SDLK_UNKNOWN,
275 KeyCode::Return => bind::SDLK_RETURN,
276 KeyCode::Escape => bind::SDLK_ESCAPE,
277 KeyCode::Backspace => bind::SDLK_BACKSPACE,
278 KeyCode::Tab => bind::SDLK_TAB,
279 KeyCode::Space => bind::SDLK_SPACE,
280 KeyCode::Exclaim => bind::SDLK_EXCLAIM,
281 KeyCode::Quotedbl => bind::SDLK_QUOTEDBL,
282 KeyCode::Hash => bind::SDLK_HASH,
283 KeyCode::Percent => bind::SDLK_PERCENT,
284 KeyCode::Dollar => bind::SDLK_DOLLAR,
285 KeyCode::Ampersand => bind::SDLK_AMPERSAND,
286 KeyCode::Quote => bind::SDLK_QUOTE,
287 KeyCode::Leftparen => bind::SDLK_LEFTPAREN,
288 KeyCode::Rightparen => bind::SDLK_RIGHTPAREN,
289 KeyCode::Asterisk => bind::SDLK_ASTERISK,
290 KeyCode::Plus => bind::SDLK_PLUS,
291 KeyCode::Comma => bind::SDLK_COMMA,
292 KeyCode::Minus => bind::SDLK_MINUS,
293 KeyCode::Period => bind::SDLK_PERIOD,
294 KeyCode::Slash => bind::SDLK_SLASH,
295 KeyCode::Num0 => bind::SDLK_0,
296 KeyCode::Num1 => bind::SDLK_1,
297 KeyCode::Num2 => bind::SDLK_2,
298 KeyCode::Num3 => bind::SDLK_3,
299 KeyCode::Num4 => bind::SDLK_4,
300 KeyCode::Num5 => bind::SDLK_5,
301 KeyCode::Num6 => bind::SDLK_6,
302 KeyCode::Num7 => bind::SDLK_7,
303 KeyCode::Num8 => bind::SDLK_8,
304 KeyCode::Num9 => bind::SDLK_9,
305 KeyCode::Colon => bind::SDLK_COLON,
306 KeyCode::Semicolon => bind::SDLK_SEMICOLON,
307 KeyCode::Less => bind::SDLK_LESS,
308 KeyCode::Equals => bind::SDLK_EQUALS,
309 KeyCode::Greater => bind::SDLK_GREATER,
310 KeyCode::Question => bind::SDLK_QUESTION,
311 KeyCode::At => bind::SDLK_AT,
312 KeyCode::LeftBracket => bind::SDLK_LEFTBRACKET,
313 KeyCode::Backslash => bind::SDLK_BACKSLASH,
314 KeyCode::RightBracket => bind::SDLK_RIGHTBRACKET,
315 KeyCode::Caret => bind::SDLK_CARET,
316 KeyCode::Underscore => bind::SDLK_UNDERSCORE,
317 KeyCode::Backquote => bind::SDLK_BACKQUOTE,
318 KeyCode::A => bind::SDLK_a,
319 KeyCode::B => bind::SDLK_b,
320 KeyCode::C => bind::SDLK_c,
321 KeyCode::D => bind::SDLK_d,
322 KeyCode::E => bind::SDLK_e,
323 KeyCode::F => bind::SDLK_f,
324 KeyCode::G => bind::SDLK_g,
325 KeyCode::H => bind::SDLK_h,
326 KeyCode::I => bind::SDLK_i,
327 KeyCode::J => bind::SDLK_j,
328 KeyCode::K => bind::SDLK_k,
329 KeyCode::L => bind::SDLK_l,
330 KeyCode::M => bind::SDLK_m,
331 KeyCode::N => bind::SDLK_n,
332 KeyCode::O => bind::SDLK_o,
333 KeyCode::P => bind::SDLK_p,
334 KeyCode::Q => bind::SDLK_q,
335 KeyCode::R => bind::SDLK_r,
336 KeyCode::S => bind::SDLK_s,
337 KeyCode::T => bind::SDLK_t,
338 KeyCode::U => bind::SDLK_u,
339 KeyCode::V => bind::SDLK_v,
340 KeyCode::W => bind::SDLK_w,
341 KeyCode::X => bind::SDLK_x,
342 KeyCode::Y => bind::SDLK_y,
343 KeyCode::Z => bind::SDLK_z,
344 KeyCode::CapsLock => bind::SDLK_CAPSLOCK,
345 KeyCode::F1 => bind::SDLK_F1,
346 KeyCode::F2 => bind::SDLK_F2,
347 KeyCode::F3 => bind::SDLK_F3,
348 KeyCode::F4 => bind::SDLK_F4,
349 KeyCode::F5 => bind::SDLK_F5,
350 KeyCode::F6 => bind::SDLK_F6,
351 KeyCode::F7 => bind::SDLK_F7,
352 KeyCode::F8 => bind::SDLK_F8,
353 KeyCode::F9 => bind::SDLK_F9,
354 KeyCode::F10 => bind::SDLK_F10,
355 KeyCode::F11 => bind::SDLK_F11,
356 KeyCode::F12 => bind::SDLK_F12,
357 KeyCode::PrintScreen => bind::SDLK_PRINTSCREEN,
358 KeyCode::ScrollLock => bind::SDLK_SCROLLLOCK,
359 KeyCode::Pause => bind::SDLK_PAUSE,
360 KeyCode::Insert => bind::SDLK_INSERT,
361 KeyCode::Home => bind::SDLK_HOME,
362 KeyCode::PageUp => bind::SDLK_PAGEUP,
363 KeyCode::Delete => bind::SDLK_DELETE,
364 KeyCode::End => bind::SDLK_END,
365 KeyCode::PageDown => bind::SDLK_PAGEDOWN,
366 KeyCode::Right => bind::SDLK_RIGHT,
367 KeyCode::Left => bind::SDLK_LEFT,
368 KeyCode::Down => bind::SDLK_DOWN,
369 KeyCode::Up => bind::SDLK_UP,
370 KeyCode::NumLockClear => bind::SDLK_NUMLOCKCLEAR,
371 KeyCode::KeypadDivide => bind::SDLK_KP_DIVIDE,
372 KeyCode::KeypadMultiply => bind::SDLK_KP_MULTIPLY,
373 KeyCode::KeypadMinus => bind::SDLK_KP_MINUS,
374 KeyCode::KeypadPlus => bind::SDLK_KP_PLUS,
375 KeyCode::KeypadEnter => bind::SDLK_KP_ENTER,
376 KeyCode::Keypad1 => bind::SDLK_KP_1,
377 KeyCode::Keypad2 => bind::SDLK_KP_2,
378 KeyCode::Keypad3 => bind::SDLK_KP_3,
379 KeyCode::Keypad4 => bind::SDLK_KP_4,
380 KeyCode::Keypad5 => bind::SDLK_KP_5,
381 KeyCode::Keypad6 => bind::SDLK_KP_6,
382 KeyCode::Keypad7 => bind::SDLK_KP_7,
383 KeyCode::Keypad8 => bind::SDLK_KP_8,
384 KeyCode::Keypad9 => bind::SDLK_KP_9,
385 KeyCode::Keypad0 => bind::SDLK_KP_0,
386 KeyCode::KeypadPeriod => bind::SDLK_KP_PERIOD,
387 KeyCode::Application => bind::SDLK_APPLICATION,
388 KeyCode::Power => bind::SDLK_POWER,
389 KeyCode::KeypadEquals => bind::SDLK_KP_EQUALS,
390 KeyCode::F13 => bind::SDLK_F13,
391 KeyCode::F14 => bind::SDLK_F14,
392 KeyCode::F15 => bind::SDLK_F15,
393 KeyCode::F16 => bind::SDLK_F16,
394 KeyCode::F17 => bind::SDLK_F17,
395 KeyCode::F18 => bind::SDLK_F18,
396 KeyCode::F19 => bind::SDLK_F19,
397 KeyCode::F20 => bind::SDLK_F20,
398 KeyCode::F21 => bind::SDLK_F21,
399 KeyCode::F22 => bind::SDLK_F22,
400 KeyCode::F23 => bind::SDLK_F23,
401 KeyCode::F24 => bind::SDLK_F24,
402 KeyCode::Execute => bind::SDLK_EXECUTE,
403 KeyCode::Help => bind::SDLK_HELP,
404 KeyCode::Menu => bind::SDLK_MENU,
405 KeyCode::Select => bind::SDLK_SELECT,
406 KeyCode::Stop => bind::SDLK_STOP,
407 KeyCode::Again => bind::SDLK_AGAIN,
408 KeyCode::Undo => bind::SDLK_UNDO,
409 KeyCode::Cut => bind::SDLK_CUT,
410 KeyCode::Copy => bind::SDLK_COPY,
411 KeyCode::Paste => bind::SDLK_PASTE,
412 KeyCode::Find => bind::SDLK_FIND,
413 KeyCode::Mute => bind::SDLK_MUTE,
414 KeyCode::VolumeUp => bind::SDLK_VOLUMEUP,
415 KeyCode::VolumeDown => bind::SDLK_VOLUMEDOWN,
416 KeyCode::KeypadComma => bind::SDLK_KP_COMMA,
417 KeyCode::KeypadEqualsAs400 => bind::SDLK_KP_EQUALSAS400,
418 KeyCode::Alterase => bind::SDLK_ALTERASE,
419 KeyCode::SysReq => bind::SDLK_SYSREQ,
420 KeyCode::Cancel => bind::SDLK_CANCEL,
421 KeyCode::Clear => bind::SDLK_CLEAR,
422 KeyCode::Prior => bind::SDLK_PRIOR,
423 KeyCode::Return2 => bind::SDLK_RETURN2,
424 KeyCode::Separator => bind::SDLK_SEPARATOR,
425 KeyCode::Out => bind::SDLK_OUT,
426 KeyCode::Oper => bind::SDLK_OPER,
427 KeyCode::ClearAgain => bind::SDLK_CLEARAGAIN,
428 KeyCode::CrSel => bind::SDLK_CRSEL,
429 KeyCode::ExSel => bind::SDLK_EXSEL,
430 KeyCode::Keypad00 => bind::SDLK_KP_00,
431 KeyCode::Keypad000 => bind::SDLK_KP_000,
432 KeyCode::ThousandsSeparator => bind::SDLK_THOUSANDSSEPARATOR,
433 KeyCode::DecimalSeparator => bind::SDLK_DECIMALSEPARATOR,
434 KeyCode::CurrencyUnit => bind::SDLK_CURRENCYUNIT,
435 KeyCode::CurrencySubunit => bind::SDLK_CURRENCYSUBUNIT,
436 KeyCode::KeypadLeftParen => bind::SDLK_KP_LEFTPAREN,
437 KeyCode::KeypadRightParen => bind::SDLK_KP_RIGHTPAREN,
438 KeyCode::KeypadLeftBrace => bind::SDLK_KP_LEFTBRACE,
439 KeyCode::KeypadRightBrace => bind::SDLK_KP_RIGHTBRACE,
440 KeyCode::KeypadTab => bind::SDLK_KP_TAB,
441 KeyCode::KeypadBackspace => bind::SDLK_KP_BACKSPACE,
442 KeyCode::KeypadA => bind::SDLK_KP_A,
443 KeyCode::KeypadB => bind::SDLK_KP_B,
444 KeyCode::KeypadC => bind::SDLK_KP_C,
445 KeyCode::KeypadD => bind::SDLK_KP_D,
446 KeyCode::KeypadE => bind::SDLK_KP_E,
447 KeyCode::KeypadF => bind::SDLK_KP_F,
448 KeyCode::KeypadXor => bind::SDLK_KP_XOR,
449 KeyCode::KeypadPower => bind::SDLK_KP_POWER,
450 KeyCode::KeypadPercent => bind::SDLK_KP_PERCENT,
451 KeyCode::KeypadLess => bind::SDLK_KP_LESS,
452 KeyCode::KeypadGreater => bind::SDLK_KP_GREATER,
453 KeyCode::KeypadAmpersand => bind::SDLK_KP_AMPERSAND,
454 KeyCode::KeypadDblAmpersand => bind::SDLK_KP_DBLAMPERSAND,
455 KeyCode::KeypadVerticalBar => bind::SDLK_KP_VERTICALBAR,
456 KeyCode::KeypadDblverticalBar => bind::SDLK_KP_DBLVERTICALBAR,
457 KeyCode::KeypadColon => bind::SDLK_KP_COLON,
458 KeyCode::KeypadHash => bind::SDLK_KP_HASH,
459 KeyCode::KeypadSpace => bind::SDLK_KP_SPACE,
460 KeyCode::KeypadAt => bind::SDLK_KP_AT,
461 KeyCode::KeypadExclam => bind::SDLK_KP_EXCLAM,
462 KeyCode::KeypadMemStore => bind::SDLK_KP_MEMSTORE,
463 KeyCode::KeypadMemRecall => bind::SDLK_KP_MEMRECALL,
464 KeyCode::KeypadMemClear => bind::SDLK_KP_MEMCLEAR,
465 KeyCode::KeypadMemAdd => bind::SDLK_KP_MEMADD,
466 KeyCode::KeypadMemSubtract => bind::SDLK_KP_MEMSUBTRACT,
467 KeyCode::KeypadMemMultiply => bind::SDLK_KP_MEMMULTIPLY,
468 KeyCode::KeypadMemDivide => bind::SDLK_KP_MEMDIVIDE,
469 KeyCode::KeypadPlusMinus => bind::SDLK_KP_PLUSMINUS,
470 KeyCode::KeypadClear => bind::SDLK_KP_CLEAR,
471 KeyCode::KeypadClearEntry => bind::SDLK_KP_CLEARENTRY,
472 KeyCode::KeypadBinary => bind::SDLK_KP_BINARY,
473 KeyCode::KeypadOctal => bind::SDLK_KP_OCTAL,
474 KeyCode::KeypadDecimal => bind::SDLK_KP_DECIMAL,
475 KeyCode::KeypadHexadecimal => bind::SDLK_KP_HEXADECIMAL,
476 KeyCode::LCtrl => bind::SDLK_LCTRL,
477 KeyCode::LShift => bind::SDLK_LSHIFT,
478 KeyCode::LAlt => bind::SDLK_LALT,
479 KeyCode::LGui => bind::SDLK_LGUI,
480 KeyCode::RCtrl => bind::SDLK_RCTRL,
481 KeyCode::RShift => bind::SDLK_RSHIFT,
482 KeyCode::RAlt => bind::SDLK_RALT,
483 KeyCode::RGui => bind::SDLK_RGUI,
484 KeyCode::Mode => bind::SDLK_MODE,
485 KeyCode::AudioNext => bind::SDLK_AUDIONEXT,
486 KeyCode::AudioPrev => bind::SDLK_AUDIOPREV,
487 KeyCode::AudioStop => bind::SDLK_AUDIOSTOP,
488 KeyCode::AudioPlay => bind::SDLK_AUDIOPLAY,
489 KeyCode::AudioMute => bind::SDLK_AUDIOMUTE,
490 KeyCode::MediaSelect => bind::SDLK_MEDIASELECT,
491 KeyCode::Www => bind::SDLK_WWW,
492 KeyCode::Mail => bind::SDLK_MAIL,
493 KeyCode::Calculator => bind::SDLK_CALCULATOR,
494 KeyCode::Computer => bind::SDLK_COMPUTER,
495 KeyCode::ApplicationSearch => bind::SDLK_AC_SEARCH,
496 KeyCode::ApplicationHome => bind::SDLK_AC_HOME,
497 KeyCode::ApplicationBack => bind::SDLK_AC_BACK,
498 KeyCode::ApplicationForward => bind::SDLK_AC_FORWARD,
499 KeyCode::ApplicationStop => bind::SDLK_AC_STOP,
500 KeyCode::ApplicationRefresh => bind::SDLK_AC_REFRESH,
501 KeyCode::ApplicationBookmarks => bind::SDLK_AC_BOOKMARKS,
502 KeyCode::BrightnessDown => bind::SDLK_BRIGHTNESSDOWN,
503 KeyCode::BrightnessUp => bind::SDLK_BRIGHTNESSUP,
504 KeyCode::DisplaySwitch => bind::SDLK_DISPLAYSWITCH,
505 KeyCode::KeyboardIllumToggle => bind::SDLK_KBDILLUMTOGGLE,
506 KeyCode::KeyboardIllumDown => bind::SDLK_KBDILLUMDOWN,
507 KeyCode::KeyboardIllumUp => bind::SDLK_KBDILLUMUP,
508 KeyCode::Eject => bind::SDLK_EJECT,
509 KeyCode::Sleep => bind::SDLK_SLEEP,
510 KeyCode::App1 => bind::SDLK_APP1,
511 KeyCode::App2 => bind::SDLK_APP2,
512 KeyCode::AudioRewind => bind::SDLK_AUDIOREWIND,
513 KeyCode::AudioFastForward => bind::SDLK_AUDIOFASTFORWARD,
514 }) as bind::SDL_Keycode
515 }
516}
517
518impl From<ScanCode> for KeyCode {
519 fn from(scan_code: ScanCode) -> Self {
520 let raw = scan_code.as_raw();
521 unsafe { bind::SDL_GetKeyFromScancode(raw) }.into()
522 }
523}
524
525impl From<bind::SDL_Keycode> for KeyCode {
526 fn from(code: bind::SDL_Keycode) -> Self {
527 match code as EnumInt {
528 bind::SDLK_RETURN => KeyCode::Return,
529 bind::SDLK_ESCAPE => KeyCode::Escape,
530 bind::SDLK_BACKSPACE => KeyCode::Backspace,
531 bind::SDLK_TAB => KeyCode::Tab,
532 bind::SDLK_SPACE => KeyCode::Space,
533 bind::SDLK_EXCLAIM => KeyCode::Exclaim,
534 bind::SDLK_QUOTEDBL => KeyCode::Quotedbl,
535 bind::SDLK_HASH => KeyCode::Hash,
536 bind::SDLK_PERCENT => KeyCode::Percent,
537 bind::SDLK_DOLLAR => KeyCode::Dollar,
538 bind::SDLK_AMPERSAND => KeyCode::Ampersand,
539 bind::SDLK_QUOTE => KeyCode::Quote,
540 bind::SDLK_LEFTPAREN => KeyCode::Leftparen,
541 bind::SDLK_RIGHTPAREN => KeyCode::Rightparen,
542 bind::SDLK_ASTERISK => KeyCode::Asterisk,
543 bind::SDLK_PLUS => KeyCode::Plus,
544 bind::SDLK_COMMA => KeyCode::Comma,
545 bind::SDLK_MINUS => KeyCode::Minus,
546 bind::SDLK_PERIOD => KeyCode::Period,
547 bind::SDLK_SLASH => KeyCode::Slash,
548 bind::SDLK_0 => KeyCode::Num0,
549 bind::SDLK_1 => KeyCode::Num1,
550 bind::SDLK_2 => KeyCode::Num2,
551 bind::SDLK_3 => KeyCode::Num3,
552 bind::SDLK_4 => KeyCode::Num4,
553 bind::SDLK_5 => KeyCode::Num5,
554 bind::SDLK_6 => KeyCode::Num6,
555 bind::SDLK_7 => KeyCode::Num7,
556 bind::SDLK_8 => KeyCode::Num8,
557 bind::SDLK_9 => KeyCode::Num9,
558 bind::SDLK_COLON => KeyCode::Colon,
559 bind::SDLK_SEMICOLON => KeyCode::Semicolon,
560 bind::SDLK_LESS => KeyCode::Less,
561 bind::SDLK_EQUALS => KeyCode::Equals,
562 bind::SDLK_GREATER => KeyCode::Greater,
563 bind::SDLK_QUESTION => KeyCode::Question,
564 bind::SDLK_AT => KeyCode::At,
565 bind::SDLK_LEFTBRACKET => KeyCode::LeftBracket,
566 bind::SDLK_BACKSLASH => KeyCode::Backslash,
567 bind::SDLK_RIGHTBRACKET => KeyCode::RightBracket,
568 bind::SDLK_CARET => KeyCode::Caret,
569 bind::SDLK_UNDERSCORE => KeyCode::Underscore,
570 bind::SDLK_BACKQUOTE => KeyCode::Backquote,
571 bind::SDLK_a => KeyCode::A,
572 bind::SDLK_b => KeyCode::B,
573 bind::SDLK_c => KeyCode::C,
574 bind::SDLK_d => KeyCode::D,
575 bind::SDLK_e => KeyCode::E,
576 bind::SDLK_f => KeyCode::F,
577 bind::SDLK_g => KeyCode::G,
578 bind::SDLK_h => KeyCode::H,
579 bind::SDLK_i => KeyCode::I,
580 bind::SDLK_j => KeyCode::J,
581 bind::SDLK_k => KeyCode::K,
582 bind::SDLK_l => KeyCode::L,
583 bind::SDLK_m => KeyCode::M,
584 bind::SDLK_n => KeyCode::N,
585 bind::SDLK_o => KeyCode::O,
586 bind::SDLK_p => KeyCode::P,
587 bind::SDLK_q => KeyCode::Q,
588 bind::SDLK_r => KeyCode::R,
589 bind::SDLK_s => KeyCode::S,
590 bind::SDLK_t => KeyCode::T,
591 bind::SDLK_u => KeyCode::U,
592 bind::SDLK_v => KeyCode::V,
593 bind::SDLK_w => KeyCode::W,
594 bind::SDLK_x => KeyCode::X,
595 bind::SDLK_y => KeyCode::Y,
596 bind::SDLK_z => KeyCode::Z,
597 bind::SDLK_CAPSLOCK => KeyCode::CapsLock,
598 bind::SDLK_F1 => KeyCode::F1,
599 bind::SDLK_F2 => KeyCode::F2,
600 bind::SDLK_F3 => KeyCode::F3,
601 bind::SDLK_F4 => KeyCode::F4,
602 bind::SDLK_F5 => KeyCode::F5,
603 bind::SDLK_F6 => KeyCode::F6,
604 bind::SDLK_F7 => KeyCode::F7,
605 bind::SDLK_F8 => KeyCode::F8,
606 bind::SDLK_F9 => KeyCode::F9,
607 bind::SDLK_F10 => KeyCode::F10,
608 bind::SDLK_F11 => KeyCode::F11,
609 bind::SDLK_F12 => KeyCode::F12,
610 bind::SDLK_PRINTSCREEN => KeyCode::PrintScreen,
611 bind::SDLK_SCROLLLOCK => KeyCode::ScrollLock,
612 bind::SDLK_PAUSE => KeyCode::Pause,
613 bind::SDLK_INSERT => KeyCode::Insert,
614 bind::SDLK_HOME => KeyCode::Home,
615 bind::SDLK_PAGEUP => KeyCode::PageUp,
616 bind::SDLK_DELETE => KeyCode::Delete,
617 bind::SDLK_END => KeyCode::End,
618 bind::SDLK_PAGEDOWN => KeyCode::PageDown,
619 bind::SDLK_RIGHT => KeyCode::Right,
620 bind::SDLK_LEFT => KeyCode::Left,
621 bind::SDLK_DOWN => KeyCode::Down,
622 bind::SDLK_UP => KeyCode::Up,
623 bind::SDLK_NUMLOCKCLEAR => KeyCode::NumLockClear,
624 bind::SDLK_KP_DIVIDE => KeyCode::KeypadDivide,
625 bind::SDLK_KP_MULTIPLY => KeyCode::KeypadMultiply,
626 bind::SDLK_KP_MINUS => KeyCode::KeypadMinus,
627 bind::SDLK_KP_PLUS => KeyCode::KeypadPlus,
628 bind::SDLK_KP_ENTER => KeyCode::KeypadEnter,
629 bind::SDLK_KP_1 => KeyCode::Keypad1,
630 bind::SDLK_KP_2 => KeyCode::Keypad2,
631 bind::SDLK_KP_3 => KeyCode::Keypad3,
632 bind::SDLK_KP_4 => KeyCode::Keypad4,
633 bind::SDLK_KP_5 => KeyCode::Keypad5,
634 bind::SDLK_KP_6 => KeyCode::Keypad6,
635 bind::SDLK_KP_7 => KeyCode::Keypad7,
636 bind::SDLK_KP_8 => KeyCode::Keypad8,
637 bind::SDLK_KP_9 => KeyCode::Keypad9,
638 bind::SDLK_KP_0 => KeyCode::Keypad0,
639 bind::SDLK_KP_PERIOD => KeyCode::KeypadPeriod,
640 bind::SDLK_APPLICATION => KeyCode::Application,
641 bind::SDLK_POWER => KeyCode::Power,
642 bind::SDLK_KP_EQUALS => KeyCode::KeypadEquals,
643 bind::SDLK_F13 => KeyCode::F13,
644 bind::SDLK_F14 => KeyCode::F14,
645 bind::SDLK_F15 => KeyCode::F15,
646 bind::SDLK_F16 => KeyCode::F16,
647 bind::SDLK_F17 => KeyCode::F17,
648 bind::SDLK_F18 => KeyCode::F18,
649 bind::SDLK_F19 => KeyCode::F19,
650 bind::SDLK_F20 => KeyCode::F20,
651 bind::SDLK_F21 => KeyCode::F21,
652 bind::SDLK_F22 => KeyCode::F22,
653 bind::SDLK_F23 => KeyCode::F23,
654 bind::SDLK_F24 => KeyCode::F24,
655 bind::SDLK_EXECUTE => KeyCode::Execute,
656 bind::SDLK_HELP => KeyCode::Help,
657 bind::SDLK_MENU => KeyCode::Menu,
658 bind::SDLK_SELECT => KeyCode::Select,
659 bind::SDLK_STOP => KeyCode::Stop,
660 bind::SDLK_AGAIN => KeyCode::Again,
661 bind::SDLK_UNDO => KeyCode::Undo,
662 bind::SDLK_CUT => KeyCode::Cut,
663 bind::SDLK_COPY => KeyCode::Copy,
664 bind::SDLK_PASTE => KeyCode::Paste,
665 bind::SDLK_FIND => KeyCode::Find,
666 bind::SDLK_MUTE => KeyCode::Mute,
667 bind::SDLK_VOLUMEUP => KeyCode::VolumeUp,
668 bind::SDLK_VOLUMEDOWN => KeyCode::VolumeDown,
669 bind::SDLK_KP_COMMA => KeyCode::KeypadComma,
670 bind::SDLK_KP_EQUALSAS400 => KeyCode::KeypadEqualsAs400,
671 bind::SDLK_ALTERASE => KeyCode::Alterase,
672 bind::SDLK_SYSREQ => KeyCode::SysReq,
673 bind::SDLK_CANCEL => KeyCode::Cancel,
674 bind::SDLK_CLEAR => KeyCode::Clear,
675 bind::SDLK_PRIOR => KeyCode::Prior,
676 bind::SDLK_RETURN2 => KeyCode::Return2,
677 bind::SDLK_SEPARATOR => KeyCode::Separator,
678 bind::SDLK_OUT => KeyCode::Out,
679 bind::SDLK_OPER => KeyCode::Oper,
680 bind::SDLK_CLEARAGAIN => KeyCode::ClearAgain,
681 bind::SDLK_CRSEL => KeyCode::CrSel,
682 bind::SDLK_EXSEL => KeyCode::ExSel,
683 bind::SDLK_KP_00 => KeyCode::Keypad00,
684 bind::SDLK_KP_000 => KeyCode::Keypad000,
685 bind::SDLK_THOUSANDSSEPARATOR => KeyCode::ThousandsSeparator,
686 bind::SDLK_DECIMALSEPARATOR => KeyCode::DecimalSeparator,
687 bind::SDLK_CURRENCYUNIT => KeyCode::CurrencyUnit,
688 bind::SDLK_CURRENCYSUBUNIT => KeyCode::CurrencySubunit,
689 bind::SDLK_KP_LEFTPAREN => KeyCode::KeypadLeftParen,
690 bind::SDLK_KP_RIGHTPAREN => KeyCode::KeypadRightParen,
691 bind::SDLK_KP_LEFTBRACE => KeyCode::KeypadLeftBrace,
692 bind::SDLK_KP_RIGHTBRACE => KeyCode::KeypadRightBrace,
693 bind::SDLK_KP_TAB => KeyCode::KeypadTab,
694 bind::SDLK_KP_BACKSPACE => KeyCode::KeypadBackspace,
695 bind::SDLK_KP_A => KeyCode::KeypadA,
696 bind::SDLK_KP_B => KeyCode::KeypadB,
697 bind::SDLK_KP_C => KeyCode::KeypadC,
698 bind::SDLK_KP_D => KeyCode::KeypadD,
699 bind::SDLK_KP_E => KeyCode::KeypadE,
700 bind::SDLK_KP_F => KeyCode::KeypadF,
701 bind::SDLK_KP_XOR => KeyCode::KeypadXor,
702 bind::SDLK_KP_POWER => KeyCode::KeypadPower,
703 bind::SDLK_KP_PERCENT => KeyCode::KeypadPercent,
704 bind::SDLK_KP_LESS => KeyCode::KeypadLess,
705 bind::SDLK_KP_GREATER => KeyCode::KeypadGreater,
706 bind::SDLK_KP_AMPERSAND => KeyCode::KeypadAmpersand,
707 bind::SDLK_KP_DBLAMPERSAND => KeyCode::KeypadDblAmpersand,
708 bind::SDLK_KP_VERTICALBAR => KeyCode::KeypadVerticalBar,
709 bind::SDLK_KP_DBLVERTICALBAR => KeyCode::KeypadDblverticalBar,
710 bind::SDLK_KP_COLON => KeyCode::KeypadColon,
711 bind::SDLK_KP_HASH => KeyCode::KeypadHash,
712 bind::SDLK_KP_SPACE => KeyCode::KeypadSpace,
713 bind::SDLK_KP_AT => KeyCode::KeypadAt,
714 bind::SDLK_KP_EXCLAM => KeyCode::KeypadExclam,
715 bind::SDLK_KP_MEMSTORE => KeyCode::KeypadMemStore,
716 bind::SDLK_KP_MEMRECALL => KeyCode::KeypadMemRecall,
717 bind::SDLK_KP_MEMCLEAR => KeyCode::KeypadMemClear,
718 bind::SDLK_KP_MEMADD => KeyCode::KeypadMemAdd,
719 bind::SDLK_KP_MEMSUBTRACT => KeyCode::KeypadMemSubtract,
720 bind::SDLK_KP_MEMMULTIPLY => KeyCode::KeypadMemMultiply,
721 bind::SDLK_KP_MEMDIVIDE => KeyCode::KeypadMemDivide,
722 bind::SDLK_KP_PLUSMINUS => KeyCode::KeypadPlusMinus,
723 bind::SDLK_KP_CLEAR => KeyCode::KeypadClear,
724 bind::SDLK_KP_CLEARENTRY => KeyCode::KeypadClearEntry,
725 bind::SDLK_KP_BINARY => KeyCode::KeypadBinary,
726 bind::SDLK_KP_OCTAL => KeyCode::KeypadOctal,
727 bind::SDLK_KP_DECIMAL => KeyCode::KeypadDecimal,
728 bind::SDLK_KP_HEXADECIMAL => KeyCode::KeypadHexadecimal,
729 bind::SDLK_LCTRL => KeyCode::LCtrl,
730 bind::SDLK_LSHIFT => KeyCode::LShift,
731 bind::SDLK_LALT => KeyCode::LAlt,
732 bind::SDLK_LGUI => KeyCode::LGui,
733 bind::SDLK_RCTRL => KeyCode::RCtrl,
734 bind::SDLK_RSHIFT => KeyCode::RShift,
735 bind::SDLK_RALT => KeyCode::RAlt,
736 bind::SDLK_RGUI => KeyCode::RGui,
737 bind::SDLK_MODE => KeyCode::Mode,
738 bind::SDLK_AUDIONEXT => KeyCode::AudioNext,
739 bind::SDLK_AUDIOPREV => KeyCode::AudioPrev,
740 bind::SDLK_AUDIOSTOP => KeyCode::AudioStop,
741 bind::SDLK_AUDIOPLAY => KeyCode::AudioPlay,
742 bind::SDLK_AUDIOMUTE => KeyCode::AudioMute,
743 bind::SDLK_MEDIASELECT => KeyCode::MediaSelect,
744 bind::SDLK_WWW => KeyCode::Www,
745 bind::SDLK_MAIL => KeyCode::Mail,
746 bind::SDLK_CALCULATOR => KeyCode::Calculator,
747 bind::SDLK_COMPUTER => KeyCode::Computer,
748 bind::SDLK_AC_SEARCH => KeyCode::ApplicationSearch,
749 bind::SDLK_AC_HOME => KeyCode::ApplicationHome,
750 bind::SDLK_AC_BACK => KeyCode::ApplicationBack,
751 bind::SDLK_AC_FORWARD => KeyCode::ApplicationForward,
752 bind::SDLK_AC_STOP => KeyCode::ApplicationStop,
753 bind::SDLK_AC_REFRESH => KeyCode::ApplicationRefresh,
754 bind::SDLK_AC_BOOKMARKS => KeyCode::ApplicationBookmarks,
755 bind::SDLK_BRIGHTNESSDOWN => KeyCode::BrightnessDown,
756 bind::SDLK_BRIGHTNESSUP => KeyCode::BrightnessUp,
757 bind::SDLK_DISPLAYSWITCH => KeyCode::DisplaySwitch,
758 bind::SDLK_KBDILLUMTOGGLE => KeyCode::KeyboardIllumToggle,
759 bind::SDLK_KBDILLUMDOWN => KeyCode::KeyboardIllumDown,
760 bind::SDLK_KBDILLUMUP => KeyCode::KeyboardIllumUp,
761 bind::SDLK_EJECT => KeyCode::Eject,
762 bind::SDLK_SLEEP => KeyCode::Sleep,
763 bind::SDLK_APP1 => KeyCode::App1,
764 bind::SDLK_APP2 => KeyCode::App2,
765 bind::SDLK_AUDIOREWIND => KeyCode::AudioRewind,
766 bind::SDLK_AUDIOFASTFORWARD => KeyCode::AudioFastForward,
767 _ => KeyCode::Unknown,
768 }
769 }
770}