#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum KeyCode {
Backquote,
Backslash,
BracketLeft,
BracketRight,
Comma,
Digit0,
Digit1,
Digit2,
Digit3,
Digit4,
Digit5,
Digit6,
Digit7,
Digit8,
Digit9,
Equal,
IntlBackslash,
IntlRo,
IntlYen,
KeyA,
KeyB,
KeyC,
KeyD,
KeyE,
KeyF,
KeyG,
KeyH,
KeyI,
KeyJ,
KeyK,
KeyL,
KeyM,
KeyN,
KeyO,
KeyP,
KeyQ,
KeyR,
KeyS,
KeyT,
KeyU,
KeyV,
KeyW,
KeyX,
KeyY,
KeyZ,
Minus,
Period,
Quote,
Semicolon,
Slash,
AltLeft,
AltRight,
Backspace,
CapsLock,
ContextMenu,
ControlLeft,
ControlRight,
Enter,
SuperLeft,
SuperRight,
ShiftLeft,
ShiftRight,
Space,
Tab,
Convert,
KanaMode,
Lang1,
Lang2,
Lang3,
Lang4,
Lang5,
NonConvert,
Delete,
End,
Help,
Home,
Insert,
PageDown,
PageUp,
ArrowDown,
ArrowLeft,
ArrowRight,
ArrowUp,
NumLock,
Numpad0,
Numpad1,
Numpad2,
Numpad3,
Numpad4,
Numpad5,
Numpad6,
Numpad7,
Numpad8,
Numpad9,
NumpadAdd,
NumpadBackspace,
NumpadClear,
NumpadClearEntry,
NumpadComma,
NumpadDecimal,
NumpadDivide,
NumpadEnter,
NumpadEqual,
NumpadHash,
NumpadMemoryAdd,
NumpadMemoryClear,
NumpadMemoryRecall,
NumpadMemoryStore,
NumpadMemorySubtract,
NumpadMultiply,
NumpadParenLeft,
NumpadParenRight,
NumpadStar,
NumpadSubtract,
Escape,
Fn,
FnLock,
PrintScreen,
ScrollLock,
Pause,
BrowserBack,
BrowserFavorites,
BrowserForward,
BrowserHome,
BrowserRefresh,
BrowserSearch,
BrowserStop,
Eject,
LaunchApp1,
LaunchApp2,
LaunchMail,
MediaPlayPause,
MediaSelect,
MediaStop,
MediaTrackNext,
MediaTrackPrevious,
Power,
Sleep,
AudioVolumeDown,
AudioVolumeMute,
AudioVolumeUp,
WakeUp,
Meta,
Hyper,
Turbo,
Abort,
Resume,
Suspend,
Again,
Copy,
Cut,
Find,
Open,
Paste,
Props,
Select,
Undo,
Hiragana,
Katakana,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
F25,
F26,
F27,
F28,
F29,
F30,
F31,
F32,
F33,
F34,
F35,
}
impl From<KeyCode> for winit::keyboard::KeyCode {
fn from(value: KeyCode) -> Self {
match value {
KeyCode::Backquote => Self::Backquote,
KeyCode::Backslash => Self::Backslash,
KeyCode::BracketLeft => Self::BracketLeft,
KeyCode::BracketRight => Self::BracketRight,
KeyCode::Comma => Self::Comma,
KeyCode::Digit0 => Self::Digit0,
KeyCode::Digit1 => Self::Digit1,
KeyCode::Digit2 => Self::Digit2,
KeyCode::Digit3 => Self::Digit3,
KeyCode::Digit4 => Self::Digit4,
KeyCode::Digit5 => Self::Digit5,
KeyCode::Digit6 => Self::Digit6,
KeyCode::Digit7 => Self::Digit7,
KeyCode::Digit8 => Self::Digit8,
KeyCode::Digit9 => Self::Digit9,
KeyCode::Equal => Self::Equal,
KeyCode::IntlBackslash => Self::IntlBackslash,
KeyCode::IntlRo => Self::IntlRo,
KeyCode::IntlYen => Self::IntlYen,
KeyCode::KeyA => Self::KeyA,
KeyCode::KeyB => Self::KeyB,
KeyCode::KeyC => Self::KeyC,
KeyCode::KeyD => Self::KeyD,
KeyCode::KeyE => Self::KeyE,
KeyCode::KeyF => Self::KeyF,
KeyCode::KeyG => Self::KeyG,
KeyCode::KeyH => Self::KeyH,
KeyCode::KeyI => Self::KeyI,
KeyCode::KeyJ => Self::KeyJ,
KeyCode::KeyK => Self::KeyK,
KeyCode::KeyL => Self::KeyL,
KeyCode::KeyM => Self::KeyM,
KeyCode::KeyN => Self::KeyN,
KeyCode::KeyO => Self::KeyO,
KeyCode::KeyP => Self::KeyP,
KeyCode::KeyQ => Self::KeyQ,
KeyCode::KeyR => Self::KeyR,
KeyCode::KeyS => Self::KeyS,
KeyCode::KeyT => Self::KeyT,
KeyCode::KeyU => Self::KeyU,
KeyCode::KeyV => Self::KeyV,
KeyCode::KeyW => Self::KeyW,
KeyCode::KeyX => Self::KeyX,
KeyCode::KeyY => Self::KeyY,
KeyCode::KeyZ => Self::KeyZ,
KeyCode::Minus => Self::Minus,
KeyCode::Period => Self::Period,
KeyCode::Quote => Self::Quote,
KeyCode::Semicolon => Self::Semicolon,
KeyCode::Slash => Self::Slash,
KeyCode::AltLeft => Self::AltLeft,
KeyCode::AltRight => Self::AltRight,
KeyCode::Backspace => Self::Backspace,
KeyCode::CapsLock => Self::CapsLock,
KeyCode::ContextMenu => Self::ContextMenu,
KeyCode::ControlLeft => Self::ControlLeft,
KeyCode::ControlRight => Self::ControlRight,
KeyCode::Enter => Self::Enter,
KeyCode::SuperLeft => Self::SuperLeft,
KeyCode::SuperRight => Self::SuperRight,
KeyCode::ShiftLeft => Self::ShiftLeft,
KeyCode::ShiftRight => Self::ShiftRight,
KeyCode::Space => Self::Space,
KeyCode::Tab => Self::Tab,
KeyCode::Convert => Self::Convert,
KeyCode::KanaMode => Self::KanaMode,
KeyCode::Lang1 => Self::Lang1,
KeyCode::Lang2 => Self::Lang2,
KeyCode::Lang3 => Self::Lang3,
KeyCode::Lang4 => Self::Lang4,
KeyCode::Lang5 => Self::Lang5,
KeyCode::NonConvert => Self::NonConvert,
KeyCode::Delete => Self::Delete,
KeyCode::End => Self::End,
KeyCode::Help => Self::Help,
KeyCode::Home => Self::Home,
KeyCode::Insert => Self::Insert,
KeyCode::PageDown => Self::PageDown,
KeyCode::PageUp => Self::PageUp,
KeyCode::ArrowDown => Self::ArrowDown,
KeyCode::ArrowLeft => Self::ArrowLeft,
KeyCode::ArrowRight => Self::ArrowRight,
KeyCode::ArrowUp => Self::ArrowUp,
KeyCode::NumLock => Self::NumLock,
KeyCode::Numpad0 => Self::Numpad0,
KeyCode::Numpad1 => Self::Numpad1,
KeyCode::Numpad2 => Self::Numpad2,
KeyCode::Numpad3 => Self::Numpad3,
KeyCode::Numpad4 => Self::Numpad4,
KeyCode::Numpad5 => Self::Numpad5,
KeyCode::Numpad6 => Self::Numpad6,
KeyCode::Numpad7 => Self::Numpad7,
KeyCode::Numpad8 => Self::Numpad8,
KeyCode::Numpad9 => Self::Numpad9,
KeyCode::NumpadAdd => Self::NumpadAdd,
KeyCode::NumpadBackspace => Self::NumpadBackspace,
KeyCode::NumpadClear => Self::NumpadClear,
KeyCode::NumpadClearEntry => Self::NumpadClearEntry,
KeyCode::NumpadComma => Self::NumpadComma,
KeyCode::NumpadDecimal => Self::NumpadDecimal,
KeyCode::NumpadDivide => Self::NumpadDivide,
KeyCode::NumpadEnter => Self::NumpadEnter,
KeyCode::NumpadEqual => Self::NumpadEqual,
KeyCode::NumpadHash => Self::NumpadHash,
KeyCode::NumpadMemoryAdd => Self::NumpadMemoryAdd,
KeyCode::NumpadMemoryClear => Self::NumpadMemoryClear,
KeyCode::NumpadMemoryRecall => Self::NumpadMemoryRecall,
KeyCode::NumpadMemoryStore => Self::NumpadMemoryStore,
KeyCode::NumpadMemorySubtract => Self::NumpadMemorySubtract,
KeyCode::NumpadMultiply => Self::NumpadMultiply,
KeyCode::NumpadParenLeft => Self::NumpadParenLeft,
KeyCode::NumpadParenRight => Self::NumpadParenRight,
KeyCode::NumpadStar => Self::NumpadStar,
KeyCode::NumpadSubtract => Self::NumpadSubtract,
KeyCode::Escape => Self::Escape,
KeyCode::Fn => Self::Fn,
KeyCode::FnLock => Self::FnLock,
KeyCode::PrintScreen => Self::PrintScreen,
KeyCode::ScrollLock => Self::ScrollLock,
KeyCode::Pause => Self::Pause,
KeyCode::BrowserBack => Self::BrowserBack,
KeyCode::BrowserFavorites => Self::BrowserFavorites,
KeyCode::BrowserForward => Self::BrowserForward,
KeyCode::BrowserHome => Self::BrowserHome,
KeyCode::BrowserRefresh => Self::BrowserRefresh,
KeyCode::BrowserSearch => Self::BrowserSearch,
KeyCode::BrowserStop => Self::BrowserStop,
KeyCode::Eject => Self::Eject,
KeyCode::LaunchApp1 => Self::LaunchApp1,
KeyCode::LaunchApp2 => Self::LaunchApp2,
KeyCode::LaunchMail => Self::LaunchMail,
KeyCode::MediaPlayPause => Self::MediaPlayPause,
KeyCode::MediaSelect => Self::MediaSelect,
KeyCode::MediaStop => Self::MediaStop,
KeyCode::MediaTrackNext => Self::MediaTrackNext,
KeyCode::MediaTrackPrevious => Self::MediaTrackPrevious,
KeyCode::Power => Self::Power,
KeyCode::Sleep => Self::Sleep,
KeyCode::AudioVolumeDown => Self::AudioVolumeDown,
KeyCode::AudioVolumeMute => Self::AudioVolumeMute,
KeyCode::AudioVolumeUp => Self::AudioVolumeUp,
KeyCode::WakeUp => Self::WakeUp,
KeyCode::Meta => Self::Meta,
KeyCode::Hyper => Self::Hyper,
KeyCode::Turbo => Self::Turbo,
KeyCode::Abort => Self::Abort,
KeyCode::Resume => Self::Resume,
KeyCode::Suspend => Self::Suspend,
KeyCode::Again => Self::Again,
KeyCode::Copy => Self::Copy,
KeyCode::Cut => Self::Cut,
KeyCode::Find => Self::Find,
KeyCode::Open => Self::Open,
KeyCode::Paste => Self::Paste,
KeyCode::Props => Self::Props,
KeyCode::Select => Self::Select,
KeyCode::Undo => Self::Undo,
KeyCode::Hiragana => Self::Hiragana,
KeyCode::Katakana => Self::Katakana,
KeyCode::F1 => Self::F1,
KeyCode::F2 => Self::F2,
KeyCode::F3 => Self::F3,
KeyCode::F4 => Self::F4,
KeyCode::F5 => Self::F5,
KeyCode::F6 => Self::F6,
KeyCode::F7 => Self::F7,
KeyCode::F8 => Self::F8,
KeyCode::F9 => Self::F9,
KeyCode::F10 => Self::F10,
KeyCode::F11 => Self::F11,
KeyCode::F12 => Self::F12,
KeyCode::F13 => Self::F13,
KeyCode::F14 => Self::F14,
KeyCode::F15 => Self::F15,
KeyCode::F16 => Self::F16,
KeyCode::F17 => Self::F17,
KeyCode::F18 => Self::F18,
KeyCode::F19 => Self::F19,
KeyCode::F20 => Self::F20,
KeyCode::F21 => Self::F21,
KeyCode::F22 => Self::F22,
KeyCode::F23 => Self::F23,
KeyCode::F24 => Self::F24,
KeyCode::F25 => Self::F25,
KeyCode::F26 => Self::F26,
KeyCode::F27 => Self::F27,
KeyCode::F28 => Self::F28,
KeyCode::F29 => Self::F29,
KeyCode::F30 => Self::F30,
KeyCode::F31 => Self::F31,
KeyCode::F32 => Self::F32,
KeyCode::F33 => Self::F33,
KeyCode::F34 => Self::F34,
KeyCode::F35 => Self::F35,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum MouseButton {
Left,
Right,
Middle,
Back,
Forward,
Other(u16),
}
impl From<MouseButton> for winit::event::MouseButton {
fn from(value: MouseButton) -> Self {
match value {
MouseButton::Left => Self::Left,
MouseButton::Right => Self::Right,
MouseButton::Middle => Self::Middle,
MouseButton::Back => Self::Back,
MouseButton::Forward => Self::Forward,
MouseButton::Other(code) => Self::Other(code),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn key_code_conversion_is_positional_not_coincidental() {
assert_eq!(winit::keyboard::KeyCode::from(KeyCode::Backquote), winit::keyboard::KeyCode::Backquote);
assert_eq!(winit::keyboard::KeyCode::from(KeyCode::KeyW), winit::keyboard::KeyCode::KeyW);
assert_eq!(winit::keyboard::KeyCode::from(KeyCode::ArrowUp), winit::keyboard::KeyCode::ArrowUp);
assert_eq!(winit::keyboard::KeyCode::from(KeyCode::ShiftLeft), winit::keyboard::KeyCode::ShiftLeft);
assert_eq!(winit::keyboard::KeyCode::from(KeyCode::F35), winit::keyboard::KeyCode::F35);
}
#[test]
fn mouse_button_conversion_preserves_the_other_code() {
assert_eq!(winit::event::MouseButton::from(MouseButton::Left), winit::event::MouseButton::Left);
assert_eq!(winit::event::MouseButton::from(MouseButton::Other(7)), winit::event::MouseButton::Other(7));
}
}