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.
This commit is contained in:
Magnus Larsen 2024-05-13 05:22:01 -07:00 committed by GitHub
parent 385f6f93bf
commit c0494e2e83
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 482 additions and 103 deletions

32
Cargo.lock generated
View file

@ -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",

View file

@ -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"

View file

@ -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 {

View file

@ -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,
}