1#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
11pub enum KeyCode {
12 Backquote,
13 Backslash,
14 BracketLeft,
15 BracketRight,
16 Comma,
17 Digit0,
18 Digit1,
19 Digit2,
20 Digit3,
21 Digit4,
22 Digit5,
23 Digit6,
24 Digit7,
25 Digit8,
26 Digit9,
27 Equal,
28 IntlBackslash,
29 IntlRo,
30 IntlYen,
31 KeyA,
32 KeyB,
33 KeyC,
34 KeyD,
35 KeyE,
36 KeyF,
37 KeyG,
38 KeyH,
39 KeyI,
40 KeyJ,
41 KeyK,
42 KeyL,
43 KeyM,
44 KeyN,
45 KeyO,
46 KeyP,
47 KeyQ,
48 KeyR,
49 KeyS,
50 KeyT,
51 KeyU,
52 KeyV,
53 KeyW,
54 KeyX,
55 KeyY,
56 KeyZ,
57 Minus,
58 Period,
59 Quote,
60 Semicolon,
61 Slash,
62 AltLeft,
63 AltRight,
64 Backspace,
65 CapsLock,
66 ContextMenu,
67 ControlLeft,
68 ControlRight,
69 Enter,
70 SuperLeft,
71 SuperRight,
72 ShiftLeft,
73 ShiftRight,
74 Space,
75 Tab,
76 Convert,
77 KanaMode,
78 Lang1,
79 Lang2,
80 Lang3,
81 Lang4,
82 Lang5,
83 NonConvert,
84 Delete,
85 End,
86 Help,
87 Home,
88 Insert,
89 PageDown,
90 PageUp,
91 ArrowDown,
92 ArrowLeft,
93 ArrowRight,
94 ArrowUp,
95 NumLock,
96 Numpad0,
97 Numpad1,
98 Numpad2,
99 Numpad3,
100 Numpad4,
101 Numpad5,
102 Numpad6,
103 Numpad7,
104 Numpad8,
105 Numpad9,
106 NumpadAdd,
107 NumpadBackspace,
108 NumpadClear,
109 NumpadClearEntry,
110 NumpadComma,
111 NumpadDecimal,
112 NumpadDivide,
113 NumpadEnter,
114 NumpadEqual,
115 NumpadHash,
116 NumpadMemoryAdd,
117 NumpadMemoryClear,
118 NumpadMemoryRecall,
119 NumpadMemoryStore,
120 NumpadMemorySubtract,
121 NumpadMultiply,
122 NumpadParenLeft,
123 NumpadParenRight,
124 NumpadStar,
125 NumpadSubtract,
126 Escape,
127 Fn,
128 FnLock,
129 PrintScreen,
130 ScrollLock,
131 Pause,
132 BrowserBack,
133 BrowserFavorites,
134 BrowserForward,
135 BrowserHome,
136 BrowserRefresh,
137 BrowserSearch,
138 BrowserStop,
139 Eject,
140 LaunchApp1,
141 LaunchApp2,
142 LaunchMail,
143 MediaPlayPause,
144 MediaSelect,
145 MediaStop,
146 MediaTrackNext,
147 MediaTrackPrevious,
148 Power,
149 Sleep,
150 AudioVolumeDown,
151 AudioVolumeMute,
152 AudioVolumeUp,
153 WakeUp,
154 Meta,
155 Hyper,
156 Turbo,
157 Abort,
158 Resume,
159 Suspend,
160 Again,
161 Copy,
162 Cut,
163 Find,
164 Open,
165 Paste,
166 Props,
167 Select,
168 Undo,
169 Hiragana,
170 Katakana,
171 F1,
172 F2,
173 F3,
174 F4,
175 F5,
176 F6,
177 F7,
178 F8,
179 F9,
180 F10,
181 F11,
182 F12,
183 F13,
184 F14,
185 F15,
186 F16,
187 F17,
188 F18,
189 F19,
190 F20,
191 F21,
192 F22,
193 F23,
194 F24,
195 F25,
196 F26,
197 F27,
198 F28,
199 F29,
200 F30,
201 F31,
202 F32,
203 F33,
204 F34,
205 F35,
206}
207
208impl From<KeyCode> for winit::keyboard::KeyCode {
209 fn from(value: KeyCode) -> Self {
210 match value {
211 KeyCode::Backquote => Self::Backquote,
212 KeyCode::Backslash => Self::Backslash,
213 KeyCode::BracketLeft => Self::BracketLeft,
214 KeyCode::BracketRight => Self::BracketRight,
215 KeyCode::Comma => Self::Comma,
216 KeyCode::Digit0 => Self::Digit0,
217 KeyCode::Digit1 => Self::Digit1,
218 KeyCode::Digit2 => Self::Digit2,
219 KeyCode::Digit3 => Self::Digit3,
220 KeyCode::Digit4 => Self::Digit4,
221 KeyCode::Digit5 => Self::Digit5,
222 KeyCode::Digit6 => Self::Digit6,
223 KeyCode::Digit7 => Self::Digit7,
224 KeyCode::Digit8 => Self::Digit8,
225 KeyCode::Digit9 => Self::Digit9,
226 KeyCode::Equal => Self::Equal,
227 KeyCode::IntlBackslash => Self::IntlBackslash,
228 KeyCode::IntlRo => Self::IntlRo,
229 KeyCode::IntlYen => Self::IntlYen,
230 KeyCode::KeyA => Self::KeyA,
231 KeyCode::KeyB => Self::KeyB,
232 KeyCode::KeyC => Self::KeyC,
233 KeyCode::KeyD => Self::KeyD,
234 KeyCode::KeyE => Self::KeyE,
235 KeyCode::KeyF => Self::KeyF,
236 KeyCode::KeyG => Self::KeyG,
237 KeyCode::KeyH => Self::KeyH,
238 KeyCode::KeyI => Self::KeyI,
239 KeyCode::KeyJ => Self::KeyJ,
240 KeyCode::KeyK => Self::KeyK,
241 KeyCode::KeyL => Self::KeyL,
242 KeyCode::KeyM => Self::KeyM,
243 KeyCode::KeyN => Self::KeyN,
244 KeyCode::KeyO => Self::KeyO,
245 KeyCode::KeyP => Self::KeyP,
246 KeyCode::KeyQ => Self::KeyQ,
247 KeyCode::KeyR => Self::KeyR,
248 KeyCode::KeyS => Self::KeyS,
249 KeyCode::KeyT => Self::KeyT,
250 KeyCode::KeyU => Self::KeyU,
251 KeyCode::KeyV => Self::KeyV,
252 KeyCode::KeyW => Self::KeyW,
253 KeyCode::KeyX => Self::KeyX,
254 KeyCode::KeyY => Self::KeyY,
255 KeyCode::KeyZ => Self::KeyZ,
256 KeyCode::Minus => Self::Minus,
257 KeyCode::Period => Self::Period,
258 KeyCode::Quote => Self::Quote,
259 KeyCode::Semicolon => Self::Semicolon,
260 KeyCode::Slash => Self::Slash,
261 KeyCode::AltLeft => Self::AltLeft,
262 KeyCode::AltRight => Self::AltRight,
263 KeyCode::Backspace => Self::Backspace,
264 KeyCode::CapsLock => Self::CapsLock,
265 KeyCode::ContextMenu => Self::ContextMenu,
266 KeyCode::ControlLeft => Self::ControlLeft,
267 KeyCode::ControlRight => Self::ControlRight,
268 KeyCode::Enter => Self::Enter,
269 KeyCode::SuperLeft => Self::SuperLeft,
270 KeyCode::SuperRight => Self::SuperRight,
271 KeyCode::ShiftLeft => Self::ShiftLeft,
272 KeyCode::ShiftRight => Self::ShiftRight,
273 KeyCode::Space => Self::Space,
274 KeyCode::Tab => Self::Tab,
275 KeyCode::Convert => Self::Convert,
276 KeyCode::KanaMode => Self::KanaMode,
277 KeyCode::Lang1 => Self::Lang1,
278 KeyCode::Lang2 => Self::Lang2,
279 KeyCode::Lang3 => Self::Lang3,
280 KeyCode::Lang4 => Self::Lang4,
281 KeyCode::Lang5 => Self::Lang5,
282 KeyCode::NonConvert => Self::NonConvert,
283 KeyCode::Delete => Self::Delete,
284 KeyCode::End => Self::End,
285 KeyCode::Help => Self::Help,
286 KeyCode::Home => Self::Home,
287 KeyCode::Insert => Self::Insert,
288 KeyCode::PageDown => Self::PageDown,
289 KeyCode::PageUp => Self::PageUp,
290 KeyCode::ArrowDown => Self::ArrowDown,
291 KeyCode::ArrowLeft => Self::ArrowLeft,
292 KeyCode::ArrowRight => Self::ArrowRight,
293 KeyCode::ArrowUp => Self::ArrowUp,
294 KeyCode::NumLock => Self::NumLock,
295 KeyCode::Numpad0 => Self::Numpad0,
296 KeyCode::Numpad1 => Self::Numpad1,
297 KeyCode::Numpad2 => Self::Numpad2,
298 KeyCode::Numpad3 => Self::Numpad3,
299 KeyCode::Numpad4 => Self::Numpad4,
300 KeyCode::Numpad5 => Self::Numpad5,
301 KeyCode::Numpad6 => Self::Numpad6,
302 KeyCode::Numpad7 => Self::Numpad7,
303 KeyCode::Numpad8 => Self::Numpad8,
304 KeyCode::Numpad9 => Self::Numpad9,
305 KeyCode::NumpadAdd => Self::NumpadAdd,
306 KeyCode::NumpadBackspace => Self::NumpadBackspace,
307 KeyCode::NumpadClear => Self::NumpadClear,
308 KeyCode::NumpadClearEntry => Self::NumpadClearEntry,
309 KeyCode::NumpadComma => Self::NumpadComma,
310 KeyCode::NumpadDecimal => Self::NumpadDecimal,
311 KeyCode::NumpadDivide => Self::NumpadDivide,
312 KeyCode::NumpadEnter => Self::NumpadEnter,
313 KeyCode::NumpadEqual => Self::NumpadEqual,
314 KeyCode::NumpadHash => Self::NumpadHash,
315 KeyCode::NumpadMemoryAdd => Self::NumpadMemoryAdd,
316 KeyCode::NumpadMemoryClear => Self::NumpadMemoryClear,
317 KeyCode::NumpadMemoryRecall => Self::NumpadMemoryRecall,
318 KeyCode::NumpadMemoryStore => Self::NumpadMemoryStore,
319 KeyCode::NumpadMemorySubtract => Self::NumpadMemorySubtract,
320 KeyCode::NumpadMultiply => Self::NumpadMultiply,
321 KeyCode::NumpadParenLeft => Self::NumpadParenLeft,
322 KeyCode::NumpadParenRight => Self::NumpadParenRight,
323 KeyCode::NumpadStar => Self::NumpadStar,
324 KeyCode::NumpadSubtract => Self::NumpadSubtract,
325 KeyCode::Escape => Self::Escape,
326 KeyCode::Fn => Self::Fn,
327 KeyCode::FnLock => Self::FnLock,
328 KeyCode::PrintScreen => Self::PrintScreen,
329 KeyCode::ScrollLock => Self::ScrollLock,
330 KeyCode::Pause => Self::Pause,
331 KeyCode::BrowserBack => Self::BrowserBack,
332 KeyCode::BrowserFavorites => Self::BrowserFavorites,
333 KeyCode::BrowserForward => Self::BrowserForward,
334 KeyCode::BrowserHome => Self::BrowserHome,
335 KeyCode::BrowserRefresh => Self::BrowserRefresh,
336 KeyCode::BrowserSearch => Self::BrowserSearch,
337 KeyCode::BrowserStop => Self::BrowserStop,
338 KeyCode::Eject => Self::Eject,
339 KeyCode::LaunchApp1 => Self::LaunchApp1,
340 KeyCode::LaunchApp2 => Self::LaunchApp2,
341 KeyCode::LaunchMail => Self::LaunchMail,
342 KeyCode::MediaPlayPause => Self::MediaPlayPause,
343 KeyCode::MediaSelect => Self::MediaSelect,
344 KeyCode::MediaStop => Self::MediaStop,
345 KeyCode::MediaTrackNext => Self::MediaTrackNext,
346 KeyCode::MediaTrackPrevious => Self::MediaTrackPrevious,
347 KeyCode::Power => Self::Power,
348 KeyCode::Sleep => Self::Sleep,
349 KeyCode::AudioVolumeDown => Self::AudioVolumeDown,
350 KeyCode::AudioVolumeMute => Self::AudioVolumeMute,
351 KeyCode::AudioVolumeUp => Self::AudioVolumeUp,
352 KeyCode::WakeUp => Self::WakeUp,
353 KeyCode::Meta => Self::Meta,
354 KeyCode::Hyper => Self::Hyper,
355 KeyCode::Turbo => Self::Turbo,
356 KeyCode::Abort => Self::Abort,
357 KeyCode::Resume => Self::Resume,
358 KeyCode::Suspend => Self::Suspend,
359 KeyCode::Again => Self::Again,
360 KeyCode::Copy => Self::Copy,
361 KeyCode::Cut => Self::Cut,
362 KeyCode::Find => Self::Find,
363 KeyCode::Open => Self::Open,
364 KeyCode::Paste => Self::Paste,
365 KeyCode::Props => Self::Props,
366 KeyCode::Select => Self::Select,
367 KeyCode::Undo => Self::Undo,
368 KeyCode::Hiragana => Self::Hiragana,
369 KeyCode::Katakana => Self::Katakana,
370 KeyCode::F1 => Self::F1,
371 KeyCode::F2 => Self::F2,
372 KeyCode::F3 => Self::F3,
373 KeyCode::F4 => Self::F4,
374 KeyCode::F5 => Self::F5,
375 KeyCode::F6 => Self::F6,
376 KeyCode::F7 => Self::F7,
377 KeyCode::F8 => Self::F8,
378 KeyCode::F9 => Self::F9,
379 KeyCode::F10 => Self::F10,
380 KeyCode::F11 => Self::F11,
381 KeyCode::F12 => Self::F12,
382 KeyCode::F13 => Self::F13,
383 KeyCode::F14 => Self::F14,
384 KeyCode::F15 => Self::F15,
385 KeyCode::F16 => Self::F16,
386 KeyCode::F17 => Self::F17,
387 KeyCode::F18 => Self::F18,
388 KeyCode::F19 => Self::F19,
389 KeyCode::F20 => Self::F20,
390 KeyCode::F21 => Self::F21,
391 KeyCode::F22 => Self::F22,
392 KeyCode::F23 => Self::F23,
393 KeyCode::F24 => Self::F24,
394 KeyCode::F25 => Self::F25,
395 KeyCode::F26 => Self::F26,
396 KeyCode::F27 => Self::F27,
397 KeyCode::F28 => Self::F28,
398 KeyCode::F29 => Self::F29,
399 KeyCode::F30 => Self::F30,
400 KeyCode::F31 => Self::F31,
401 KeyCode::F32 => Self::F32,
402 KeyCode::F33 => Self::F33,
403 KeyCode::F34 => Self::F34,
404 KeyCode::F35 => Self::F35,
405 }
406 }
407}
408
409#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
411pub enum MouseButton {
412 Left,
413 Right,
414 Middle,
415 Back,
416 Forward,
417 Other(u16),
420}
421
422impl From<MouseButton> for winit::event::MouseButton {
423 fn from(value: MouseButton) -> Self {
424 match value {
425 MouseButton::Left => Self::Left,
426 MouseButton::Right => Self::Right,
427 MouseButton::Middle => Self::Middle,
428 MouseButton::Back => Self::Back,
429 MouseButton::Forward => Self::Forward,
430 MouseButton::Other(code) => Self::Other(code),
431 }
432 }
433}
434
435#[cfg(test)]
436mod tests {
437 use super::*;
438
439 #[test]
440 fn key_code_conversion_is_positional_not_coincidental() {
441 assert_eq!(winit::keyboard::KeyCode::from(KeyCode::Backquote), winit::keyboard::KeyCode::Backquote);
445 assert_eq!(winit::keyboard::KeyCode::from(KeyCode::KeyW), winit::keyboard::KeyCode::KeyW);
446 assert_eq!(winit::keyboard::KeyCode::from(KeyCode::ArrowUp), winit::keyboard::KeyCode::ArrowUp);
447 assert_eq!(winit::keyboard::KeyCode::from(KeyCode::ShiftLeft), winit::keyboard::KeyCode::ShiftLeft);
448 assert_eq!(winit::keyboard::KeyCode::from(KeyCode::F35), winit::keyboard::KeyCode::F35);
449 }
450
451 #[test]
452 fn mouse_button_conversion_preserves_the_other_code() {
453 assert_eq!(winit::event::MouseButton::from(MouseButton::Left), winit::event::MouseButton::Left);
454 assert_eq!(winit::event::MouseButton::from(MouseButton::Other(7)), winit::event::MouseButton::Other(7));
455 }
456}