From c0494e2e832fed4aef447bb67403d37c3de6d003 Mon Sep 17 00:00:00 2001 From: Magnus Larsen Date: Mon, 13 May 2024 05:22:01 -0700 Subject: [PATCH] servoshell: Support Cursor::None and all winit keys (#32228) keyboard-types has been bumped to 0.7, and stylo bumped to latest main (as of 2024-05-05) for their bump to kbd-types 0.7. --- Cargo.lock | 32 +- Cargo.toml | 2 +- ports/servoshell/headed_window.rs | 6 +- ports/servoshell/keyutils.rs | 545 +++++++++++++++++++++++++----- 4 files changed, 482 insertions(+), 103 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5de6bf41eb1..0114f7ff573 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1229,7 +1229,7 @@ dependencies = [ [[package]] name = "derive_common" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "darling", "proc-macro2", @@ -3160,11 +3160,11 @@ dependencies = [ [[package]] name = "keyboard-types" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "serde", "unicode-segmentation", ] @@ -3607,7 +3607,7 @@ dependencies = [ [[package]] name = "malloc_size_of" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "accountable-refcell", "app_units", @@ -5214,7 +5214,7 @@ dependencies = [ [[package]] name = "selectors" version = "0.24.0" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "bitflags 2.5.0", "cssparser", @@ -5502,7 +5502,7 @@ dependencies = [ [[package]] name = "servo_arc" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "nodrop", "serde", @@ -5512,7 +5512,7 @@ dependencies = [ [[package]] name = "servo_atoms" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "string_cache", "string_cache_codegen", @@ -5710,7 +5710,7 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "size_of_test" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "static_assertions", ] @@ -5851,7 +5851,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "static_prefs" version = "0.1.0" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" [[package]] name = "strict-num" @@ -5888,7 +5888,7 @@ dependencies = [ [[package]] name = "style" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "app_units", "arrayvec", @@ -5947,7 +5947,7 @@ dependencies = [ [[package]] name = "style_config" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "lazy_static", ] @@ -5955,7 +5955,7 @@ dependencies = [ [[package]] name = "style_derive" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "darling", "derive_common", @@ -5986,7 +5986,7 @@ dependencies = [ [[package]] name = "style_traits" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "app_units", "bitflags 2.5.0", @@ -6349,7 +6349,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "to_shmem" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "cssparser", "servo_arc", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "to_shmem_derive" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-04-16#a4a43436640986bbec6e9646ecdeedd607622bc1" +source = "git+https://github.com/servo/stylo?branch=2024-04-16#86f19869e3c044683e4bd1a31326f28e3e67e163" dependencies = [ "darling", "derive_common", diff --git a/Cargo.toml b/Cargo.toml index ffd3089d20a..c9ec9a25c35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ ipc-channel = "0.18" itertools = "0.12" jemalloc-sys = "0.5.4" jemallocator = "0.5.4" -keyboard-types = "0.6" +keyboard-types = "0.7" lazy_static = "1.4" libc = "0.2" log = "0.4" diff --git a/ports/servoshell/headed_window.rs b/ports/servoshell/headed_window.rs index 01bd19df52b..3098fa2381b 100644 --- a/ports/servoshell/headed_window.rs +++ b/ports/servoshell/headed_window.rs @@ -387,9 +387,13 @@ impl WindowPortsMethods for Window { Cursor::AllScroll => CursorIcon::AllScroll, Cursor::ZoomIn => CursorIcon::ZoomIn, Cursor::ZoomOut => CursorIcon::ZoomOut, - _ => CursorIcon::Default, + Cursor::None => { + self.winit_window.set_cursor_visible(false); + return; + }, }; self.winit_window.set_cursor_icon(winit_cursor); + self.winit_window.set_cursor_visible(true); } fn is_animating(&self) -> bool { diff --git a/ports/servoshell/keyutils.rs b/ports/servoshell/keyutils.rs index 6b153e86c52..8b71b56e838 100644 --- a/ports/servoshell/keyutils.rs +++ b/ports/servoshell/keyutils.rs @@ -20,100 +20,337 @@ pub const CMD_OR_ALT: Modifiers = Modifiers::META; pub const CMD_OR_ALT: Modifiers = Modifiers::ALT; fn get_servo_key_from_winit_key(key: &LogicalKey) -> Key { - // TODO: figure out how to map NavigateForward, NavigateBackward - // TODO: map the remaining keys if possible - match key { + let named_key = match key { + LogicalKey::Named(named_key) => named_key, + LogicalKey::Character(string) => return Key::Character(string.to_string()), + LogicalKey::Unidentified(_) => return Key::Unidentified, + LogicalKey::Dead(_) => return Key::Unidentified, + }; + match named_key { // printable: Key1 to Key0 // printable: A to Z - LogicalKey::Named(NamedKey::Escape) => Key::Escape, - LogicalKey::Named(NamedKey::F1) => Key::F1, - LogicalKey::Named(NamedKey::F2) => Key::F2, - LogicalKey::Named(NamedKey::F3) => Key::F3, - LogicalKey::Named(NamedKey::F4) => Key::F4, - LogicalKey::Named(NamedKey::F5) => Key::F5, - LogicalKey::Named(NamedKey::F6) => Key::F6, - LogicalKey::Named(NamedKey::F7) => Key::F7, - LogicalKey::Named(NamedKey::F8) => Key::F8, - LogicalKey::Named(NamedKey::F9) => Key::F9, - LogicalKey::Named(NamedKey::F10) => Key::F10, - LogicalKey::Named(NamedKey::F11) => Key::F11, - LogicalKey::Named(NamedKey::F12) => Key::F12, - // F13 to F15 are not mapped - LogicalKey::Named(NamedKey::PrintScreen) => Key::PrintScreen, - // Scroll not mapped - LogicalKey::Named(NamedKey::Pause) => Key::Pause, - LogicalKey::Named(NamedKey::Insert) => Key::Insert, - LogicalKey::Named(NamedKey::Home) => Key::Home, - LogicalKey::Named(NamedKey::Delete) => Key::Delete, - LogicalKey::Named(NamedKey::End) => Key::End, - LogicalKey::Named(NamedKey::PageDown) => Key::PageDown, - LogicalKey::Named(NamedKey::PageUp) => Key::PageUp, - LogicalKey::Named(NamedKey::ArrowLeft) => Key::ArrowLeft, - LogicalKey::Named(NamedKey::ArrowUp) => Key::ArrowUp, - LogicalKey::Named(NamedKey::ArrowRight) => Key::ArrowRight, - LogicalKey::Named(NamedKey::ArrowDown) => Key::ArrowDown, - LogicalKey::Named(NamedKey::Backspace) => Key::Backspace, - LogicalKey::Named(NamedKey::Enter) => Key::Enter, + NamedKey::Escape => Key::Escape, + 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, + NamedKey::F21 => Key::F21, + NamedKey::F22 => Key::F22, + NamedKey::F23 => Key::F23, + NamedKey::F24 => Key::F24, + NamedKey::F25 => Key::F25, + NamedKey::F26 => Key::F26, + NamedKey::F27 => Key::F27, + NamedKey::F28 => Key::F28, + NamedKey::F29 => Key::F29, + NamedKey::F30 => Key::F30, + NamedKey::F31 => Key::F31, + NamedKey::F32 => Key::F32, + NamedKey::F33 => Key::F33, + NamedKey::F34 => Key::F34, + NamedKey::F35 => Key::F35, + NamedKey::PrintScreen => Key::PrintScreen, + NamedKey::ScrollLock => Key::ScrollLock, + NamedKey::Pause => Key::Pause, + NamedKey::Insert => Key::Insert, + NamedKey::Home => Key::Home, + NamedKey::Delete => Key::Delete, + NamedKey::End => Key::End, + NamedKey::PageDown => Key::PageDown, + NamedKey::PageUp => Key::PageUp, + NamedKey::ArrowLeft => Key::ArrowLeft, + NamedKey::ArrowUp => Key::ArrowUp, + NamedKey::ArrowRight => Key::ArrowRight, + NamedKey::ArrowDown => Key::ArrowDown, + NamedKey::Backspace => Key::Backspace, + NamedKey::Enter => Key::Enter, // printable: Space - LogicalKey::Named(NamedKey::Compose) => Key::Compose, - // Caret not mapped - LogicalKey::Named(NamedKey::NumLock) => Key::NumLock, + NamedKey::Compose => Key::Compose, + NamedKey::NumLock => Key::NumLock, // printable: Numpad0 to Numpad9 - // AbntC1 and AbntC2 not mapped // printable: Add, Apostrophe, - // Apps, At, Ax not mapped // printable: Backslash, - LogicalKey::Named(NamedKey::LaunchApplication2) => Key::LaunchApplication2, - LogicalKey::Named(NamedKey::CapsLock) => Key::CapsLock, + NamedKey::LaunchApplication2 => Key::LaunchApplication2, + NamedKey::CapsLock => Key::CapsLock, // printable: Colon, Comma, - LogicalKey::Named(NamedKey::Convert) => Key::Convert, - // not mapped: Decimal, + NamedKey::Convert => Key::Convert, // printable: Divide, Equals, Grave, - LogicalKey::Named(NamedKey::KanaMode) => Key::KanaMode, - LogicalKey::Named(NamedKey::KanjiMode) => Key::KanjiMode, - LogicalKey::Named(NamedKey::Alt) => Key::Alt, + NamedKey::KanaMode => Key::KanaMode, + NamedKey::KanjiMode => Key::KanjiMode, + NamedKey::Alt => Key::Alt, // printable: LBracket, - LogicalKey::Named(NamedKey::Control) => Key::Control, - LogicalKey::Named(NamedKey::Shift) => Key::Shift, - LogicalKey::Named(NamedKey::Meta) => Key::Meta, - LogicalKey::Named(NamedKey::LaunchMail) => Key::LaunchMail, - // not mapped: MediaSelect, - LogicalKey::Named(NamedKey::MediaStop) => Key::MediaStop, + NamedKey::Control => Key::Control, + NamedKey::Shift => Key::Shift, + NamedKey::Meta => Key::Meta, + NamedKey::LaunchMail => Key::LaunchMail, + NamedKey::MediaStop => Key::MediaStop, // printable: Minus, Multiply, - LogicalKey::Named(NamedKey::AudioVolumeMute) => Key::AudioVolumeMute, - LogicalKey::Named(NamedKey::LaunchApplication1) => Key::LaunchApplication1, - // not mapped: NavigateForward, NavigateBackward - LogicalKey::Named(NamedKey::MediaTrackNext) => Key::MediaTrackNext, - LogicalKey::Named(NamedKey::NonConvert) => Key::NonConvert, + NamedKey::AudioVolumeMute => Key::AudioVolumeMute, + NamedKey::LaunchApplication1 => Key::LaunchApplication1, + NamedKey::MediaTrackNext => Key::MediaTrackNext, + NamedKey::NonConvert => Key::NonConvert, // printable: NumpadComma, NumpadEnter, NumpadEquals, - // not mapped: OEM102, // printable: Period, - LogicalKey::Named(NamedKey::MediaPlayPause) => Key::MediaPlayPause, - LogicalKey::Named(NamedKey::Power) => Key::Power, - LogicalKey::Named(NamedKey::MediaTrackPrevious) => Key::MediaTrackPrevious, + NamedKey::MediaPlayPause => Key::MediaPlayPause, + NamedKey::Power => Key::Power, + NamedKey::MediaTrackPrevious => Key::MediaTrackPrevious, // printable RBracket // printable Semicolon, Slash - LogicalKey::Named(NamedKey::Standby) => Key::Standby, - // not mapped: Stop, + NamedKey::Standby => Key::Standby, // printable Subtract, - // not mapped: Sysrq, - LogicalKey::Named(NamedKey::Tab) => Key::Tab, + NamedKey::Tab => Key::Tab, // printable: Underline, - // not mapped: Unlabeled, - LogicalKey::Named(NamedKey::AudioVolumeDown) => Key::AudioVolumeDown, - LogicalKey::Named(NamedKey::AudioVolumeUp) => Key::AudioVolumeUp, - LogicalKey::Named(NamedKey::WakeUp) => Key::WakeUp, - LogicalKey::Named(NamedKey::BrowserBack) => Key::BrowserBack, - LogicalKey::Named(NamedKey::BrowserFavorites) => Key::BrowserFavorites, - LogicalKey::Named(NamedKey::BrowserForward) => Key::BrowserForward, - LogicalKey::Named(NamedKey::BrowserHome) => Key::BrowserHome, - LogicalKey::Named(NamedKey::BrowserRefresh) => Key::BrowserRefresh, - LogicalKey::Named(NamedKey::BrowserSearch) => Key::BrowserSearch, - LogicalKey::Named(NamedKey::BrowserStop) => Key::BrowserStop, + NamedKey::AudioVolumeDown => Key::AudioVolumeDown, + NamedKey::AudioVolumeUp => Key::AudioVolumeUp, + NamedKey::WakeUp => Key::WakeUp, + NamedKey::BrowserBack => Key::BrowserBack, + NamedKey::BrowserFavorites => Key::BrowserFavorites, + NamedKey::BrowserForward => Key::BrowserForward, + NamedKey::BrowserHome => Key::BrowserHome, + NamedKey::BrowserRefresh => Key::BrowserRefresh, + NamedKey::BrowserSearch => Key::BrowserSearch, + NamedKey::BrowserStop => Key::BrowserStop, // printable Yen, - LogicalKey::Named(NamedKey::Copy) => Key::Copy, - LogicalKey::Named(NamedKey::Paste) => Key::Paste, - LogicalKey::Named(NamedKey::Cut) => Key::Cut, + NamedKey::Copy => Key::Copy, + NamedKey::Paste => Key::Paste, + NamedKey::Cut => Key::Cut, + NamedKey::AltGraph => Key::AltGraph, + NamedKey::Fn => Key::Fn, + NamedKey::FnLock => Key::FnLock, + NamedKey::Symbol => Key::Symbol, + NamedKey::SymbolLock => Key::SymbolLock, + NamedKey::Hyper => Key::Hyper, + NamedKey::Super => Key::Super, + NamedKey::Clear => Key::Clear, + NamedKey::CrSel => Key::CrSel, + NamedKey::EraseEof => Key::EraseEof, + NamedKey::ExSel => Key::ExSel, + NamedKey::Redo => Key::Redo, + NamedKey::Undo => Key::Undo, + NamedKey::Accept => Key::Accept, + NamedKey::Again => Key::Again, + NamedKey::Attn => Key::Attn, + NamedKey::Cancel => Key::Cancel, + NamedKey::ContextMenu => Key::ContextMenu, + NamedKey::Execute => Key::Execute, + NamedKey::Find => Key::Find, + NamedKey::Help => Key::Help, + NamedKey::Play => Key::Play, + NamedKey::Props => Key::Props, + NamedKey::Select => Key::Select, + NamedKey::ZoomIn => Key::ZoomIn, + NamedKey::ZoomOut => Key::ZoomOut, + NamedKey::BrightnessDown => Key::BrightnessDown, + NamedKey::BrightnessUp => Key::BrightnessUp, + NamedKey::Eject => Key::Eject, + NamedKey::LogOff => Key::LogOff, + NamedKey::PowerOff => Key::PowerOff, + NamedKey::Hibernate => Key::Hibernate, + NamedKey::AllCandidates => Key::AllCandidates, + NamedKey::Alphanumeric => Key::Alphanumeric, + NamedKey::CodeInput => Key::CodeInput, + NamedKey::FinalMode => Key::FinalMode, + NamedKey::GroupFirst => Key::GroupFirst, + NamedKey::GroupLast => Key::GroupLast, + NamedKey::GroupNext => Key::GroupNext, + NamedKey::GroupPrevious => Key::GroupPrevious, + NamedKey::ModeChange => Key::ModeChange, + NamedKey::NextCandidate => Key::NextCandidate, + NamedKey::PreviousCandidate => Key::PreviousCandidate, + NamedKey::Process => Key::Process, + NamedKey::SingleCandidate => Key::SingleCandidate, + NamedKey::HangulMode => Key::HangulMode, + NamedKey::HanjaMode => Key::HanjaMode, + NamedKey::JunjaMode => Key::JunjaMode, + NamedKey::Eisu => Key::Eisu, + NamedKey::Hankaku => Key::Hankaku, + NamedKey::Hiragana => Key::Hiragana, + NamedKey::HiraganaKatakana => Key::HiraganaKatakana, + NamedKey::Katakana => Key::Katakana, + NamedKey::Romaji => Key::Romaji, + NamedKey::Zenkaku => Key::Zenkaku, + NamedKey::ZenkakuHankaku => Key::ZenkakuHankaku, + NamedKey::Soft1 => Key::Soft1, + NamedKey::Soft2 => Key::Soft2, + NamedKey::Soft3 => Key::Soft3, + NamedKey::Soft4 => Key::Soft4, + NamedKey::ChannelDown => Key::ChannelDown, + NamedKey::ChannelUp => Key::ChannelUp, + NamedKey::Close => Key::Close, + NamedKey::MailForward => Key::MailForward, + NamedKey::MailReply => Key::MailReply, + NamedKey::MailSend => Key::MailSend, + NamedKey::MediaClose => Key::MediaClose, + NamedKey::MediaFastForward => Key::MediaFastForward, + NamedKey::MediaPause => Key::MediaPause, + NamedKey::MediaPlay => Key::MediaPlay, + NamedKey::MediaRecord => Key::MediaRecord, + NamedKey::MediaRewind => Key::MediaRewind, + NamedKey::New => Key::New, + NamedKey::Open => Key::Open, + NamedKey::Print => Key::Print, + NamedKey::Save => Key::Save, + NamedKey::SpellCheck => Key::SpellCheck, + NamedKey::Key11 => Key::Key11, + NamedKey::Key12 => Key::Key12, + NamedKey::AudioBalanceLeft => Key::AudioBalanceLeft, + NamedKey::AudioBalanceRight => Key::AudioBalanceRight, + NamedKey::AudioBassBoostDown => Key::AudioBassBoostDown, + NamedKey::AudioBassBoostToggle => Key::AudioBassBoostToggle, + NamedKey::AudioBassBoostUp => Key::AudioBassBoostUp, + NamedKey::AudioFaderFront => Key::AudioFaderFront, + NamedKey::AudioFaderRear => Key::AudioFaderRear, + NamedKey::AudioSurroundModeNext => Key::AudioSurroundModeNext, + NamedKey::AudioTrebleDown => Key::AudioTrebleDown, + NamedKey::AudioTrebleUp => Key::AudioTrebleUp, + NamedKey::MicrophoneToggle => Key::MicrophoneToggle, + NamedKey::MicrophoneVolumeDown => Key::MicrophoneVolumeDown, + NamedKey::MicrophoneVolumeUp => Key::MicrophoneVolumeUp, + NamedKey::MicrophoneVolumeMute => Key::MicrophoneVolumeMute, + NamedKey::SpeechCorrectionList => Key::SpeechCorrectionList, + NamedKey::SpeechInputToggle => Key::SpeechInputToggle, + NamedKey::LaunchCalendar => Key::LaunchCalendar, + NamedKey::LaunchContacts => Key::LaunchContacts, + NamedKey::LaunchMediaPlayer => Key::LaunchMediaPlayer, + NamedKey::LaunchMusicPlayer => Key::LaunchMusicPlayer, + NamedKey::LaunchPhone => Key::LaunchPhone, + NamedKey::LaunchScreenSaver => Key::LaunchScreenSaver, + NamedKey::LaunchSpreadsheet => Key::LaunchSpreadsheet, + NamedKey::LaunchWebBrowser => Key::LaunchWebBrowser, + NamedKey::LaunchWebCam => Key::LaunchWebCam, + NamedKey::LaunchWordProcessor => Key::LaunchWordProcessor, + NamedKey::AppSwitch => Key::AppSwitch, + NamedKey::Call => Key::Call, + NamedKey::Camera => Key::Camera, + NamedKey::CameraFocus => Key::CameraFocus, + NamedKey::EndCall => Key::EndCall, + NamedKey::GoBack => Key::GoBack, + NamedKey::GoHome => Key::GoHome, + NamedKey::HeadsetHook => Key::HeadsetHook, + NamedKey::LastNumberRedial => Key::LastNumberRedial, + NamedKey::Notification => Key::Notification, + NamedKey::MannerMode => Key::MannerMode, + NamedKey::VoiceDial => Key::VoiceDial, + NamedKey::TV => Key::TV, + NamedKey::TV3DMode => Key::TV3DMode, + NamedKey::TVAntennaCable => Key::TVAntennaCable, + NamedKey::TVAudioDescription => Key::TVAudioDescription, + NamedKey::TVAudioDescriptionMixDown => Key::TVAudioDescriptionMixDown, + NamedKey::TVAudioDescriptionMixUp => Key::TVAudioDescriptionMixUp, + NamedKey::TVContentsMenu => Key::TVContentsMenu, + NamedKey::TVDataService => Key::TVDataService, + NamedKey::TVInput => Key::TVInput, + NamedKey::TVInputComponent1 => Key::TVInputComponent1, + NamedKey::TVInputComponent2 => Key::TVInputComponent2, + NamedKey::TVInputComposite1 => Key::TVInputComposite1, + NamedKey::TVInputComposite2 => Key::TVInputComposite2, + NamedKey::TVInputHDMI1 => Key::TVInputHDMI1, + NamedKey::TVInputHDMI2 => Key::TVInputHDMI2, + NamedKey::TVInputHDMI3 => Key::TVInputHDMI3, + NamedKey::TVInputHDMI4 => Key::TVInputHDMI4, + NamedKey::TVInputVGA1 => Key::TVInputVGA1, + NamedKey::TVMediaContext => Key::TVMediaContext, + NamedKey::TVNetwork => Key::TVNetwork, + NamedKey::TVNumberEntry => Key::TVNumberEntry, + NamedKey::TVPower => Key::TVPower, + NamedKey::TVRadioService => Key::TVRadioService, + NamedKey::TVSatellite => Key::TVSatellite, + NamedKey::TVSatelliteBS => Key::TVSatelliteBS, + NamedKey::TVSatelliteCS => Key::TVSatelliteCS, + NamedKey::TVSatelliteToggle => Key::TVSatelliteToggle, + NamedKey::TVTerrestrialAnalog => Key::TVTerrestrialAnalog, + NamedKey::TVTerrestrialDigital => Key::TVTerrestrialDigital, + NamedKey::TVTimer => Key::TVTimer, + NamedKey::AVRInput => Key::AVRInput, + NamedKey::AVRPower => Key::AVRPower, + NamedKey::ColorF0Red => Key::ColorF0Red, + NamedKey::ColorF1Green => Key::ColorF1Green, + NamedKey::ColorF2Yellow => Key::ColorF2Yellow, + NamedKey::ColorF3Blue => Key::ColorF3Blue, + NamedKey::ColorF4Grey => Key::ColorF4Grey, + NamedKey::ColorF5Brown => Key::ColorF5Brown, + NamedKey::ClosedCaptionToggle => Key::ClosedCaptionToggle, + NamedKey::Dimmer => Key::Dimmer, + NamedKey::DisplaySwap => Key::DisplaySwap, + NamedKey::DVR => Key::DVR, + NamedKey::Exit => Key::Exit, + NamedKey::FavoriteClear0 => Key::FavoriteClear0, + NamedKey::FavoriteClear1 => Key::FavoriteClear1, + NamedKey::FavoriteClear2 => Key::FavoriteClear2, + NamedKey::FavoriteClear3 => Key::FavoriteClear3, + NamedKey::FavoriteRecall0 => Key::FavoriteRecall0, + NamedKey::FavoriteRecall1 => Key::FavoriteRecall1, + NamedKey::FavoriteRecall2 => Key::FavoriteRecall2, + NamedKey::FavoriteRecall3 => Key::FavoriteRecall3, + NamedKey::FavoriteStore0 => Key::FavoriteStore0, + NamedKey::FavoriteStore1 => Key::FavoriteStore1, + NamedKey::FavoriteStore2 => Key::FavoriteStore2, + NamedKey::FavoriteStore3 => Key::FavoriteStore3, + NamedKey::Guide => Key::Guide, + NamedKey::GuideNextDay => Key::GuideNextDay, + NamedKey::GuidePreviousDay => Key::GuidePreviousDay, + NamedKey::Info => Key::Info, + NamedKey::InstantReplay => Key::InstantReplay, + NamedKey::Link => Key::Link, + NamedKey::ListProgram => Key::ListProgram, + NamedKey::LiveContent => Key::LiveContent, + NamedKey::Lock => Key::Lock, + NamedKey::MediaApps => Key::MediaApps, + NamedKey::MediaAudioTrack => Key::MediaAudioTrack, + NamedKey::MediaLast => Key::MediaLast, + NamedKey::MediaSkipBackward => Key::MediaSkipBackward, + NamedKey::MediaSkipForward => Key::MediaSkipForward, + NamedKey::MediaStepBackward => Key::MediaStepBackward, + NamedKey::MediaStepForward => Key::MediaStepForward, + NamedKey::MediaTopMenu => Key::MediaTopMenu, + NamedKey::NavigateIn => Key::NavigateIn, + NamedKey::NavigateNext => Key::NavigateNext, + NamedKey::NavigateOut => Key::NavigateOut, + NamedKey::NavigatePrevious => Key::NavigatePrevious, + NamedKey::NextFavoriteChannel => Key::NextFavoriteChannel, + NamedKey::NextUserProfile => Key::NextUserProfile, + NamedKey::OnDemand => Key::OnDemand, + NamedKey::Pairing => Key::Pairing, + NamedKey::PinPDown => Key::PinPDown, + NamedKey::PinPMove => Key::PinPMove, + NamedKey::PinPToggle => Key::PinPToggle, + NamedKey::PinPUp => Key::PinPUp, + NamedKey::PlaySpeedDown => Key::PlaySpeedDown, + NamedKey::PlaySpeedReset => Key::PlaySpeedReset, + NamedKey::PlaySpeedUp => Key::PlaySpeedUp, + NamedKey::RandomToggle => Key::RandomToggle, + NamedKey::RcLowBattery => Key::RcLowBattery, + NamedKey::RecordSpeedNext => Key::RecordSpeedNext, + NamedKey::RfBypass => Key::RfBypass, + NamedKey::ScanChannelsToggle => Key::ScanChannelsToggle, + NamedKey::ScreenModeNext => Key::ScreenModeNext, + NamedKey::Settings => Key::Settings, + NamedKey::SplitScreenToggle => Key::SplitScreenToggle, + NamedKey::STBInput => Key::STBInput, + NamedKey::STBPower => Key::STBPower, + NamedKey::Subtitle => Key::Subtitle, + NamedKey::Teletext => Key::Teletext, + NamedKey::VideoModeNext => Key::VideoModeNext, + NamedKey::Wink => Key::Wink, + NamedKey::ZoomToggle => Key::ZoomToggle, + + NamedKey::Space => Key::Character(" ".to_string()), _ => Key::Unidentified, } } @@ -125,7 +362,6 @@ fn get_servo_location_from_physical_key(physical_key: PhysicalKey) -> Location { return Location::Standard; }; - // TODO: add more numpad keys match key_code { KeyCode::ShiftLeft | KeyCode::ControlLeft | KeyCode::AltLeft | KeyCode::SuperLeft => { Location::Left @@ -142,20 +378,37 @@ fn get_servo_location_from_physical_key(physical_key: PhysicalKey) -> Location { KeyCode::Numpad6 | KeyCode::Numpad7 | KeyCode::Numpad8 | - KeyCode::Numpad9 => Location::Numpad, - KeyCode::NumpadComma | KeyCode::NumpadEnter | KeyCode::NumpadEqual => Location::Numpad, + KeyCode::Numpad9 | + KeyCode::NumpadAdd | + KeyCode::NumpadBackspace | + KeyCode::NumpadClear | + KeyCode::NumpadClearEntry | + KeyCode::NumpadComma | + KeyCode::NumpadDecimal | + KeyCode::NumpadDivide | + KeyCode::NumpadEnter | + KeyCode::NumpadEqual | + KeyCode::NumpadHash | + KeyCode::NumpadMemoryAdd | + KeyCode::NumpadMemoryClear | + KeyCode::NumpadMemoryRecall | + KeyCode::NumpadMemoryStore | + KeyCode::NumpadMemorySubtract | + KeyCode::NumpadMultiply | + KeyCode::NumpadParenLeft | + KeyCode::NumpadParenRight | + KeyCode::NumpadStar | + KeyCode::NumpadSubtract => Location::Numpad, _ => Location::Standard, } } fn get_servo_code_from_physical_key(physical_key: PhysicalKey) -> Code { - let key_code = if let PhysicalKey::Code(key_code) = physical_key { - key_code - } else { - return Code::Unidentified; + let key_code = match physical_key { + PhysicalKey::Code(key_code) => key_code, + PhysicalKey::Unidentified(_os_code) => return Code::Unidentified, }; - // TODO: Map more codes match key_code { KeyCode::Escape => Code::Escape, KeyCode::Digit1 => Code::Digit1, @@ -232,12 +485,134 @@ fn get_servo_code_from_physical_key(physical_key: PhysicalKey) -> Code { KeyCode::ArrowLeft => Code::ArrowLeft, KeyCode::ArrowRight => Code::ArrowRight, + KeyCode::SuperLeft => Code::MetaLeft, + KeyCode::SuperRight => Code::MetaRight, + KeyCode::Home => Code::Home, KeyCode::End => Code::End, KeyCode::ArrowDown => Code::ArrowDown, KeyCode::PageDown => Code::PageDown, KeyCode::Insert => Code::Insert, KeyCode::Delete => Code::Delete, + KeyCode::Backquote => Code::Backquote, + KeyCode::Equal => Code::Equal, + KeyCode::IntlBackslash => Code::IntlBackslash, + KeyCode::IntlRo => Code::IntlRo, + KeyCode::IntlYen => Code::IntlYen, + KeyCode::Minus => Code::Minus, + KeyCode::AltLeft => Code::AltLeft, + KeyCode::AltRight => Code::AltRight, + KeyCode::CapsLock => Code::CapsLock, + KeyCode::ContextMenu => Code::ContextMenu, + KeyCode::ControlLeft => Code::ControlLeft, + KeyCode::ControlRight => Code::ControlRight, + KeyCode::Convert => Code::Convert, + KeyCode::KanaMode => Code::KanaMode, + KeyCode::Lang1 => Code::Lang1, + KeyCode::Lang2 => Code::Lang2, + KeyCode::Lang3 => Code::Lang3, + KeyCode::Lang4 => Code::Lang4, + KeyCode::Lang5 => Code::Lang5, + KeyCode::NonConvert => Code::NonConvert, + KeyCode::Help => Code::Help, + KeyCode::NumLock => Code::NumLock, + KeyCode::Numpad0 => Code::Numpad0, + KeyCode::Numpad1 => Code::Numpad1, + KeyCode::Numpad2 => Code::Numpad2, + KeyCode::Numpad3 => Code::Numpad3, + KeyCode::Numpad4 => Code::Numpad4, + KeyCode::Numpad5 => Code::Numpad5, + KeyCode::Numpad6 => Code::Numpad6, + KeyCode::Numpad7 => Code::Numpad7, + KeyCode::Numpad8 => Code::Numpad8, + KeyCode::Numpad9 => Code::Numpad9, + KeyCode::NumpadAdd => Code::NumpadAdd, + KeyCode::NumpadBackspace => Code::NumpadBackspace, + KeyCode::NumpadClear => Code::NumpadClear, + KeyCode::NumpadClearEntry => Code::NumpadClearEntry, + KeyCode::NumpadComma => Code::NumpadComma, + KeyCode::NumpadDecimal => Code::NumpadDecimal, + KeyCode::NumpadDivide => Code::NumpadDivide, + KeyCode::NumpadEnter => Code::NumpadEnter, + KeyCode::NumpadEqual => Code::NumpadEqual, + KeyCode::NumpadHash => Code::NumpadHash, + KeyCode::NumpadMemoryAdd => Code::NumpadMemoryAdd, + KeyCode::NumpadMemoryClear => Code::NumpadMemoryClear, + KeyCode::NumpadMemoryRecall => Code::NumpadMemoryRecall, + KeyCode::NumpadMemoryStore => Code::NumpadMemoryStore, + KeyCode::NumpadMemorySubtract => Code::NumpadMemorySubtract, + KeyCode::NumpadMultiply => Code::NumpadMultiply, + KeyCode::NumpadParenLeft => Code::NumpadParenLeft, + KeyCode::NumpadParenRight => Code::NumpadParenRight, + KeyCode::NumpadStar => Code::NumpadStar, + KeyCode::NumpadSubtract => Code::NumpadSubtract, + KeyCode::Fn => Code::Fn, + KeyCode::FnLock => Code::FnLock, + KeyCode::PrintScreen => Code::PrintScreen, + KeyCode::ScrollLock => Code::ScrollLock, + KeyCode::Pause => Code::Pause, + KeyCode::BrowserBack => Code::BrowserBack, + KeyCode::BrowserFavorites => Code::BrowserFavorites, + KeyCode::BrowserForward => Code::BrowserForward, + KeyCode::BrowserHome => Code::BrowserHome, + KeyCode::BrowserRefresh => Code::BrowserRefresh, + KeyCode::BrowserSearch => Code::BrowserSearch, + KeyCode::BrowserStop => Code::BrowserStop, + KeyCode::Eject => Code::Eject, + KeyCode::LaunchApp1 => Code::LaunchApp1, + KeyCode::LaunchApp2 => Code::LaunchApp2, + KeyCode::LaunchMail => Code::LaunchMail, + KeyCode::MediaPlayPause => Code::MediaPlayPause, + KeyCode::MediaSelect => Code::MediaSelect, + KeyCode::MediaStop => Code::MediaStop, + KeyCode::MediaTrackNext => Code::MediaTrackNext, + KeyCode::MediaTrackPrevious => Code::MediaTrackPrevious, + KeyCode::Power => Code::Power, + KeyCode::Sleep => Code::Sleep, + KeyCode::AudioVolumeDown => Code::AudioVolumeDown, + KeyCode::AudioVolumeMute => Code::AudioVolumeMute, + KeyCode::AudioVolumeUp => Code::AudioVolumeUp, + KeyCode::WakeUp => Code::WakeUp, + KeyCode::Meta => Code::Super, + KeyCode::Hyper => Code::Hyper, + KeyCode::Turbo => Code::Turbo, + KeyCode::Abort => Code::Abort, + KeyCode::Resume => Code::Resume, + KeyCode::Suspend => Code::Suspend, + KeyCode::Again => Code::Again, + KeyCode::Copy => Code::Copy, + KeyCode::Cut => Code::Cut, + KeyCode::Find => Code::Find, + KeyCode::Open => Code::Open, + KeyCode::Paste => Code::Paste, + KeyCode::Props => Code::Props, + KeyCode::Select => Code::Select, + KeyCode::Undo => Code::Undo, + KeyCode::Hiragana => Code::Hiragana, + KeyCode::Katakana => Code::Katakana, + KeyCode::F13 => Code::F13, + KeyCode::F14 => Code::F14, + KeyCode::F15 => Code::F15, + KeyCode::F16 => Code::F16, + KeyCode::F17 => Code::F17, + KeyCode::F18 => Code::F18, + KeyCode::F19 => Code::F19, + KeyCode::F20 => Code::F20, + KeyCode::F21 => Code::F21, + KeyCode::F22 => Code::F22, + KeyCode::F23 => Code::F23, + KeyCode::F24 => Code::F24, + KeyCode::F25 => Code::F25, + KeyCode::F26 => Code::F26, + KeyCode::F27 => Code::F27, + KeyCode::F28 => Code::F28, + KeyCode::F29 => Code::F29, + KeyCode::F30 => Code::F30, + KeyCode::F31 => Code::F31, + KeyCode::F32 => Code::F32, + KeyCode::F33 => Code::F33, + KeyCode::F34 => Code::F34, + KeyCode::F35 => Code::F35, _ => Code::Unidentified, }