pixels-graphics-lib 0.22.1

Simple pixel graphics and GUI library
Documentation
use crate::prelude::winit;
use winit::keyboard::KeyCode;

pub mod virtual_key_codes {
    use super::*;

    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,
    ];
}

/// Converts key code to char
///
/// Passing `KeyCode::A, false` returns `Some('a')` and `KeyCode::A, true` returns `Some('A')`
///
/// # Arguments
/// * `shift` - If shift is being held down
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 })
}

/// Convert key code to (char, shifted char)
/// So `KeyCode::Key1` (the `1` key) returns `('1', '!')` and KeyCode::A (the `A` key) returns `('a', 'A')`
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,
    }
}