Skip to main content

libdqg/
types.rs

1#[derive(Clone, Copy)]
2pub struct Color {
3    r: f64,
4    g: f64,
5    b: f64,
6    a: f64,
7}
8
9impl Color {
10    /// Creates a new Color with the given RGBA values. Note that the values should be in the range [0.0, 1.0].
11    pub fn new(r: f64, g: f64, b: f64, a: f64) -> Self {
12        Self { r, g, b, a }
13    }
14
15    /// Creates a new Color from a hexadecimal value. The hex value should be in the format 0xRRGGBB.
16    pub fn from_hex(hex: u32) -> Self {
17        let r = ((hex >> 16) & 0xFF) as f64 / 255.0;
18        let g = ((hex >> 8) & 0xFF) as f64 / 255.0;
19        let b = (hex & 0xFF) as f64 / 255.0;
20        Self { r, g, b, a: 1.0 }
21    }
22
23    pub fn as_wgpu_color(&self) -> wgpu::Color {
24        wgpu::Color {
25            r: self.r,
26            g: self.g,
27            b: self.b,
28            a: self.a,
29        }
30    }
31}
32
33#[non_exhaustive]
34#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
35pub enum KeyCode {
36    /// <kbd>`</kbd> on a US keyboard. This is also called a backtick or grave.
37    /// This is the <kbd>半角</kbd>/<kbd>全角</kbd>/<kbd>漢字</kbd>
38    /// (hankaku/zenkaku/kanji) key on Japanese keyboards
39    Backquote,
40    /// Used for both the US <kbd>\\</kbd> (on the 101-key layout) and also for the key
41    /// located between the <kbd>"</kbd> and <kbd>Enter</kbd> keys on row C of the 102-,
42    /// 104- and 106-key layouts.
43    /// Labeled <kbd>#</kbd> on a UK (102) keyboard.
44    Backslash,
45    /// <kbd>[</kbd> on a US keyboard.
46    BracketLeft,
47    /// <kbd>]</kbd> on a US keyboard.
48    BracketRight,
49    /// <kbd>,</kbd> on a US keyboard.
50    Comma,
51    /// <kbd>0</kbd> on a US keyboard.
52    Digit0,
53    /// <kbd>1</kbd> on a US keyboard.
54    Digit1,
55    /// <kbd>2</kbd> on a US keyboard.
56    Digit2,
57    /// <kbd>3</kbd> on a US keyboard.
58    Digit3,
59    /// <kbd>4</kbd> on a US keyboard.
60    Digit4,
61    /// <kbd>5</kbd> on a US keyboard.
62    Digit5,
63    /// <kbd>6</kbd> on a US keyboard.
64    Digit6,
65    /// <kbd>7</kbd> on a US keyboard.
66    Digit7,
67    /// <kbd>8</kbd> on a US keyboard.
68    Digit8,
69    /// <kbd>9</kbd> on a US keyboard.
70    Digit9,
71    /// <kbd>=</kbd> on a US keyboard.
72    Equal,
73    /// Located between the left <kbd>Shift</kbd> and <kbd>Z</kbd> keys.
74    /// Labeled <kbd>\\</kbd> on a UK keyboard.
75    IntlBackslash,
76    /// Located between the <kbd>/</kbd> and right <kbd>Shift</kbd> keys.
77    /// Labeled <kbd>\\</kbd> (ro) on a Japanese keyboard.
78    IntlRo,
79    /// Located between the <kbd>=</kbd> and <kbd>Backspace</kbd> keys.
80    /// Labeled <kbd>¥</kbd> (yen) on a Japanese keyboard. <kbd>\\</kbd> on a
81    /// Russian keyboard.
82    IntlYen,
83    /// <kbd>a</kbd> on a US keyboard.
84    /// Labeled <kbd>q</kbd> on an AZERTY (e.g., French) keyboard.
85    KeyA,
86    /// <kbd>b</kbd> on a US keyboard.
87    KeyB,
88    /// <kbd>c</kbd> on a US keyboard.
89    KeyC,
90    /// <kbd>d</kbd> on a US keyboard.
91    KeyD,
92    /// <kbd>e</kbd> on a US keyboard.
93    KeyE,
94    /// <kbd>f</kbd> on a US keyboard.
95    KeyF,
96    /// <kbd>g</kbd> on a US keyboard.
97    KeyG,
98    /// <kbd>h</kbd> on a US keyboard.
99    KeyH,
100    /// <kbd>i</kbd> on a US keyboard.
101    KeyI,
102    /// <kbd>j</kbd> on a US keyboard.
103    KeyJ,
104    /// <kbd>k</kbd> on a US keyboard.
105    KeyK,
106    /// <kbd>l</kbd> on a US keyboard.
107    KeyL,
108    /// <kbd>m</kbd> on a US keyboard.
109    KeyM,
110    /// <kbd>n</kbd> on a US keyboard.
111    KeyN,
112    /// <kbd>o</kbd> on a US keyboard.
113    KeyO,
114    /// <kbd>p</kbd> on a US keyboard.
115    KeyP,
116    /// <kbd>q</kbd> on a US keyboard.
117    /// Labeled <kbd>a</kbd> on an AZERTY (e.g., French) keyboard.
118    KeyQ,
119    /// <kbd>r</kbd> on a US keyboard.
120    KeyR,
121    /// <kbd>s</kbd> on a US keyboard.
122    KeyS,
123    /// <kbd>t</kbd> on a US keyboard.
124    KeyT,
125    /// <kbd>u</kbd> on a US keyboard.
126    KeyU,
127    /// <kbd>v</kbd> on a US keyboard.
128    KeyV,
129    /// <kbd>w</kbd> on a US keyboard.
130    /// Labeled <kbd>z</kbd> on an AZERTY (e.g., French) keyboard.
131    KeyW,
132    /// <kbd>x</kbd> on a US keyboard.
133    KeyX,
134    /// <kbd>y</kbd> on a US keyboard.
135    /// Labeled <kbd>z</kbd> on a QWERTZ (e.g., German) keyboard.
136    KeyY,
137    /// <kbd>z</kbd> on a US keyboard.
138    /// Labeled <kbd>w</kbd> on an AZERTY (e.g., French) keyboard, and <kbd>y</kbd> on a
139    /// QWERTZ (e.g., German) keyboard.
140    KeyZ,
141    /// <kbd>-</kbd> on a US keyboard.
142    Minus,
143    /// <kbd>.</kbd> on a US keyboard.
144    Period,
145    /// <kbd>'</kbd> on a US keyboard.
146    Quote,
147    /// <kbd>;</kbd> on a US keyboard.
148    Semicolon,
149    /// <kbd>/</kbd> on a US keyboard.
150    Slash,
151    /// <kbd>Alt</kbd>, <kbd>Option</kbd>, or <kbd>⌥</kbd>.
152    AltLeft,
153    /// <kbd>Alt</kbd>, <kbd>Option</kbd>, or <kbd>⌥</kbd>.
154    /// This is labeled <kbd>AltGr</kbd> on many keyboard layouts.
155    AltRight,
156    /// <kbd>Backspace</kbd> or <kbd>⌫</kbd>.
157    /// Labeled <kbd>Delete</kbd> on Apple keyboards.
158    Backspace,
159    /// <kbd>CapsLock</kbd> or <kbd>⇪</kbd>
160    CapsLock,
161    /// The application context menu key, which is typically found between the right
162    /// <kbd>Super</kbd> key and the right <kbd>Control</kbd> key.
163    ContextMenu,
164    /// <kbd>Control</kbd> or <kbd>⌃</kbd>
165    ControlLeft,
166    /// <kbd>Control</kbd> or <kbd>⌃</kbd>
167    ControlRight,
168    /// <kbd>Enter</kbd> or <kbd>↵</kbd>. Labeled <kbd>Return</kbd> on Apple keyboards.
169    Enter,
170    /// The Windows, <kbd>⌘</kbd>, <kbd>Command</kbd>, or other OS symbol key.
171    SuperLeft,
172    /// The Windows, <kbd>⌘</kbd>, <kbd>Command</kbd>, or other OS symbol key.
173    SuperRight,
174    /// <kbd>Shift</kbd> or <kbd>⇧</kbd>
175    ShiftLeft,
176    /// <kbd>Shift</kbd> or <kbd>⇧</kbd>
177    ShiftRight,
178    /// <kbd> </kbd> (space)
179    Space,
180    /// <kbd>Tab</kbd> or <kbd>⇥</kbd>
181    Tab,
182    /// Japanese: <kbd>変</kbd> (henkan)
183    Convert,
184    /// Japanese: <kbd>カタカナ</kbd>/<kbd>ひらがな</kbd>/<kbd>ローマ字</kbd>
185    /// (katakana/hiragana/romaji)
186    KanaMode,
187    /// Korean: HangulMode <kbd>한/영</kbd> (han/yeong)
188    ///
189    /// Japanese (Mac keyboard): <kbd>か</kbd> (kana)
190    Lang1,
191    /// Korean: Hanja <kbd>한</kbd> (hanja)
192    ///
193    /// Japanese (Mac keyboard): <kbd>英</kbd> (eisu)
194    Lang2,
195    /// Japanese (word-processing keyboard): Katakana
196    Lang3,
197    /// Japanese (word-processing keyboard): Hiragana
198    Lang4,
199    /// Japanese (word-processing keyboard): Zenkaku/Hankaku
200    Lang5,
201    /// Japanese: <kbd>無変換</kbd> (muhenkan)
202    NonConvert,
203    /// <kbd>⌦</kbd>. The forward delete key.
204    /// Note that on Apple keyboards, the key labelled <kbd>Delete</kbd> on the main part of
205    /// the keyboard is encoded as [`Backspace`].
206    ///
207    /// [`Backspace`]: Self::Backspace
208    Delete,
209    /// <kbd>Page Down</kbd>, <kbd>End</kbd>, or <kbd>↘</kbd>
210    End,
211    /// <kbd>Help</kbd>. Not present on standard PC keyboards.
212    Help,
213    /// <kbd>Home</kbd> or <kbd>↖</kbd>
214    Home,
215    /// <kbd>Insert</kbd> or <kbd>Ins</kbd>. Not present on Apple keyboards.
216    Insert,
217    /// <kbd>Page Down</kbd>, <kbd>PgDn</kbd>, or <kbd>⇟</kbd>
218    PageDown,
219    /// <kbd>Page Up</kbd>, <kbd>PgUp</kbd>, or <kbd>⇞</kbd>
220    PageUp,
221    /// <kbd>↓</kbd>
222    ArrowDown,
223    /// <kbd>←</kbd>
224    ArrowLeft,
225    /// <kbd>→</kbd>
226    ArrowRight,
227    /// <kbd>↑</kbd>
228    ArrowUp,
229    /// On the Mac, this is used for the numpad <kbd>Clear</kbd> key.
230    NumLock,
231    /// <kbd>0 Ins</kbd> on a keyboard. <kbd>0</kbd> on a phone or remote control
232    Numpad0,
233    /// <kbd>1 End</kbd> on a keyboard. <kbd>1</kbd> or <kbd>1 QZ</kbd> on a phone or remote
234    /// control
235    Numpad1,
236    /// <kbd>2 ↓</kbd> on a keyboard. <kbd>2 ABC</kbd> on a phone or remote control
237    Numpad2,
238    /// <kbd>3 PgDn</kbd> on a keyboard. <kbd>3 DEF</kbd> on a phone or remote control
239    Numpad3,
240    /// <kbd>4 ←</kbd> on a keyboard. <kbd>4 GHI</kbd> on a phone or remote control
241    Numpad4,
242    /// <kbd>5</kbd> on a keyboard. <kbd>5 JKL</kbd> on a phone or remote control
243    Numpad5,
244    /// <kbd>6 →</kbd> on a keyboard. <kbd>6 MNO</kbd> on a phone or remote control
245    Numpad6,
246    /// <kbd>7 Home</kbd> on a keyboard. <kbd>7 PQRS</kbd> or <kbd>7 PRS</kbd> on a phone
247    /// or remote control
248    Numpad7,
249    /// <kbd>8 ↑</kbd> on a keyboard. <kbd>8 TUV</kbd> on a phone or remote control
250    Numpad8,
251    /// <kbd>9 PgUp</kbd> on a keyboard. <kbd>9 WXYZ</kbd> or <kbd>9 WXY</kbd> on a phone
252    /// or remote control
253    Numpad9,
254    /// <kbd>+</kbd>
255    NumpadAdd,
256    /// Found on the Microsoft Natural Keyboard.
257    NumpadBackspace,
258    /// <kbd>C</kbd> or <kbd>A</kbd> (All Clear). Also for use with numpads that have a
259    /// <kbd>Clear</kbd> key that is separate from the <kbd>NumLock</kbd> key. On the Mac, the
260    /// numpad <kbd>Clear</kbd> key is encoded as [`NumLock`].
261    ///
262    /// [`NumLock`]: Self::NumLock
263    NumpadClear,
264    /// <kbd>C</kbd> (Clear Entry)
265    NumpadClearEntry,
266    /// <kbd>,</kbd> (thousands separator). For locales where the thousands separator
267    /// is a "." (e.g., Brazil), this key may generate a <kbd>.</kbd>.
268    NumpadComma,
269    /// <kbd>. Del</kbd>. For locales where the decimal separator is "," (e.g.,
270    /// Brazil), this key may generate a <kbd>,</kbd>.
271    NumpadDecimal,
272    /// <kbd>/</kbd>
273    NumpadDivide,
274    NumpadEnter,
275    /// <kbd>=</kbd>
276    NumpadEqual,
277    /// <kbd>#</kbd> on a phone or remote control device. This key is typically found
278    /// below the <kbd>9</kbd> key and to the right of the <kbd>0</kbd> key.
279    NumpadHash,
280    /// <kbd>M</kbd> Add current entry to the value stored in memory.
281    NumpadMemoryAdd,
282    /// <kbd>M</kbd> Clear the value stored in memory.
283    NumpadMemoryClear,
284    /// <kbd>M</kbd> Replace the current entry with the value stored in memory.
285    NumpadMemoryRecall,
286    /// <kbd>M</kbd> Replace the value stored in memory with the current entry.
287    NumpadMemoryStore,
288    /// <kbd>M</kbd> Subtract current entry from the value stored in memory.
289    NumpadMemorySubtract,
290    /// <kbd>*</kbd> on a keyboard. For use with numpads that provide mathematical
291    /// operations (<kbd>+</kbd>, <kbd>-</kbd> <kbd>*</kbd> and <kbd>/</kbd>).
292    ///
293    /// Use `NumpadStar` for the <kbd>*</kbd> key on phones and remote controls.
294    NumpadMultiply,
295    /// <kbd>(</kbd> Found on the Microsoft Natural Keyboard.
296    NumpadParenLeft,
297    /// <kbd>)</kbd> Found on the Microsoft Natural Keyboard.
298    NumpadParenRight,
299    /// <kbd>*</kbd> on a phone or remote control device.
300    ///
301    /// This key is typically found below the <kbd>7</kbd> key and to the left of
302    /// the <kbd>0</kbd> key.
303    ///
304    /// Use <kbd>"NumpadMultiply"</kbd> for the <kbd>*</kbd> key on
305    /// numeric keypads.
306    NumpadStar,
307    /// <kbd>-</kbd>
308    NumpadSubtract,
309    /// <kbd>Esc</kbd> or <kbd>⎋</kbd>
310    Escape,
311    /// <kbd>Fn</kbd> This is typically a hardware key that does not generate a separate code.
312    Fn,
313    /// <kbd>FLock</kbd> or <kbd>FnLock</kbd>. Function Lock key. Found on the Microsoft
314    /// Natural Keyboard.
315    FnLock,
316    /// <kbd>PrtScr SysRq</kbd> or <kbd>Print Screen</kbd>
317    PrintScreen,
318    /// <kbd>Scroll Lock</kbd>
319    ScrollLock,
320    /// <kbd>Pause Break</kbd>
321    Pause,
322    /// Some laptops place this key to the left of the <kbd>↑</kbd> key.
323    ///
324    /// This also the "back" button (triangle) on Android.
325    BrowserBack,
326    BrowserFavorites,
327    /// Some laptops place this key to the right of the <kbd>↑</kbd> key.
328    BrowserForward,
329    /// The "home" button on Android.
330    BrowserHome,
331    BrowserRefresh,
332    BrowserSearch,
333    BrowserStop,
334    /// <kbd>Eject</kbd> or <kbd>⏏</kbd>. This key is placed in the function section on some Apple
335    /// keyboards.
336    Eject,
337    /// Sometimes labelled <kbd>My Computer</kbd> on the keyboard
338    LaunchApp1,
339    /// Sometimes labelled <kbd>Calculator</kbd> on the keyboard
340    LaunchApp2,
341    LaunchMail,
342    MediaPlayPause,
343    MediaSelect,
344    MediaStop,
345    MediaTrackNext,
346    MediaTrackPrevious,
347    /// This key is placed in the function section on some Apple keyboards, replacing the
348    /// <kbd>Eject</kbd> key.
349    Power,
350    Sleep,
351    AudioVolumeDown,
352    AudioVolumeMute,
353    AudioVolumeUp,
354    WakeUp,
355    // Legacy modifier key. Also called "Super" in certain places.
356    Meta,
357    // Legacy modifier key.
358    Hyper,
359    Turbo,
360    Abort,
361    Resume,
362    Suspend,
363    /// Found on Sun’s USB keyboard.
364    Again,
365    /// Found on Sun’s USB keyboard.
366    Copy,
367    /// Found on Sun’s USB keyboard.
368    Cut,
369    /// Found on Sun’s USB keyboard.
370    Find,
371    /// Found on Sun’s USB keyboard.
372    Open,
373    /// Found on Sun’s USB keyboard.
374    Paste,
375    /// Found on Sun’s USB keyboard.
376    Props,
377    /// Found on Sun’s USB keyboard.
378    Select,
379    /// Found on Sun’s USB keyboard.
380    Undo,
381    /// Use for dedicated <kbd>ひらがな</kbd> key found on some Japanese word processing keyboards.
382    Hiragana,
383    /// Use for dedicated <kbd>カタカナ</kbd> key found on some Japanese word processing keyboards.
384    Katakana,
385    /// General-purpose function key.
386    /// Usually found at the top of the keyboard.
387    F1,
388    /// General-purpose function key.
389    /// Usually found at the top of the keyboard.
390    F2,
391    /// General-purpose function key.
392    /// Usually found at the top of the keyboard.
393    F3,
394    /// General-purpose function key.
395    /// Usually found at the top of the keyboard.
396    F4,
397    /// General-purpose function key.
398    /// Usually found at the top of the keyboard.
399    F5,
400    /// General-purpose function key.
401    /// Usually found at the top of the keyboard.
402    F6,
403    /// General-purpose function key.
404    /// Usually found at the top of the keyboard.
405    F7,
406    /// General-purpose function key.
407    /// Usually found at the top of the keyboard.
408    F8,
409    /// General-purpose function key.
410    /// Usually found at the top of the keyboard.
411    F9,
412    /// General-purpose function key.
413    /// Usually found at the top of the keyboard.
414    F10,
415    /// General-purpose function key.
416    /// Usually found at the top of the keyboard.
417    F11,
418    /// General-purpose function key.
419    /// Usually found at the top of the keyboard.
420    F12,
421    /// General-purpose function key.
422    /// Usually found at the top of the keyboard.
423    F13,
424    /// General-purpose function key.
425    /// Usually found at the top of the keyboard.
426    F14,
427    /// General-purpose function key.
428    /// Usually found at the top of the keyboard.
429    F15,
430    /// General-purpose function key.
431    /// Usually found at the top of the keyboard.
432    F16,
433    /// General-purpose function key.
434    /// Usually found at the top of the keyboard.
435    F17,
436    /// General-purpose function key.
437    /// Usually found at the top of the keyboard.
438    F18,
439    /// General-purpose function key.
440    /// Usually found at the top of the keyboard.
441    F19,
442    /// General-purpose function key.
443    /// Usually found at the top of the keyboard.
444    F20,
445    /// General-purpose function key.
446    /// Usually found at the top of the keyboard.
447    F21,
448    /// General-purpose function key.
449    /// Usually found at the top of the keyboard.
450    F22,
451    /// General-purpose function key.
452    /// Usually found at the top of the keyboard.
453    F23,
454    /// General-purpose function key.
455    /// Usually found at the top of the keyboard.
456    F24,
457    /// General-purpose function key.
458    F25,
459    /// General-purpose function key.
460    F26,
461    /// General-purpose function key.
462    F27,
463    /// General-purpose function key.
464    F28,
465    /// General-purpose function key.
466    F29,
467    /// General-purpose function key.
468    F30,
469    /// General-purpose function key.
470    F31,
471    /// General-purpose function key.
472    F32,
473    /// General-purpose function key.
474    F33,
475    /// General-purpose function key.
476    F34,
477    /// General-purpose function key.
478    F35,
479}
480
481impl KeyCode {
482    pub fn from_winit_keycode(keycode: winit::keyboard::KeyCode) -> Option<Self> {
483        match keycode {
484            winit::keyboard::KeyCode::Backquote => Some(Self::Backquote),
485            winit::keyboard::KeyCode::Backslash => Some(Self::Backslash),
486            winit::keyboard::KeyCode::BracketLeft => Some(Self::BracketLeft),
487            winit::keyboard::KeyCode::BracketRight => Some(Self::BracketRight),
488            winit::keyboard::KeyCode::Comma => Some(Self::Comma),
489            winit::keyboard::KeyCode::Digit0 => Some(Self::Digit0),
490            winit::keyboard::KeyCode::Digit1 => Some(Self::Digit1),
491            winit::keyboard::KeyCode::Digit2 => Some(Self::Digit2),
492            winit::keyboard::KeyCode::Digit3 => Some(Self::Digit3),
493            winit::keyboard::KeyCode::Digit4 => Some(Self::Digit4),
494            winit::keyboard::KeyCode::Digit5 => Some(Self::Digit5),
495            winit::keyboard::KeyCode::Digit6 => Some(Self::Digit6),
496            winit::keyboard::KeyCode::Digit7 => Some(Self::Digit7),
497            winit::keyboard::KeyCode::Digit8 => Some(Self::Digit8),
498            winit::keyboard::KeyCode::Digit9 => Some(Self::Digit9),
499            winit::keyboard::KeyCode::Equal => Some(Self::Equal),
500            winit::keyboard::KeyCode::IntlBackslash => Some(Self::IntlBackslash),
501            winit::keyboard::KeyCode::IntlRo => Some(Self::IntlRo),
502            winit::keyboard::KeyCode::IntlYen => Some(Self::IntlYen),
503            winit::keyboard::KeyCode::KeyA => Some(Self::KeyA),
504            winit::keyboard::KeyCode::KeyB => Some(Self::KeyB),
505            winit::keyboard::KeyCode::KeyC => Some(Self::KeyC),
506            winit::keyboard::KeyCode::KeyD => Some(Self::KeyD),
507            winit::keyboard::KeyCode::KeyE => Some(Self::KeyE),
508            winit::keyboard::KeyCode::KeyF => Some(Self::KeyF),
509            winit::keyboard::KeyCode::KeyG => Some(Self::KeyG),
510            winit::keyboard::KeyCode::KeyH => Some(Self::KeyH),
511            winit::keyboard::KeyCode::KeyI => Some(Self::KeyI),
512            winit::keyboard::KeyCode::KeyJ => Some(Self::KeyJ),
513            winit::keyboard::KeyCode::KeyK => Some(Self::KeyK),
514            winit::keyboard::KeyCode::KeyL => Some(Self::KeyL),
515            winit::keyboard::KeyCode::KeyM => Some(Self::KeyM),
516            winit::keyboard::KeyCode::KeyN => Some(Self::KeyN),
517            winit::keyboard::KeyCode::KeyO => Some(Self::KeyO),
518            winit::keyboard::KeyCode::KeyP => Some(Self::KeyP),
519            winit::keyboard::KeyCode::KeyQ => Some(Self::KeyQ),
520            winit::keyboard::KeyCode::KeyR => Some(Self::KeyR),
521            winit::keyboard::KeyCode::KeyS => Some(Self::KeyS),
522            winit::keyboard::KeyCode::KeyT => Some(Self::KeyT),
523            winit::keyboard::KeyCode::KeyU => Some(Self::KeyU),
524            winit::keyboard::KeyCode::KeyV => Some(Self::KeyV),
525            winit::keyboard::KeyCode::KeyW => Some(Self::KeyW),
526            winit::keyboard::KeyCode::KeyX => Some(Self::KeyX),
527            winit::keyboard::KeyCode::KeyY => Some(Self::KeyY),
528            winit::keyboard::KeyCode::KeyZ => Some(Self::KeyZ),
529            winit::keyboard::KeyCode::Minus => Some(Self::Minus),
530            winit::keyboard::KeyCode::Period => Some(Self::Period),
531            winit::keyboard::KeyCode::Quote => Some(Self::Quote),
532            winit::keyboard::KeyCode::Semicolon => Some(Self::Semicolon),
533            winit::keyboard::KeyCode::Slash => Some(Self::Slash),
534            winit::keyboard::KeyCode::AltLeft => Some(Self::AltLeft),
535            winit::keyboard::KeyCode::AltRight => Some(Self::AltRight),
536            winit::keyboard::KeyCode::Backspace => Some(Self::Backspace),
537            winit::keyboard::KeyCode::CapsLock => Some(Self::CapsLock),
538            winit::keyboard::KeyCode::ContextMenu => Some(Self::ContextMenu),
539            winit::keyboard::KeyCode::ControlLeft => Some(Self::ControlLeft),
540            winit::keyboard::KeyCode::ControlRight => Some(Self::ControlRight),
541            winit::keyboard::KeyCode::Enter => Some(Self::Enter),
542            winit::keyboard::KeyCode::SuperLeft => Some(Self::SuperLeft),
543            winit::keyboard::KeyCode::SuperRight => Some(Self::SuperRight),
544            winit::keyboard::KeyCode::ShiftLeft => Some(Self::ShiftLeft),
545            winit::keyboard::KeyCode::ShiftRight => Some(Self::ShiftRight),
546            winit::keyboard::KeyCode::Space => Some(Self::Space),
547            winit::keyboard::KeyCode::Tab => Some(Self::Tab),
548            winit::keyboard::KeyCode::Convert => Some(Self::Convert),
549            winit::keyboard::KeyCode::KanaMode => Some(Self::KanaMode),
550            winit::keyboard::KeyCode::Lang1 => Some(Self::Lang1),
551            winit::keyboard::KeyCode::Lang2 => Some(Self::Lang2),
552            winit::keyboard::KeyCode::Lang3 => Some(Self::Lang3),
553            winit::keyboard::KeyCode::Lang4 => Some(Self::Lang4),
554            winit::keyboard::KeyCode::Lang5 => Some(Self::Lang5),
555            winit::keyboard::KeyCode::NonConvert => Some(Self::NonConvert),
556            winit::keyboard::KeyCode::Delete => Some(Self::Delete),
557            winit::keyboard::KeyCode::End => Some(Self::End),
558            winit::keyboard::KeyCode::Help => Some(Self::Help),
559            winit::keyboard::KeyCode::Home => Some(Self::Home),
560            winit::keyboard::KeyCode::Insert => Some(Self::Insert),
561            winit::keyboard::KeyCode::PageDown => Some(Self::PageDown),
562            winit::keyboard::KeyCode::PageUp => Some(Self::PageUp),
563            winit::keyboard::KeyCode::ArrowDown => Some(Self::ArrowDown),
564            winit::keyboard::KeyCode::ArrowLeft => Some(Self::ArrowLeft),
565            winit::keyboard::KeyCode::ArrowRight => Some(Self::ArrowRight),
566            winit::keyboard::KeyCode::ArrowUp => Some(Self::ArrowUp),
567            winit::keyboard::KeyCode::NumLock => Some(Self::NumLock),
568            winit::keyboard::KeyCode::Numpad0 => Some(Self::Numpad0),
569            winit::keyboard::KeyCode::Numpad1 => Some(Self::Numpad1),
570            winit::keyboard::KeyCode::Numpad2 => Some(Self::Numpad2),
571            winit::keyboard::KeyCode::Numpad3 => Some(Self::Numpad3),
572            winit::keyboard::KeyCode::Numpad4 => Some(Self::Numpad4),
573            winit::keyboard::KeyCode::Numpad5 => Some(Self::Numpad5),
574            winit::keyboard::KeyCode::Numpad6 => Some(Self::Numpad6),
575            winit::keyboard::KeyCode::Numpad7 => Some(Self::Numpad7),
576            winit::keyboard::KeyCode::Numpad8 => Some(Self::Numpad8),
577            winit::keyboard::KeyCode::Numpad9 => Some(Self::Numpad9),
578            winit::keyboard::KeyCode::NumpadAdd => Some(Self::NumpadAdd),
579            winit::keyboard::KeyCode::NumpadBackspace => Some(Self::NumpadBackspace),
580            winit::keyboard::KeyCode::NumpadClear => Some(Self::NumpadClear),
581            winit::keyboard::KeyCode::NumpadClearEntry => Some(Self::NumpadClearEntry),
582            winit::keyboard::KeyCode::NumpadComma => Some(Self::NumpadComma),
583            winit::keyboard::KeyCode::NumpadDecimal => Some(Self::NumpadDecimal),
584            winit::keyboard::KeyCode::NumpadDivide => Some(Self::NumpadDivide),
585            winit::keyboard::KeyCode::NumpadEnter => Some(Self::NumpadEnter),
586            winit::keyboard::KeyCode::NumpadEqual => Some(Self::NumpadEqual),
587            winit::keyboard::KeyCode::NumpadHash => Some(Self::NumpadHash),
588            winit::keyboard::KeyCode::NumpadMemoryAdd => Some(Self::NumpadMemoryAdd),
589            winit::keyboard::KeyCode::NumpadMemoryClear => Some(Self::NumpadMemoryClear),
590            winit::keyboard::KeyCode::NumpadMemoryRecall => Some(Self::NumpadMemoryRecall),
591            winit::keyboard::KeyCode::NumpadMemoryStore => Some(Self::NumpadMemoryStore),
592            winit::keyboard::KeyCode::NumpadMemorySubtract => Some(Self::NumpadMemorySubtract),
593            winit::keyboard::KeyCode::NumpadMultiply => Some(Self::NumpadMultiply),
594            winit::keyboard::KeyCode::NumpadParenLeft => Some(Self::NumpadParenLeft),
595            winit::keyboard::KeyCode::NumpadParenRight => Some(Self::NumpadParenRight),
596            winit::keyboard::KeyCode::NumpadStar => Some(Self::NumpadStar),
597            winit::keyboard::KeyCode::NumpadSubtract => Some(Self::NumpadSubtract),
598            winit::keyboard::KeyCode::Escape => Some(Self::Escape),
599            winit::keyboard::KeyCode::Fn => Some(Self::Fn),
600            winit::keyboard::KeyCode::FnLock => Some(Self::FnLock),
601            winit::keyboard::KeyCode::PrintScreen => Some(Self::PrintScreen),
602            winit::keyboard::KeyCode::ScrollLock => Some(Self::ScrollLock),
603            winit::keyboard::KeyCode::Pause => Some(Self::Pause),
604            winit::keyboard::KeyCode::BrowserBack => Some(Self::BrowserBack),
605            winit::keyboard::KeyCode::BrowserFavorites => Some(Self::BrowserFavorites),
606            winit::keyboard::KeyCode::BrowserForward => Some(Self::BrowserForward),
607            winit::keyboard::KeyCode::BrowserHome => Some(Self::BrowserHome),
608            winit::keyboard::KeyCode::BrowserRefresh => Some(Self::BrowserRefresh),
609            winit::keyboard::KeyCode::BrowserSearch => Some(Self::BrowserSearch),
610            winit::keyboard::KeyCode::BrowserStop => Some(Self::BrowserStop),
611            winit::keyboard::KeyCode::Eject => Some(Self::Eject),
612            winit::keyboard::KeyCode::LaunchApp1 => Some(Self::LaunchApp1),
613            winit::keyboard::KeyCode::LaunchApp2 => Some(Self::LaunchApp2),
614            winit::keyboard::KeyCode::LaunchMail => Some(Self::LaunchMail),
615            winit::keyboard::KeyCode::MediaPlayPause => Some(Self::MediaPlayPause),
616            winit::keyboard::KeyCode::MediaSelect => Some(Self::MediaSelect),
617            winit::keyboard::KeyCode::MediaStop => Some(Self::MediaStop),
618            winit::keyboard::KeyCode::MediaTrackNext => Some(Self::MediaTrackNext),
619            winit::keyboard::KeyCode::MediaTrackPrevious => Some(Self::MediaTrackPrevious),
620            winit::keyboard::KeyCode::Power => Some(Self::Power),
621            winit::keyboard::KeyCode::Sleep => Some(Self::Sleep),
622            winit::keyboard::KeyCode::AudioVolumeDown => Some(Self::AudioVolumeDown),
623            winit::keyboard::KeyCode::AudioVolumeMute => Some(Self::AudioVolumeMute),
624            winit::keyboard::KeyCode::AudioVolumeUp => Some(Self::AudioVolumeUp),
625            winit::keyboard::KeyCode::WakeUp => Some(Self::WakeUp),
626            winit::keyboard::KeyCode::Meta => Some(Self::Meta),
627            winit::keyboard::KeyCode::Hyper => Some(Self::Hyper),
628            winit::keyboard::KeyCode::Turbo => Some(Self::Turbo),
629            winit::keyboard::KeyCode::Abort => Some(Self::Abort),
630            winit::keyboard::KeyCode::Resume => Some(Self::Resume),
631            winit::keyboard::KeyCode::Suspend => Some(Self::Suspend),
632            winit::keyboard::KeyCode::Again => Some(Self::Again),
633            winit::keyboard::KeyCode::Copy => Some(Self::Copy),
634            winit::keyboard::KeyCode::Cut => Some(Self::Cut),
635            winit::keyboard::KeyCode::Find => Some(Self::Find),
636            winit::keyboard::KeyCode::Open => Some(Self::Open),
637            winit::keyboard::KeyCode::Paste => Some(Self::Paste),
638            winit::keyboard::KeyCode::Props => Some(Self::Props),
639            winit::keyboard::KeyCode::Select => Some(Self::Select),
640            winit::keyboard::KeyCode::Undo => Some(Self::Undo),
641            winit::keyboard::KeyCode::Hiragana => Some(Self::Hiragana),
642            winit::keyboard::KeyCode::Katakana => Some(Self::Katakana),
643            winit::keyboard::KeyCode::F1 => Some(Self::F1),
644            winit::keyboard::KeyCode::F2 => Some(Self::F2),
645            winit::keyboard::KeyCode::F3 => Some(Self::F3),
646            winit::keyboard::KeyCode::F4 => Some(Self::F4),
647            winit::keyboard::KeyCode::F5 => Some(Self::F5),
648            winit::keyboard::KeyCode::F6 => Some(Self::F6),
649            winit::keyboard::KeyCode::F7 => Some(Self::F7),
650            winit::keyboard::KeyCode::F8 => Some(Self::F8),
651            winit::keyboard::KeyCode::F9 => Some(Self::F9),
652            winit::keyboard::KeyCode::F10 => Some(Self::F10),
653            winit::keyboard::KeyCode::F11 => Some(Self::F11),
654            winit::keyboard::KeyCode::F12 => Some(Self::F12),
655            winit::keyboard::KeyCode::F13 => Some(Self::F13),
656            winit::keyboard::KeyCode::F14 => Some(Self::F14),
657            winit::keyboard::KeyCode::F15 => Some(Self::F15),
658            winit::keyboard::KeyCode::F16 => Some(Self::F16),
659            winit::keyboard::KeyCode::F17 => Some(Self::F17),
660            winit::keyboard::KeyCode::F18 => Some(Self::F18),
661            winit::keyboard::KeyCode::F19 => Some(Self::F19),
662            winit::keyboard::KeyCode::F20 => Some(Self::F20),
663            winit::keyboard::KeyCode::F21 => Some(Self::F21),
664            winit::keyboard::KeyCode::F22 => Some(Self::F22),
665            winit::keyboard::KeyCode::F23 => Some(Self::F23),
666            winit::keyboard::KeyCode::F24 => Some(Self::F24),
667            winit::keyboard::KeyCode::F25 => Some(Self::F25),
668            winit::keyboard::KeyCode::F26 => Some(Self::F26),
669            winit::keyboard::KeyCode::F27 => Some(Self::F27),
670            winit::keyboard::KeyCode::F28 => Some(Self::F28),
671            winit::keyboard::KeyCode::F29 => Some(Self::F29),
672            winit::keyboard::KeyCode::F30 => Some(Self::F30),
673            winit::keyboard::KeyCode::F31 => Some(Self::F31),
674            winit::keyboard::KeyCode::F32 => Some(Self::F32),
675            winit::keyboard::KeyCode::F33 => Some(Self::F33),
676            winit::keyboard::KeyCode::F34 => Some(Self::F34),
677            winit::keyboard::KeyCode::F35 => Some(Self::F35),
678            _ => None,
679        }
680    }
681
682    pub fn as_winit_keycode(&self) -> Option<winit::keyboard::KeyCode> {
683        match self {
684            KeyCode::Backquote => Some(winit::keyboard::KeyCode::Backquote),
685            KeyCode::Backslash => Some(winit::keyboard::KeyCode::Backslash),
686            KeyCode::BracketLeft => Some(winit::keyboard::KeyCode::BracketLeft),
687            KeyCode::BracketRight => Some(winit::keyboard::KeyCode::BracketRight),
688            KeyCode::Comma => Some(winit::keyboard::KeyCode::Comma),
689            KeyCode::Digit0 => Some(winit::keyboard::KeyCode::Digit0),
690            KeyCode::Digit1 => Some(winit::keyboard::KeyCode::Digit1),
691            KeyCode::Digit2 => Some(winit::keyboard::KeyCode::Digit2),
692            KeyCode::Digit3 => Some(winit::keyboard::KeyCode::Digit3),
693            KeyCode::Digit4 => Some(winit::keyboard::KeyCode::Digit4),
694            KeyCode::Digit5 => Some(winit::keyboard::KeyCode::Digit5),
695            KeyCode::Digit6 => Some(winit::keyboard::KeyCode::Digit6),
696            KeyCode::Digit7 => Some(winit::keyboard::KeyCode::Digit7),
697            KeyCode::Digit8 => Some(winit::keyboard::KeyCode::Digit8),
698            KeyCode::Digit9 => Some(winit::keyboard::KeyCode::Digit9),
699            KeyCode::Equal => Some(winit::keyboard::KeyCode::Equal),
700            KeyCode::IntlBackslash => Some(winit::keyboard::KeyCode::IntlBackslash),
701            KeyCode::IntlRo => Some(winit::keyboard::KeyCode::IntlRo),
702            KeyCode::IntlYen => Some(winit::keyboard::KeyCode::IntlYen),
703            KeyCode::KeyA => Some(winit::keyboard::KeyCode::KeyA),
704            KeyCode::KeyB => Some(winit::keyboard::KeyCode::KeyB),
705            KeyCode::KeyC => Some(winit::keyboard::KeyCode::KeyC),
706            KeyCode::KeyD => Some(winit::keyboard::KeyCode::KeyD),
707            KeyCode::KeyE => Some(winit::keyboard::KeyCode::KeyE),
708            KeyCode::KeyF => Some(winit::keyboard::KeyCode::KeyF),
709            KeyCode::KeyG => Some(winit::keyboard::KeyCode::KeyG),
710            KeyCode::KeyH => Some(winit::keyboard::KeyCode::KeyH),
711            KeyCode::KeyI => Some(winit::keyboard::KeyCode::KeyI),
712            KeyCode::KeyJ => Some(winit::keyboard::KeyCode::KeyJ),
713            KeyCode::KeyK => Some(winit::keyboard::KeyCode::KeyK),
714            KeyCode::KeyL => Some(winit::keyboard::KeyCode::KeyL),
715            KeyCode::KeyM => Some(winit::keyboard::KeyCode::KeyM),
716            KeyCode::KeyN => Some(winit::keyboard::KeyCode::KeyN),
717            KeyCode::KeyO => Some(winit::keyboard::KeyCode::KeyO),
718            KeyCode::KeyP => Some(winit::keyboard::KeyCode::KeyP),
719            KeyCode::KeyQ => Some(winit::keyboard::KeyCode::KeyQ),
720            KeyCode::KeyR => Some(winit::keyboard::KeyCode::KeyR),
721            KeyCode::KeyS => Some(winit::keyboard::KeyCode::KeyS),
722            KeyCode::KeyT => Some(winit::keyboard::KeyCode::KeyT),
723            KeyCode::KeyU => Some(winit::keyboard::KeyCode::KeyU),
724            KeyCode::KeyV => Some(winit::keyboard::KeyCode::KeyV),
725            KeyCode::KeyW => Some(winit::keyboard::KeyCode::KeyW),
726            KeyCode::KeyX => Some(winit::keyboard::KeyCode::KeyX),
727            KeyCode::KeyY => Some(winit::keyboard::KeyCode::KeyY),
728            KeyCode::KeyZ => Some(winit::keyboard::KeyCode::KeyZ),
729            KeyCode::Minus => Some(winit::keyboard::KeyCode::Minus),
730            KeyCode::Period => Some(winit::keyboard::KeyCode::Period),
731            KeyCode::Quote => Some(winit::keyboard::KeyCode::Quote),
732            KeyCode::Semicolon => Some(winit::keyboard::KeyCode::Semicolon),
733            KeyCode::Slash => Some(winit::keyboard::KeyCode::Slash),
734            KeyCode::AltLeft => Some(winit::keyboard::KeyCode::AltLeft),
735            KeyCode::AltRight => Some(winit::keyboard::KeyCode::AltRight),
736            KeyCode::Backspace => Some(winit::keyboard::KeyCode::Backspace),
737            KeyCode::CapsLock => Some(winit::keyboard::KeyCode::CapsLock),
738            KeyCode::ContextMenu => Some(winit::keyboard::KeyCode::ContextMenu),
739            KeyCode::ControlLeft => Some(winit::keyboard::KeyCode::ControlLeft),
740            KeyCode::ControlRight => Some(winit::keyboard::KeyCode::ControlRight),
741            KeyCode::Enter => Some(winit::keyboard::KeyCode::Enter),
742            KeyCode::SuperLeft => Some(winit::keyboard::KeyCode::SuperLeft),
743            KeyCode::SuperRight => Some(winit::keyboard::KeyCode::SuperRight),
744            KeyCode::ShiftLeft => Some(winit::keyboard::KeyCode::ShiftLeft),
745            KeyCode::ShiftRight => Some(winit::keyboard::KeyCode::ShiftRight),
746            KeyCode::Space => Some(winit::keyboard::KeyCode::Space),
747            KeyCode::Tab => Some(winit::keyboard::KeyCode::Tab),
748            KeyCode::Convert => Some(winit::keyboard::KeyCode::Convert),
749            KeyCode::KanaMode => Some(winit::keyboard::KeyCode::KanaMode),
750            KeyCode::Lang1 => Some(winit::keyboard::KeyCode::Lang1),
751            KeyCode::Lang2 => Some(winit::keyboard::KeyCode::Lang2),
752            KeyCode::Lang3 => Some(winit::keyboard::KeyCode::Lang3),
753            KeyCode::Lang4 => Some(winit::keyboard::KeyCode::Lang4),
754            KeyCode::Lang5 => Some(winit::keyboard::KeyCode::Lang5),
755            KeyCode::NonConvert => Some(winit::keyboard::KeyCode::NonConvert),
756            KeyCode::Delete => Some(winit::keyboard::KeyCode::Delete),
757            KeyCode::End => Some(winit::keyboard::KeyCode::End),
758            KeyCode::Help => Some(winit::keyboard::KeyCode::Help),
759            KeyCode::Home => Some(winit::keyboard::KeyCode::Home),
760            KeyCode::Insert => Some(winit::keyboard::KeyCode::Insert),
761            KeyCode::PageDown => Some(winit::keyboard::KeyCode::PageDown),
762            KeyCode::PageUp => Some(winit::keyboard::KeyCode::PageUp),
763            KeyCode::ArrowDown => Some(winit::keyboard::KeyCode::ArrowDown),
764            KeyCode::ArrowLeft => Some(winit::keyboard::KeyCode::ArrowLeft),
765            KeyCode::ArrowRight => Some(winit::keyboard::KeyCode::ArrowRight),
766            KeyCode::ArrowUp => Some(winit::keyboard::KeyCode::ArrowUp),
767            KeyCode::NumLock => Some(winit::keyboard::KeyCode::NumLock),
768            KeyCode::Numpad0 => Some(winit::keyboard::KeyCode::Numpad0),
769            KeyCode::Numpad1 => Some(winit::keyboard::KeyCode::Numpad1),
770            KeyCode::Numpad2 => Some(winit::keyboard::KeyCode::Numpad2),
771            KeyCode::Numpad3 => Some(winit::keyboard::KeyCode::Numpad3),
772            KeyCode::Numpad4 => Some(winit::keyboard::KeyCode::Numpad4),
773            KeyCode::Numpad5 => Some(winit::keyboard::KeyCode::Numpad5),
774            KeyCode::Numpad6 => Some(winit::keyboard::KeyCode::Numpad6),
775            KeyCode::Numpad7 => Some(winit::keyboard::KeyCode::Numpad7),
776            KeyCode::Numpad8 => Some(winit::keyboard::KeyCode::Numpad8),
777            KeyCode::Numpad9 => Some(winit::keyboard::KeyCode::Numpad9),
778            KeyCode::NumpadAdd => Some(winit::keyboard::KeyCode::NumpadAdd),
779            KeyCode::NumpadBackspace => Some(winit::keyboard::KeyCode::NumpadBackspace),
780            KeyCode::NumpadClear => Some(winit::keyboard::KeyCode::NumpadClear),
781            KeyCode::NumpadClearEntry => Some(winit::keyboard::KeyCode::NumpadClearEntry),
782            KeyCode::NumpadComma => Some(winit::keyboard::KeyCode::NumpadComma),
783            KeyCode::NumpadDecimal => Some(winit::keyboard::KeyCode::NumpadDecimal),
784            KeyCode::NumpadDivide => Some(winit::keyboard::KeyCode::NumpadDivide),
785            KeyCode::NumpadEnter => Some(winit::keyboard::KeyCode::NumpadEnter),
786            KeyCode::NumpadEqual => Some(winit::keyboard::KeyCode::NumpadEqual),
787            KeyCode::NumpadHash => Some(winit::keyboard::KeyCode::NumpadHash),
788            KeyCode::NumpadMemoryAdd => Some(winit::keyboard::KeyCode::NumpadMemoryAdd),
789            KeyCode::NumpadMemoryClear => Some(winit::keyboard::KeyCode::NumpadMemoryClear),
790            KeyCode::NumpadMemoryRecall => Some(winit::keyboard::KeyCode::NumpadMemoryRecall),
791            KeyCode::NumpadMemoryStore => Some(winit::keyboard::KeyCode::NumpadMemoryStore),
792            KeyCode::NumpadMemorySubtract => Some(winit::keyboard::KeyCode::NumpadMemorySubtract),
793            KeyCode::NumpadMultiply => Some(winit::keyboard::KeyCode::NumpadMultiply),
794            KeyCode::NumpadParenLeft => Some(winit::keyboard::KeyCode::NumpadParenLeft),
795            KeyCode::NumpadParenRight => Some(winit::keyboard::KeyCode::NumpadParenRight),
796            KeyCode::NumpadStar => Some(winit::keyboard::KeyCode::NumpadStar),
797            KeyCode::NumpadSubtract => Some(winit::keyboard::KeyCode::NumpadSubtract),
798            KeyCode::Escape => Some(winit::keyboard::KeyCode::Escape),
799            KeyCode::Fn => Some(winit::keyboard::KeyCode::Fn),
800            KeyCode::FnLock => Some(winit::keyboard::KeyCode::FnLock),
801            KeyCode::PrintScreen => Some(winit::keyboard::KeyCode::PrintScreen),
802            KeyCode::ScrollLock => Some(winit::keyboard::KeyCode::ScrollLock),
803            KeyCode::Pause => Some(winit::keyboard::KeyCode::Pause),
804            KeyCode::BrowserBack => Some(winit::keyboard::KeyCode::BrowserBack),
805            KeyCode::BrowserFavorites => Some(winit::keyboard::KeyCode::BrowserFavorites),
806            KeyCode::BrowserForward => Some(winit::keyboard::KeyCode::BrowserForward),
807            KeyCode::BrowserHome => Some(winit::keyboard::KeyCode::BrowserHome),
808            KeyCode::BrowserRefresh => Some(winit::keyboard::KeyCode::BrowserRefresh),
809            KeyCode::BrowserSearch => Some(winit::keyboard::KeyCode::BrowserSearch),
810            KeyCode::BrowserStop => Some(winit::keyboard::KeyCode::BrowserStop),
811            KeyCode::Eject => Some(winit::keyboard::KeyCode::Eject),
812            KeyCode::LaunchApp1 => Some(winit::keyboard::KeyCode::LaunchApp1),
813            KeyCode::LaunchApp2 => Some(winit::keyboard::KeyCode::LaunchApp2),
814            KeyCode::LaunchMail => Some(winit::keyboard::KeyCode::LaunchMail),
815            KeyCode::MediaPlayPause => Some(winit::keyboard::KeyCode::MediaPlayPause),
816            KeyCode::MediaSelect => Some(winit::keyboard::KeyCode::MediaSelect),
817            KeyCode::MediaStop => Some(winit::keyboard::KeyCode::MediaStop),
818            KeyCode::MediaTrackNext => Some(winit::keyboard::KeyCode::MediaTrackNext),
819            KeyCode::MediaTrackPrevious => Some(winit::keyboard::KeyCode::MediaTrackPrevious),
820            KeyCode::Power => Some(winit::keyboard::KeyCode::Power),
821            KeyCode::Sleep => Some(winit::keyboard::KeyCode::Sleep),
822            KeyCode::AudioVolumeDown => Some(winit::keyboard::KeyCode::AudioVolumeDown),
823            KeyCode::AudioVolumeMute => Some(winit::keyboard::KeyCode::AudioVolumeMute),
824            KeyCode::AudioVolumeUp => Some(winit::keyboard::KeyCode::AudioVolumeUp),
825            KeyCode::WakeUp => Some(winit::keyboard::KeyCode::WakeUp),
826            KeyCode::Meta => Some(winit::keyboard::KeyCode::Meta),
827            KeyCode::Hyper => Some(winit::keyboard::KeyCode::Hyper),
828            KeyCode::Turbo => Some(winit::keyboard::KeyCode::Turbo),
829            KeyCode::Abort => Some(winit::keyboard::KeyCode::Abort),
830            KeyCode::Resume => Some(winit::keyboard::KeyCode::Resume),
831            KeyCode::Suspend => Some(winit::keyboard::KeyCode::Suspend),
832            KeyCode::Again => Some(winit::keyboard::KeyCode::Again),
833            KeyCode::Copy => Some(winit::keyboard::KeyCode::Copy),
834            KeyCode::Cut => Some(winit::keyboard::KeyCode::Cut),
835            KeyCode::Find => Some(winit::keyboard::KeyCode::Find),
836            KeyCode::Open => Some(winit::keyboard::KeyCode::Open),
837            KeyCode::Paste => Some(winit::keyboard::KeyCode::Paste),
838            KeyCode::Props => Some(winit::keyboard::KeyCode::Props),
839            KeyCode::Select => Some(winit::keyboard::KeyCode::Select),
840            KeyCode::Undo => Some(winit::keyboard::KeyCode::Undo),
841            KeyCode::Hiragana => Some(winit::keyboard::KeyCode::Hiragana),
842            KeyCode::Katakana => Some(winit::keyboard::KeyCode::Katakana),
843            KeyCode::F1 => Some(winit::keyboard::KeyCode::F1),
844            KeyCode::F2 => Some(winit::keyboard::KeyCode::F2),
845            KeyCode::F3 => Some(winit::keyboard::KeyCode::F3),
846            KeyCode::F4 => Some(winit::keyboard::KeyCode::F4),
847            KeyCode::F5 => Some(winit::keyboard::KeyCode::F5),
848            KeyCode::F6 => Some(winit::keyboard::KeyCode::F6),
849            KeyCode::F7 => Some(winit::keyboard::KeyCode::F7),
850            KeyCode::F8 => Some(winit::keyboard::KeyCode::F8),
851            KeyCode::F9 => Some(winit::keyboard::KeyCode::F9),
852            KeyCode::F10 => Some(winit::keyboard::KeyCode::F10),
853            KeyCode::F11 => Some(winit::keyboard::KeyCode::F11),
854            KeyCode::F12 => Some(winit::keyboard::KeyCode::F12),
855            KeyCode::F13 => Some(winit::keyboard::KeyCode::F13),
856            KeyCode::F14 => Some(winit::keyboard::KeyCode::F14),
857            KeyCode::F15 => Some(winit::keyboard::KeyCode::F15),
858            KeyCode::F16 => Some(winit::keyboard::KeyCode::F16),
859            KeyCode::F17 => Some(winit::keyboard::KeyCode::F17),
860            KeyCode::F18 => Some(winit::keyboard::KeyCode::F18),
861            KeyCode::F19 => Some(winit::keyboard::KeyCode::F19),
862            KeyCode::F20 => Some(winit::keyboard::KeyCode::F20),
863            KeyCode::F21 => Some(winit::keyboard::KeyCode::F21),
864            KeyCode::F22 => Some(winit::keyboard::KeyCode::F22),
865            KeyCode::F23 => Some(winit::keyboard::KeyCode::F23),
866            KeyCode::F24 => Some(winit::keyboard::KeyCode::F24),
867            KeyCode::F25 => Some(winit::keyboard::KeyCode::F25),
868            KeyCode::F26 => Some(winit::keyboard::KeyCode::F26),
869            KeyCode::F27 => Some(winit::keyboard::KeyCode::F27),
870            KeyCode::F28 => Some(winit::keyboard::KeyCode::F28),
871            KeyCode::F29 => Some(winit::keyboard::KeyCode::F29),
872            KeyCode::F30 => Some(winit::keyboard::KeyCode::F30),
873            KeyCode::F31 => Some(winit::keyboard::KeyCode::F31),
874            KeyCode::F32 => Some(winit::keyboard::KeyCode::F32),
875            KeyCode::F33 => Some(winit::keyboard::KeyCode::F33),
876            KeyCode::F34 => Some(winit::keyboard::KeyCode::F34),
877            KeyCode::F35 => Some(winit::keyboard::KeyCode::F35),
878        }
879    }
880
881    /// Parses a key name matching this enum's own variant identifiers (the same strings
882    /// its derived `Debug` output prints), which happen to follow the W3C UI Events
883    /// `KeyboardEvent.code` convention (e.g. "KeyW", "ArrowUp", "Space", "ShiftLeft") —
884    /// used by `core::scripting` so a `.rhai` script can reference a key by name.
885    pub fn from_name(name: &str) -> Option<Self> {
886        Some(match name {
887            "Backquote" => Self::Backquote,
888            "Backslash" => Self::Backslash,
889            "BracketLeft" => Self::BracketLeft,
890            "BracketRight" => Self::BracketRight,
891            "Comma" => Self::Comma,
892            "Digit0" => Self::Digit0,
893            "Digit1" => Self::Digit1,
894            "Digit2" => Self::Digit2,
895            "Digit3" => Self::Digit3,
896            "Digit4" => Self::Digit4,
897            "Digit5" => Self::Digit5,
898            "Digit6" => Self::Digit6,
899            "Digit7" => Self::Digit7,
900            "Digit8" => Self::Digit8,
901            "Digit9" => Self::Digit9,
902            "Equal" => Self::Equal,
903            "IntlBackslash" => Self::IntlBackslash,
904            "IntlRo" => Self::IntlRo,
905            "IntlYen" => Self::IntlYen,
906            "KeyA" => Self::KeyA,
907            "KeyB" => Self::KeyB,
908            "KeyC" => Self::KeyC,
909            "KeyD" => Self::KeyD,
910            "KeyE" => Self::KeyE,
911            "KeyF" => Self::KeyF,
912            "KeyG" => Self::KeyG,
913            "KeyH" => Self::KeyH,
914            "KeyI" => Self::KeyI,
915            "KeyJ" => Self::KeyJ,
916            "KeyK" => Self::KeyK,
917            "KeyL" => Self::KeyL,
918            "KeyM" => Self::KeyM,
919            "KeyN" => Self::KeyN,
920            "KeyO" => Self::KeyO,
921            "KeyP" => Self::KeyP,
922            "KeyQ" => Self::KeyQ,
923            "KeyR" => Self::KeyR,
924            "KeyS" => Self::KeyS,
925            "KeyT" => Self::KeyT,
926            "KeyU" => Self::KeyU,
927            "KeyV" => Self::KeyV,
928            "KeyW" => Self::KeyW,
929            "KeyX" => Self::KeyX,
930            "KeyY" => Self::KeyY,
931            "KeyZ" => Self::KeyZ,
932            "Minus" => Self::Minus,
933            "Period" => Self::Period,
934            "Quote" => Self::Quote,
935            "Semicolon" => Self::Semicolon,
936            "Slash" => Self::Slash,
937            "AltLeft" => Self::AltLeft,
938            "AltRight" => Self::AltRight,
939            "Backspace" => Self::Backspace,
940            "CapsLock" => Self::CapsLock,
941            "ContextMenu" => Self::ContextMenu,
942            "ControlLeft" => Self::ControlLeft,
943            "ControlRight" => Self::ControlRight,
944            "Enter" => Self::Enter,
945            "SuperLeft" => Self::SuperLeft,
946            "SuperRight" => Self::SuperRight,
947            "ShiftLeft" => Self::ShiftLeft,
948            "ShiftRight" => Self::ShiftRight,
949            "Space" => Self::Space,
950            "Tab" => Self::Tab,
951            "Convert" => Self::Convert,
952            "KanaMode" => Self::KanaMode,
953            "Lang1" => Self::Lang1,
954            "Lang2" => Self::Lang2,
955            "Lang3" => Self::Lang3,
956            "Lang4" => Self::Lang4,
957            "Lang5" => Self::Lang5,
958            "NonConvert" => Self::NonConvert,
959            "Delete" => Self::Delete,
960            "End" => Self::End,
961            "Help" => Self::Help,
962            "Home" => Self::Home,
963            "Insert" => Self::Insert,
964            "PageDown" => Self::PageDown,
965            "PageUp" => Self::PageUp,
966            "ArrowDown" => Self::ArrowDown,
967            "ArrowLeft" => Self::ArrowLeft,
968            "ArrowRight" => Self::ArrowRight,
969            "ArrowUp" => Self::ArrowUp,
970            "NumLock" => Self::NumLock,
971            "Numpad0" => Self::Numpad0,
972            "Numpad1" => Self::Numpad1,
973            "Numpad2" => Self::Numpad2,
974            "Numpad3" => Self::Numpad3,
975            "Numpad4" => Self::Numpad4,
976            "Numpad5" => Self::Numpad5,
977            "Numpad6" => Self::Numpad6,
978            "Numpad7" => Self::Numpad7,
979            "Numpad8" => Self::Numpad8,
980            "Numpad9" => Self::Numpad9,
981            "NumpadAdd" => Self::NumpadAdd,
982            "NumpadBackspace" => Self::NumpadBackspace,
983            "NumpadClear" => Self::NumpadClear,
984            "NumpadClearEntry" => Self::NumpadClearEntry,
985            "NumpadComma" => Self::NumpadComma,
986            "NumpadDecimal" => Self::NumpadDecimal,
987            "NumpadDivide" => Self::NumpadDivide,
988            "NumpadEnter" => Self::NumpadEnter,
989            "NumpadEqual" => Self::NumpadEqual,
990            "NumpadHash" => Self::NumpadHash,
991            "NumpadMemoryAdd" => Self::NumpadMemoryAdd,
992            "NumpadMemoryClear" => Self::NumpadMemoryClear,
993            "NumpadMemoryRecall" => Self::NumpadMemoryRecall,
994            "NumpadMemoryStore" => Self::NumpadMemoryStore,
995            "NumpadMemorySubtract" => Self::NumpadMemorySubtract,
996            "NumpadMultiply" => Self::NumpadMultiply,
997            "NumpadParenLeft" => Self::NumpadParenLeft,
998            "NumpadParenRight" => Self::NumpadParenRight,
999            "NumpadStar" => Self::NumpadStar,
1000            "NumpadSubtract" => Self::NumpadSubtract,
1001            "Escape" => Self::Escape,
1002            "Fn" => Self::Fn,
1003            "FnLock" => Self::FnLock,
1004            "PrintScreen" => Self::PrintScreen,
1005            "ScrollLock" => Self::ScrollLock,
1006            "Pause" => Self::Pause,
1007            "BrowserBack" => Self::BrowserBack,
1008            "BrowserFavorites" => Self::BrowserFavorites,
1009            "BrowserForward" => Self::BrowserForward,
1010            "BrowserHome" => Self::BrowserHome,
1011            "BrowserRefresh" => Self::BrowserRefresh,
1012            "BrowserSearch" => Self::BrowserSearch,
1013            "BrowserStop" => Self::BrowserStop,
1014            "Eject" => Self::Eject,
1015            "LaunchApp1" => Self::LaunchApp1,
1016            "LaunchApp2" => Self::LaunchApp2,
1017            "LaunchMail" => Self::LaunchMail,
1018            "MediaPlayPause" => Self::MediaPlayPause,
1019            "MediaSelect" => Self::MediaSelect,
1020            "MediaStop" => Self::MediaStop,
1021            "MediaTrackNext" => Self::MediaTrackNext,
1022            "MediaTrackPrevious" => Self::MediaTrackPrevious,
1023            "Power" => Self::Power,
1024            "Sleep" => Self::Sleep,
1025            "AudioVolumeDown" => Self::AudioVolumeDown,
1026            "AudioVolumeMute" => Self::AudioVolumeMute,
1027            "AudioVolumeUp" => Self::AudioVolumeUp,
1028            "WakeUp" => Self::WakeUp,
1029            "Meta" => Self::Meta,
1030            "Hyper" => Self::Hyper,
1031            "Turbo" => Self::Turbo,
1032            "Abort" => Self::Abort,
1033            "Resume" => Self::Resume,
1034            "Suspend" => Self::Suspend,
1035            "Again" => Self::Again,
1036            "Copy" => Self::Copy,
1037            "Cut" => Self::Cut,
1038            "Find" => Self::Find,
1039            "Open" => Self::Open,
1040            "Paste" => Self::Paste,
1041            "Props" => Self::Props,
1042            "Select" => Self::Select,
1043            "Undo" => Self::Undo,
1044            "Hiragana" => Self::Hiragana,
1045            "Katakana" => Self::Katakana,
1046            "F1" => Self::F1,
1047            "F2" => Self::F2,
1048            "F3" => Self::F3,
1049            "F4" => Self::F4,
1050            "F5" => Self::F5,
1051            "F6" => Self::F6,
1052            "F7" => Self::F7,
1053            "F8" => Self::F8,
1054            "F9" => Self::F9,
1055            "F10" => Self::F10,
1056            "F11" => Self::F11,
1057            "F12" => Self::F12,
1058            "F13" => Self::F13,
1059            "F14" => Self::F14,
1060            "F15" => Self::F15,
1061            "F16" => Self::F16,
1062            "F17" => Self::F17,
1063            "F18" => Self::F18,
1064            "F19" => Self::F19,
1065            "F20" => Self::F20,
1066            "F21" => Self::F21,
1067            "F22" => Self::F22,
1068            "F23" => Self::F23,
1069            "F24" => Self::F24,
1070            "F25" => Self::F25,
1071            "F26" => Self::F26,
1072            "F27" => Self::F27,
1073            "F28" => Self::F28,
1074            "F29" => Self::F29,
1075            "F30" => Self::F30,
1076            "F31" => Self::F31,
1077            "F32" => Self::F32,
1078            "F33" => Self::F33,
1079            "F34" => Self::F34,
1080            "F35" => Self::F35,
1081            _ => return None,
1082        })
1083    }
1084}