use winit::keyboard::KeyCode;
pub mod virtual_key_codes {
use winit::keyboard::KeyCode;
pub const ALL_KEYS: [KeyCode; 96] = [
KeyCode::KeyA,
KeyCode::KeyB,
KeyCode::KeyC,
KeyCode::KeyD,
KeyCode::KeyE,
KeyCode::KeyF,
KeyCode::KeyG,
KeyCode::KeyH,
KeyCode::KeyI,
KeyCode::KeyJ,
KeyCode::KeyK,
KeyCode::KeyL,
KeyCode::KeyM,
KeyCode::KeyN,
KeyCode::KeyO,
KeyCode::KeyP,
KeyCode::KeyQ,
KeyCode::KeyR,
KeyCode::KeyS,
KeyCode::KeyT,
KeyCode::KeyU,
KeyCode::KeyV,
KeyCode::KeyW,
KeyCode::KeyX,
KeyCode::KeyY,
KeyCode::KeyZ,
KeyCode::ArrowUp,
KeyCode::ArrowLeft,
KeyCode::ArrowRight,
KeyCode::ArrowDown,
KeyCode::Digit0,
KeyCode::Digit1,
KeyCode::Digit2,
KeyCode::Digit3,
KeyCode::Digit4,
KeyCode::Digit5,
KeyCode::Digit6,
KeyCode::Digit7,
KeyCode::Digit8,
KeyCode::Digit9,
KeyCode::Numpad0,
KeyCode::Numpad1,
KeyCode::Numpad2,
KeyCode::Numpad3,
KeyCode::Numpad4,
KeyCode::Numpad5,
KeyCode::Numpad6,
KeyCode::Numpad7,
KeyCode::Numpad8,
KeyCode::Numpad9,
KeyCode::ShiftLeft,
KeyCode::ShiftRight,
KeyCode::AltLeft,
KeyCode::AltRight,
KeyCode::SuperLeft,
KeyCode::SuperRight,
KeyCode::ControlLeft,
KeyCode::ControlRight,
KeyCode::Space,
KeyCode::Enter,
KeyCode::Tab,
KeyCode::Backspace,
KeyCode::Delete,
KeyCode::Escape,
KeyCode::Home,
KeyCode::End,
KeyCode::PageUp,
KeyCode::PageDown,
KeyCode::Minus,
KeyCode::NumpadAdd,
KeyCode::NumpadSubtract,
KeyCode::NumpadDecimal,
KeyCode::NumpadDivide,
KeyCode::NumpadStar,
KeyCode::Semicolon,
KeyCode::Equal,
KeyCode::NumpadEqual,
KeyCode::BracketLeft,
KeyCode::BracketRight,
KeyCode::Comma,
KeyCode::Period,
KeyCode::Slash,
KeyCode::Quote,
KeyCode::Backslash,
KeyCode::F1,
KeyCode::F2,
KeyCode::F3,
KeyCode::F4,
KeyCode::F5,
KeyCode::F6,
KeyCode::F7,
KeyCode::F8,
KeyCode::F9,
KeyCode::F10,
KeyCode::F11,
KeyCode::F12,
];
pub const FUNCTION: [KeyCode; 12] = [
KeyCode::F1,
KeyCode::F2,
KeyCode::F3,
KeyCode::F4,
KeyCode::F5,
KeyCode::F6,
KeyCode::F7,
KeyCode::F8,
KeyCode::F9,
KeyCode::F10,
KeyCode::F11,
KeyCode::F12,
];
pub const LETTERS: [KeyCode; 26] = [
KeyCode::KeyA,
KeyCode::KeyB,
KeyCode::KeyC,
KeyCode::KeyD,
KeyCode::KeyE,
KeyCode::KeyF,
KeyCode::KeyG,
KeyCode::KeyH,
KeyCode::KeyI,
KeyCode::KeyJ,
KeyCode::KeyK,
KeyCode::KeyL,
KeyCode::KeyM,
KeyCode::KeyN,
KeyCode::KeyO,
KeyCode::KeyP,
KeyCode::KeyQ,
KeyCode::KeyR,
KeyCode::KeyS,
KeyCode::KeyT,
KeyCode::KeyU,
KeyCode::KeyV,
KeyCode::KeyW,
KeyCode::KeyX,
KeyCode::KeyY,
KeyCode::KeyZ,
];
pub const ARROWS: [KeyCode; 4] = [
KeyCode::ArrowUp,
KeyCode::ArrowLeft,
KeyCode::ArrowRight,
KeyCode::ArrowDown,
];
pub const NUMBERS: [KeyCode; 20] = [
KeyCode::Digit0,
KeyCode::Digit1,
KeyCode::Digit2,
KeyCode::Digit3,
KeyCode::Digit4,
KeyCode::Digit5,
KeyCode::Digit6,
KeyCode::Digit7,
KeyCode::Digit8,
KeyCode::Digit9,
KeyCode::Numpad0,
KeyCode::Numpad1,
KeyCode::Numpad2,
KeyCode::Numpad3,
KeyCode::Numpad4,
KeyCode::Numpad5,
KeyCode::Numpad6,
KeyCode::Numpad7,
KeyCode::Numpad8,
KeyCode::Numpad9,
];
pub const MODIFIERS: [KeyCode; 8] = [
KeyCode::ShiftLeft,
KeyCode::ShiftRight,
KeyCode::AltLeft,
KeyCode::AltRight,
KeyCode::SuperLeft,
KeyCode::SuperRight,
KeyCode::ControlLeft,
KeyCode::ControlRight,
];
pub const TYPING: [KeyCode; 5] = [
KeyCode::Space,
KeyCode::Enter,
KeyCode::Tab,
KeyCode::Backspace,
KeyCode::Delete,
];
pub const NAVIGATION: [KeyCode; 5] = [
KeyCode::Escape,
KeyCode::Home,
KeyCode::End,
KeyCode::PageUp,
KeyCode::PageDown,
];
pub const SYMBOLS: [KeyCode; 16] = [
KeyCode::Minus,
KeyCode::NumpadAdd,
KeyCode::NumpadSubtract,
KeyCode::NumpadDecimal,
KeyCode::NumpadDivide,
KeyCode::NumpadStar,
KeyCode::Semicolon,
KeyCode::Equal,
KeyCode::NumpadEqual,
KeyCode::BracketLeft,
KeyCode::BracketRight,
KeyCode::Comma,
KeyCode::Period,
KeyCode::Slash,
KeyCode::Quote,
KeyCode::Backslash,
];
}
pub fn key_press_to_char(code: KeyCode, shift: bool) -> Option<char> {
key_code_to_char(code).map(|(c1, c2)| if shift { c2 } else { c1 })
}
pub fn key_code_to_char(code: KeyCode) -> Option<(char, char)> {
match code {
KeyCode::Digit1 => Some(('1', '!')),
KeyCode::Digit2 => Some(('2', '@')),
KeyCode::Digit3 => Some(('3', '£')),
KeyCode::Digit4 => Some(('4', '$')),
KeyCode::Digit5 => Some(('5', '%')),
KeyCode::Digit6 => Some(('6', '^')),
KeyCode::Digit7 => Some(('7', '&')),
KeyCode::Digit8 => Some(('8', '*')),
KeyCode::Digit9 => Some(('9', '(')),
KeyCode::Digit0 => Some(('0', ')')),
KeyCode::Numpad1 => Some(('1', '1')),
KeyCode::Numpad2 => Some(('2', '2')),
KeyCode::Numpad3 => Some(('3', '3')),
KeyCode::Numpad4 => Some(('4', '4')),
KeyCode::Numpad5 => Some(('5', '5')),
KeyCode::Numpad6 => Some(('6', '6')),
KeyCode::Numpad7 => Some(('7', '7')),
KeyCode::Numpad8 => Some(('8', '8')),
KeyCode::Numpad9 => Some(('9', '9')),
KeyCode::Numpad0 => Some(('0', '0')),
KeyCode::KeyA => Some(('a', 'A')),
KeyCode::KeyB => Some(('b', 'B')),
KeyCode::KeyC => Some(('c', 'C')),
KeyCode::KeyD => Some(('d', 'D')),
KeyCode::KeyE => Some(('e', 'E')),
KeyCode::KeyF => Some(('f', 'F')),
KeyCode::KeyG => Some(('g', 'G')),
KeyCode::KeyH => Some(('h', 'H')),
KeyCode::KeyI => Some(('i', 'I')),
KeyCode::KeyJ => Some(('j', 'J')),
KeyCode::KeyK => Some(('k', 'K')),
KeyCode::KeyL => Some(('l', 'L')),
KeyCode::KeyM => Some(('m', 'M')),
KeyCode::KeyN => Some(('n', 'N')),
KeyCode::KeyO => Some(('o', 'O')),
KeyCode::KeyP => Some(('p', 'P')),
KeyCode::KeyQ => Some(('q', 'Q')),
KeyCode::KeyR => Some(('r', 'R')),
KeyCode::KeyS => Some(('s', 'S')),
KeyCode::KeyT => Some(('t', 'T')),
KeyCode::KeyU => Some(('u', 'U')),
KeyCode::KeyV => Some(('v', 'V')),
KeyCode::KeyW => Some(('w', 'W')),
KeyCode::KeyX => Some(('x', 'X')),
KeyCode::KeyY => Some(('y', 'Y')),
KeyCode::KeyZ => Some(('z', 'Z')),
KeyCode::Space => Some((' ', ' ')),
KeyCode::NumpadAdd => Some(('+', '+')),
KeyCode::NumpadDivide => Some(('/', '/')),
KeyCode::NumpadDecimal => Some(('.', '.')),
KeyCode::NumpadComma => Some((',', ',')),
KeyCode::NumpadEqual => Some(('=', '=')),
KeyCode::NumpadMultiply => Some(('*', '*')),
KeyCode::NumpadSubtract => Some(('-', '-')),
KeyCode::Quote => Some(('\'', '"')),
KeyCode::Backslash => Some(('\\', '|')),
KeyCode::Comma => Some((',', '<')),
KeyCode::Equal => Some(('=', '+')),
KeyCode::BracketLeft => Some(('[', '{')),
KeyCode::Minus => Some(('-', '_')),
KeyCode::Period => Some(('.', '>')),
KeyCode::Semicolon => Some((';', ':')),
KeyCode::Slash => Some(('/', '?')),
_ => None,
}
}