use winit::{keyboard::KeyCode, window::CursorIcon};
#[inline]
pub(crate) fn egui_to_winit_cursor_icon(icon: egui::CursorIcon) -> Option<winit::window::CursorIcon> {
use egui::CursorIcon::*;
match icon {
Default => Some(CursorIcon::Default),
ContextMenu => Some(CursorIcon::ContextMenu),
Help => Some(CursorIcon::Help),
PointingHand => Some(CursorIcon::Pointer),
Progress => Some(CursorIcon::Progress),
Wait => Some(CursorIcon::Wait),
Cell => Some(CursorIcon::Cell),
Crosshair => Some(CursorIcon::Crosshair),
Text => Some(CursorIcon::Text),
VerticalText => Some(CursorIcon::VerticalText),
Alias => Some(CursorIcon::Alias),
Copy => Some(CursorIcon::Copy),
Move => Some(CursorIcon::Move),
NoDrop => Some(CursorIcon::NoDrop),
NotAllowed => Some(CursorIcon::NotAllowed),
Grab => Some(CursorIcon::Grab),
Grabbing => Some(CursorIcon::Grabbing),
AllScroll => Some(CursorIcon::AllScroll),
ResizeHorizontal => Some(CursorIcon::EwResize),
ResizeNeSw => Some(CursorIcon::NeswResize),
ResizeNwSe => Some(CursorIcon::NwseResize),
ResizeVertical => Some(CursorIcon::NsResize),
ResizeEast => Some(CursorIcon::EResize),
ResizeSouthEast => Some(CursorIcon::SeResize),
ResizeSouth => Some(CursorIcon::SResize),
ResizeSouthWest => Some(CursorIcon::SwResize),
ResizeWest => Some(CursorIcon::WResize),
ResizeNorthWest => Some(CursorIcon::NwResize),
ResizeNorth => Some(CursorIcon::NResize),
ResizeNorthEast => Some(CursorIcon::NeResize),
ResizeColumn => Some(CursorIcon::ColResize),
ResizeRow => Some(CursorIcon::RowResize),
ZoomIn => Some(CursorIcon::ZoomIn),
ZoomOut => Some(CursorIcon::ZoomOut),
None => Option::None,
}
}
pub fn key_from_winit_key(key: &winit::keyboard::Key) -> Option<egui::Key> {
match key {
winit::keyboard::Key::Named(named_key) => key_from_named_key(*named_key),
winit::keyboard::Key::Character(str) => egui::Key::from_name(str.as_str()),
winit::keyboard::Key::Unidentified(_) | winit::keyboard::Key::Dead(_) => None,
}
}
fn key_from_named_key(named_key: winit::keyboard::NamedKey) -> Option<egui::Key> {
use egui::Key;
use winit::keyboard::NamedKey;
Some(match named_key {
NamedKey::Enter => Key::Enter,
NamedKey::Tab => Key::Tab,
NamedKey::ArrowDown => Key::ArrowDown,
NamedKey::ArrowLeft => Key::ArrowLeft,
NamedKey::ArrowRight => Key::ArrowRight,
NamedKey::ArrowUp => Key::ArrowUp,
NamedKey::End => Key::End,
NamedKey::Home => Key::Home,
NamedKey::PageDown => Key::PageDown,
NamedKey::PageUp => Key::PageUp,
NamedKey::Backspace => Key::Backspace,
NamedKey::Delete => Key::Delete,
NamedKey::Insert => Key::Insert,
NamedKey::Escape => Key::Escape,
NamedKey::Cut => Key::Cut,
NamedKey::Copy => Key::Copy,
NamedKey::Paste => Key::Paste,
NamedKey::Space => Key::Space,
NamedKey::F1 => Key::F1,
NamedKey::F2 => Key::F2,
NamedKey::F3 => Key::F3,
NamedKey::F4 => Key::F4,
NamedKey::F5 => Key::F5,
NamedKey::F6 => Key::F6,
NamedKey::F7 => Key::F7,
NamedKey::F8 => Key::F8,
NamedKey::F9 => Key::F9,
NamedKey::F10 => Key::F10,
NamedKey::F11 => Key::F11,
NamedKey::F12 => Key::F12,
NamedKey::F13 => Key::F13,
NamedKey::F14 => Key::F14,
NamedKey::F15 => Key::F15,
NamedKey::F16 => Key::F16,
NamedKey::F17 => Key::F17,
NamedKey::F18 => Key::F18,
NamedKey::F19 => Key::F19,
NamedKey::F20 => Key::F20,
_ => {
log::trace!("Unknown key: {named_key:?}");
return None;
}
})
}
pub fn key_from_key_code(key: winit::keyboard::KeyCode) -> Option<egui::Key> {
use egui::Key;
Some(match key {
KeyCode::ArrowDown => Key::ArrowDown,
KeyCode::ArrowLeft => Key::ArrowLeft,
KeyCode::ArrowRight => Key::ArrowRight,
KeyCode::ArrowUp => Key::ArrowUp,
KeyCode::Escape => Key::Escape,
KeyCode::Tab => Key::Tab,
KeyCode::Backspace => Key::Backspace,
KeyCode::Enter | KeyCode::NumpadEnter => Key::Enter,
KeyCode::Insert => Key::Insert,
KeyCode::Delete => Key::Delete,
KeyCode::Home => Key::Home,
KeyCode::End => Key::End,
KeyCode::PageUp => Key::PageUp,
KeyCode::PageDown => Key::PageDown,
KeyCode::Space => Key::Space,
KeyCode::Comma => Key::Comma,
KeyCode::Period => Key::Period,
KeyCode::Semicolon => Key::Semicolon,
KeyCode::Backslash => Key::Backslash,
KeyCode::Slash | KeyCode::NumpadDivide => Key::Slash,
KeyCode::BracketLeft => Key::OpenBracket,
KeyCode::BracketRight => Key::CloseBracket,
KeyCode::Backquote => Key::Backtick,
KeyCode::Cut => Key::Cut,
KeyCode::Copy => Key::Copy,
KeyCode::Paste => Key::Paste,
KeyCode::Minus | KeyCode::NumpadSubtract => Key::Minus,
KeyCode::NumpadAdd => Key::Plus,
KeyCode::Equal => Key::Equals,
KeyCode::Digit0 | KeyCode::Numpad0 => Key::Num0,
KeyCode::Digit1 | KeyCode::Numpad1 => Key::Num1,
KeyCode::Digit2 | KeyCode::Numpad2 => Key::Num2,
KeyCode::Digit3 | KeyCode::Numpad3 => Key::Num3,
KeyCode::Digit4 | KeyCode::Numpad4 => Key::Num4,
KeyCode::Digit5 | KeyCode::Numpad5 => Key::Num5,
KeyCode::Digit6 | KeyCode::Numpad6 => Key::Num6,
KeyCode::Digit7 | KeyCode::Numpad7 => Key::Num7,
KeyCode::Digit8 | KeyCode::Numpad8 => Key::Num8,
KeyCode::Digit9 | KeyCode::Numpad9 => Key::Num9,
KeyCode::KeyA => Key::A,
KeyCode::KeyB => Key::B,
KeyCode::KeyC => Key::C,
KeyCode::KeyD => Key::D,
KeyCode::KeyE => Key::E,
KeyCode::KeyF => Key::F,
KeyCode::KeyG => Key::G,
KeyCode::KeyH => Key::H,
KeyCode::KeyI => Key::I,
KeyCode::KeyJ => Key::J,
KeyCode::KeyK => Key::K,
KeyCode::KeyL => Key::L,
KeyCode::KeyM => Key::M,
KeyCode::KeyN => Key::N,
KeyCode::KeyO => Key::O,
KeyCode::KeyP => Key::P,
KeyCode::KeyQ => Key::Q,
KeyCode::KeyR => Key::R,
KeyCode::KeyS => Key::S,
KeyCode::KeyT => Key::T,
KeyCode::KeyU => Key::U,
KeyCode::KeyV => Key::V,
KeyCode::KeyW => Key::W,
KeyCode::KeyX => Key::X,
KeyCode::KeyY => Key::Y,
KeyCode::KeyZ => Key::Z,
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,
_ => {
return None;
}
})
}
pub fn key_code_to_text(key_code: &KeyCode) -> Option<&str> {
match key_code {
KeyCode::Backquote => Some("\""),
KeyCode::Backslash => Some("\\"),
KeyCode::BracketLeft => Some("["),
KeyCode::BracketRight => Some("]"),
KeyCode::Comma => Some(","),
KeyCode::Digit0 => Some("0"),
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::Equal => Some("10"),
KeyCode::IntlBackslash => Some("/"),
KeyCode::IntlRo => None,
KeyCode::IntlYen => None,
KeyCode::KeyA => Some("A"),
KeyCode::KeyB => Some("B"),
KeyCode::KeyC => Some("C"),
KeyCode::KeyD => Some("D"),
KeyCode::KeyE => Some("E"),
KeyCode::KeyF => Some("F"),
KeyCode::KeyG => Some("G"),
KeyCode::KeyH => Some("H"),
KeyCode::KeyI => Some("I"),
KeyCode::KeyJ => Some("J"),
KeyCode::KeyK => Some("K"),
KeyCode::KeyL => Some("L"),
KeyCode::KeyM => Some("M"),
KeyCode::KeyN => Some("N"),
KeyCode::KeyO => Some("O"),
KeyCode::KeyP => Some("P"),
KeyCode::KeyQ => Some("Q"),
KeyCode::KeyR => Some("R"),
KeyCode::KeyS => Some("S"),
KeyCode::KeyT => Some("T"),
KeyCode::KeyU => Some("U"),
KeyCode::KeyV => Some("V"),
KeyCode::KeyW => Some("W"),
KeyCode::KeyX => Some("X"),
KeyCode::KeyY => Some("Y"),
KeyCode::KeyZ => Some("Z"),
KeyCode::Minus => Some("-"),
KeyCode::Period => Some("."),
KeyCode::Quote => Some("\""),
KeyCode::Semicolon => Some(";"),
KeyCode::Slash => Some("/"),
KeyCode::AltLeft => None,
KeyCode::AltRight => None,
KeyCode::Backspace => None,
KeyCode::CapsLock => None,
KeyCode::ContextMenu => None,
KeyCode::ControlLeft => None,
KeyCode::ControlRight => None,
KeyCode::Enter => Some("\n"),
KeyCode::SuperLeft => None,
KeyCode::SuperRight => None,
KeyCode::ShiftLeft => None,
KeyCode::ShiftRight => None,
KeyCode::Space => Some(" "),
KeyCode::Tab => Some("\t"),
KeyCode::Convert => None,
KeyCode::KanaMode => None,
KeyCode::Lang1 => None,
KeyCode::Lang2 => None,
KeyCode::Lang3 => None,
KeyCode::Lang4 => None,
KeyCode::Lang5 => None,
KeyCode::NonConvert => None,
KeyCode::Delete => None,
KeyCode::End => None,
KeyCode::Help => None,
KeyCode::Home => None,
KeyCode::Insert => None,
KeyCode::PageDown => None,
KeyCode::PageUp => None,
KeyCode::ArrowDown => None,
KeyCode::ArrowLeft => None,
KeyCode::ArrowRight => None,
KeyCode::ArrowUp => None,
KeyCode::NumLock => None,
KeyCode::Numpad0 => Some("0"),
KeyCode::Numpad1 => Some("1"),
KeyCode::Numpad2 => Some("2"),
KeyCode::Numpad3 => Some("3"),
KeyCode::Numpad4 => Some("4"),
KeyCode::Numpad5 => Some("5"),
KeyCode::Numpad6 => Some("6"),
KeyCode::Numpad7 => Some("7"),
KeyCode::Numpad8 => Some("8"),
KeyCode::Numpad9 => Some("9"),
KeyCode::NumpadAdd => Some("+"),
KeyCode::NumpadBackspace => None,
KeyCode::NumpadClear => None,
KeyCode::NumpadClearEntry => None,
KeyCode::NumpadComma => Some(","),
KeyCode::NumpadDecimal => Some("."),
KeyCode::NumpadDivide => Some("/"),
KeyCode::NumpadEnter => None,
KeyCode::NumpadEqual => Some("="),
KeyCode::NumpadHash => Some("#"),
KeyCode::NumpadMemoryAdd => Some("+"),
KeyCode::NumpadMemoryClear => None,
KeyCode::NumpadMemoryRecall => None,
KeyCode::NumpadMemoryStore => None,
KeyCode::NumpadMemorySubtract => Some("-"),
KeyCode::NumpadMultiply => Some("*"),
KeyCode::NumpadParenLeft => Some(""),
KeyCode::NumpadParenRight => Some("("),
KeyCode::NumpadStar => Some(")"),
KeyCode::NumpadSubtract => Some("-"),
KeyCode::Escape => None,
KeyCode::Fn => None,
KeyCode::FnLock => None,
KeyCode::PrintScreen => None,
KeyCode::ScrollLock => None,
KeyCode::Pause => None,
KeyCode::BrowserBack => None,
KeyCode::BrowserFavorites => None,
KeyCode::BrowserForward => None,
KeyCode::BrowserHome => None,
KeyCode::BrowserRefresh => None,
KeyCode::BrowserSearch => None,
KeyCode::BrowserStop => None,
KeyCode::Eject => None,
KeyCode::LaunchApp1 => None,
KeyCode::LaunchApp2 => None,
KeyCode::LaunchMail => None,
KeyCode::MediaPlayPause => None,
KeyCode::MediaSelect => None,
KeyCode::MediaStop => None,
KeyCode::MediaTrackNext => None,
KeyCode::MediaTrackPrevious => None,
KeyCode::Power => None,
KeyCode::Sleep => None,
KeyCode::AudioVolumeDown => None,
KeyCode::AudioVolumeMute => None,
KeyCode::AudioVolumeUp => None,
KeyCode::WakeUp => None,
KeyCode::Meta => None,
KeyCode::Hyper => None,
KeyCode::Turbo => None,
KeyCode::Abort => None,
KeyCode::Resume => None,
KeyCode::Suspend => None,
KeyCode::Again => None,
KeyCode::Copy => None,
KeyCode::Cut => None,
KeyCode::Find => None,
KeyCode::Open => None,
KeyCode::Paste => None,
KeyCode::Props => None,
KeyCode::Select => None,
KeyCode::Undo => None,
KeyCode::Hiragana => None,
KeyCode::Katakana => None,
KeyCode::F1 => None,
KeyCode::F2 => None,
KeyCode::F3 => None,
KeyCode::F4 => None,
KeyCode::F5 => None,
KeyCode::F6 => None,
KeyCode::F7 => None,
KeyCode::F8 => None,
KeyCode::F9 => None,
KeyCode::F10 => None,
KeyCode::F11 => None,
KeyCode::F12 => None,
KeyCode::F13 => None,
KeyCode::F14 => None,
KeyCode::F15 => None,
KeyCode::F16 => None,
KeyCode::F17 => None,
KeyCode::F18 => None,
KeyCode::F19 => None,
KeyCode::F20 => None,
KeyCode::F21 => None,
KeyCode::F22 => None,
KeyCode::F23 => None,
KeyCode::F24 => None,
KeyCode::F25 => None,
KeyCode::F26 => None,
KeyCode::F27 => None,
KeyCode::F28 => None,
KeyCode::F29 => None,
KeyCode::F30 => None,
KeyCode::F31 => None,
KeyCode::F32 => None,
KeyCode::F33 => None,
KeyCode::F34 => None,
KeyCode::F35 => None,
_ => None,
}
}