Graphite/frontend/iced/src/input.rs

145 lines
4.5 KiB
Rust

use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, ModifierKeys};
use winit::keyboard::{KeyCode, ModifiersState, PhysicalKey};
pub fn translate_physical_winit(physical: PhysicalKey) -> Key {
let PhysicalKey::Code(code) = physical else {
return Key::Unidentified;
};
translate_code(code)
}
pub fn translate_modifiers_winit(m: ModifiersState) -> ModifierKeys {
let mut out = ModifierKeys::empty();
if m.shift_key() {
out |= ModifierKeys::SHIFT;
}
if m.alt_key() {
out |= ModifierKeys::ALT;
}
if m.control_key() {
out |= ModifierKeys::CONTROL;
}
if m.meta_key() {
out |= ModifierKeys::META_OR_COMMAND;
}
out
}
fn translate_code(code: KeyCode) -> Key {
match code {
KeyCode::Digit0 | KeyCode::Numpad0 => Key::Digit0,
KeyCode::Digit1 | KeyCode::Numpad1 => Key::Digit1,
KeyCode::Digit2 | KeyCode::Numpad2 => Key::Digit2,
KeyCode::Digit3 | KeyCode::Numpad3 => Key::Digit3,
KeyCode::Digit4 | KeyCode::Numpad4 => Key::Digit4,
KeyCode::Digit5 | KeyCode::Numpad5 => Key::Digit5,
KeyCode::Digit6 | KeyCode::Numpad6 => Key::Digit6,
KeyCode::Digit7 | KeyCode::Numpad7 => Key::Digit7,
KeyCode::Digit8 | KeyCode::Numpad8 => Key::Digit8,
KeyCode::Digit9 | KeyCode::Numpad9 => Key::Digit9,
KeyCode::KeyA => Key::KeyA,
KeyCode::KeyB => Key::KeyB,
KeyCode::KeyC => Key::KeyC,
KeyCode::KeyD => Key::KeyD,
KeyCode::KeyE => Key::KeyE,
KeyCode::KeyF => Key::KeyF,
KeyCode::KeyG => Key::KeyG,
KeyCode::KeyH => Key::KeyH,
KeyCode::KeyI => Key::KeyI,
KeyCode::KeyJ => Key::KeyJ,
KeyCode::KeyK => Key::KeyK,
KeyCode::KeyL => Key::KeyL,
KeyCode::KeyM => Key::KeyM,
KeyCode::KeyN => Key::KeyN,
KeyCode::KeyO => Key::KeyO,
KeyCode::KeyP => Key::KeyP,
KeyCode::KeyQ => Key::KeyQ,
KeyCode::KeyR => Key::KeyR,
KeyCode::KeyS => Key::KeyS,
KeyCode::KeyT => Key::KeyT,
KeyCode::KeyU => Key::KeyU,
KeyCode::KeyV => Key::KeyV,
KeyCode::KeyW => Key::KeyW,
KeyCode::KeyX => Key::KeyX,
KeyCode::KeyY => Key::KeyY,
KeyCode::KeyZ => Key::KeyZ,
KeyCode::Backquote => Key::Backquote,
KeyCode::Backslash => Key::Backslash,
KeyCode::BracketLeft => Key::BracketLeft,
KeyCode::BracketRight => Key::BracketRight,
KeyCode::Comma | KeyCode::NumpadComma => Key::Comma,
KeyCode::Equal | KeyCode::NumpadEqual => Key::Equal,
KeyCode::Minus | KeyCode::NumpadSubtract => Key::Minus,
KeyCode::Period | KeyCode::NumpadDecimal => Key::Period,
KeyCode::Quote => Key::Quote,
KeyCode::Semicolon => Key::Semicolon,
KeyCode::Slash | KeyCode::NumpadDivide => Key::Slash,
KeyCode::AltLeft | KeyCode::AltRight => Key::Alt,
KeyCode::MetaLeft | KeyCode::MetaRight => Key::Meta,
KeyCode::ShiftLeft | KeyCode::ShiftRight => Key::Shift,
KeyCode::ControlLeft | KeyCode::ControlRight => Key::Control,
KeyCode::Backspace => Key::Backspace,
KeyCode::CapsLock => Key::CapsLock,
KeyCode::ContextMenu => Key::ContextMenu,
KeyCode::Enter | KeyCode::NumpadEnter => Key::Enter,
KeyCode::Space => Key::Space,
KeyCode::Tab => Key::Tab,
KeyCode::Delete => Key::Delete,
KeyCode::End => Key::End,
KeyCode::Help => Key::Help,
KeyCode::Home => Key::Home,
KeyCode::Insert => Key::Insert,
KeyCode::PageDown => Key::PageDown,
KeyCode::PageUp => Key::PageUp,
KeyCode::ArrowDown => Key::ArrowDown,
KeyCode::ArrowLeft => Key::ArrowLeft,
KeyCode::ArrowRight => Key::ArrowRight,
KeyCode::ArrowUp => Key::ArrowUp,
KeyCode::NumLock => Key::NumLock,
KeyCode::NumpadAdd => Key::NumpadAdd,
KeyCode::NumpadHash => Key::NumpadHash,
KeyCode::NumpadMultiply | KeyCode::NumpadStar => Key::NumpadMultiply,
KeyCode::NumpadParenLeft => Key::NumpadParenLeft,
KeyCode::NumpadParenRight => Key::NumpadParenRight,
KeyCode::Escape => Key::Escape,
KeyCode::F1 => Key::F1,
KeyCode::F2 => Key::F2,
KeyCode::F3 => Key::F3,
KeyCode::F4 => Key::F4,
KeyCode::F5 => Key::F5,
KeyCode::F6 => Key::F6,
KeyCode::F7 => Key::F7,
KeyCode::F8 => Key::F8,
KeyCode::F9 => Key::F9,
KeyCode::F10 => Key::F10,
KeyCode::F11 => Key::F11,
KeyCode::F12 => Key::F12,
KeyCode::F13 => Key::F13,
KeyCode::F14 => Key::F14,
KeyCode::F15 => Key::F15,
KeyCode::F16 => Key::F16,
KeyCode::F17 => Key::F17,
KeyCode::F18 => Key::F18,
KeyCode::F19 => Key::F19,
KeyCode::F20 => Key::F20,
KeyCode::F21 => Key::F21,
KeyCode::F22 => Key::F22,
KeyCode::F23 => Key::F23,
KeyCode::F24 => Key::F24,
KeyCode::Fn => Key::Fn,
KeyCode::FnLock => Key::FnLock,
KeyCode::PrintScreen => Key::PrintScreen,
KeyCode::ScrollLock => Key::ScrollLock,
KeyCode::Pause => Key::Pause,
_ => Key::Unidentified,
}
}