diff options
-rw-r--r-- | ports/servoshell/desktop/keyutils.rs | 1151 |
1 files changed, 551 insertions, 600 deletions
diff --git a/ports/servoshell/desktop/keyutils.rs b/ports/servoshell/desktop/keyutils.rs index 8b71b56e838..0a3b90724c5 100644 --- a/ports/servoshell/desktop/keyutils.rs +++ b/ports/servoshell/desktop/keyutils.rs @@ -3,9 +3,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers}; -use log::info; use winit::event::{ElementState, KeyEvent}; -use winit::keyboard::{Key as LogicalKey, KeyCode, ModifiersState, NamedKey, PhysicalKey}; +use winit::keyboard::{ + Key as WinitKey, KeyCode, KeyLocation as WinitKeyLocation, ModifiersState, NamedKey, + PhysicalKey, +}; // Some shortcuts use Cmd on Mac and Control on other systems. #[cfg(target_os = "macos")] @@ -19,606 +21,559 @@ pub const CMD_OR_ALT: Modifiers = Modifiers::META; #[cfg(not(target_os = "macos"))] pub const CMD_OR_ALT: Modifiers = Modifiers::ALT; -fn get_servo_key_from_winit_key(key: &LogicalKey) -> 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 - 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 - NamedKey::Compose => Key::Compose, - NamedKey::NumLock => Key::NumLock, - // printable: Numpad0 to Numpad9 - // printable: Add, Apostrophe, - // printable: Backslash, - NamedKey::LaunchApplication2 => Key::LaunchApplication2, - NamedKey::CapsLock => Key::CapsLock, - // printable: Colon, Comma, - NamedKey::Convert => Key::Convert, - // printable: Divide, Equals, Grave, - NamedKey::KanaMode => Key::KanaMode, - NamedKey::KanjiMode => Key::KanjiMode, - NamedKey::Alt => Key::Alt, - // printable: LBracket, - NamedKey::Control => Key::Control, - NamedKey::Shift => Key::Shift, - NamedKey::Meta => Key::Meta, - NamedKey::LaunchMail => Key::LaunchMail, - NamedKey::MediaStop => Key::MediaStop, - // printable: Minus, Multiply, - NamedKey::AudioVolumeMute => Key::AudioVolumeMute, - NamedKey::LaunchApplication1 => Key::LaunchApplication1, - NamedKey::MediaTrackNext => Key::MediaTrackNext, - NamedKey::NonConvert => Key::NonConvert, - // printable: NumpadComma, NumpadEnter, NumpadEquals, - // printable: Period, - NamedKey::MediaPlayPause => Key::MediaPlayPause, - NamedKey::Power => Key::Power, - NamedKey::MediaTrackPrevious => Key::MediaTrackPrevious, - // printable RBracket - // printable Semicolon, Slash - NamedKey::Standby => Key::Standby, - // printable Subtract, - NamedKey::Tab => Key::Tab, - // printable: Underline, - 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, - 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, - } +trait FromWinitKeyEvent { + fn from_winit_key_event(key_event: &KeyEvent) -> Self; } -fn get_servo_location_from_physical_key(physical_key: PhysicalKey) -> Location { - let key_code = if let PhysicalKey::Code(key_code) = physical_key { - key_code - } else { - return Location::Standard; - }; +impl FromWinitKeyEvent for Key { + fn from_winit_key_event(key_event: &KeyEvent) -> Self { + let named_key = match key_event.logical_key { + WinitKey::Named(named_key) => named_key, + WinitKey::Character(ref string) => return Key::Character(string.to_string()), + WinitKey::Unidentified(_) => return Key::Unidentified, + WinitKey::Dead(_) => return Key::Unidentified, + }; - match key_code { - KeyCode::ShiftLeft | KeyCode::ControlLeft | KeyCode::AltLeft | KeyCode::SuperLeft => { - Location::Left - }, - KeyCode::ShiftRight | KeyCode::ControlRight | KeyCode::AltRight | KeyCode::SuperRight => { - Location::Right - }, - KeyCode::Numpad0 | - KeyCode::Numpad1 | - KeyCode::Numpad2 | - KeyCode::Numpad3 | - KeyCode::Numpad4 | - KeyCode::Numpad5 | - KeyCode::Numpad6 | - KeyCode::Numpad7 | - KeyCode::Numpad8 | - 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, + match named_key { + NamedKey::AVRInput => Key::AVRInput, + NamedKey::AVRPower => Key::AVRPower, + NamedKey::Accept => Key::Accept, + NamedKey::Again => Key::Again, + NamedKey::AllCandidates => Key::AllCandidates, + NamedKey::Alphanumeric => Key::Alphanumeric, + NamedKey::Alt => Key::Alt, + NamedKey::AltGraph => Key::AltGraph, + NamedKey::AppSwitch => Key::AppSwitch, + NamedKey::ArrowDown => Key::ArrowDown, + NamedKey::ArrowLeft => Key::ArrowLeft, + NamedKey::ArrowRight => Key::ArrowRight, + NamedKey::ArrowUp => Key::ArrowUp, + NamedKey::Attn => Key::Attn, + 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::AudioVolumeDown => Key::AudioVolumeDown, + NamedKey::AudioVolumeMute => Key::AudioVolumeMute, + NamedKey::AudioVolumeUp => Key::AudioVolumeUp, + NamedKey::Backspace => Key::Backspace, + NamedKey::BrightnessDown => Key::BrightnessDown, + NamedKey::BrightnessUp => Key::BrightnessUp, + 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, + NamedKey::Call => Key::Call, + NamedKey::Camera => Key::Camera, + NamedKey::CameraFocus => Key::CameraFocus, + NamedKey::Cancel => Key::Cancel, + NamedKey::CapsLock => Key::CapsLock, + NamedKey::ChannelDown => Key::ChannelDown, + NamedKey::ChannelUp => Key::ChannelUp, + NamedKey::Clear => Key::Clear, + NamedKey::Close => Key::Close, + NamedKey::ClosedCaptionToggle => Key::ClosedCaptionToggle, + NamedKey::CodeInput => Key::CodeInput, + 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::Compose => Key::Compose, + NamedKey::ContextMenu => Key::ContextMenu, + NamedKey::Control => Key::Control, + NamedKey::Convert => Key::Convert, + NamedKey::Copy => Key::Copy, + NamedKey::CrSel => Key::CrSel, + NamedKey::Cut => Key::Cut, + NamedKey::DVR => Key::DVR, + NamedKey::Delete => Key::Delete, + NamedKey::Dimmer => Key::Dimmer, + NamedKey::DisplaySwap => Key::DisplaySwap, + NamedKey::Eisu => Key::Eisu, + NamedKey::Eject => Key::Eject, + NamedKey::End => Key::End, + NamedKey::EndCall => Key::EndCall, + NamedKey::Enter => Key::Enter, + NamedKey::EraseEof => Key::EraseEof, + NamedKey::Escape => Key::Escape, + NamedKey::ExSel => Key::ExSel, + NamedKey::Execute => Key::Execute, + NamedKey::Exit => Key::Exit, + NamedKey::F1 => Key::F1, + 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::F2 => Key::F2, + 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::F3 => Key::F3, + 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::F4 => Key::F4, + NamedKey::F5 => Key::F5, + NamedKey::F6 => Key::F6, + NamedKey::F7 => Key::F7, + NamedKey::F8 => Key::F8, + NamedKey::F9 => Key::F9, + 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::FinalMode => Key::FinalMode, + NamedKey::Find => Key::Find, + NamedKey::Fn => Key::Fn, + NamedKey::FnLock => Key::FnLock, + NamedKey::GoBack => Key::GoBack, + NamedKey::GoHome => Key::GoHome, + NamedKey::GroupFirst => Key::GroupFirst, + NamedKey::GroupLast => Key::GroupLast, + NamedKey::GroupNext => Key::GroupNext, + NamedKey::GroupPrevious => Key::GroupPrevious, + NamedKey::Guide => Key::Guide, + NamedKey::GuideNextDay => Key::GuideNextDay, + NamedKey::GuidePreviousDay => Key::GuidePreviousDay, + NamedKey::HangulMode => Key::HangulMode, + NamedKey::HanjaMode => Key::HanjaMode, + NamedKey::Hankaku => Key::Hankaku, + NamedKey::HeadsetHook => Key::HeadsetHook, + NamedKey::Help => Key::Help, + NamedKey::Hibernate => Key::Hibernate, + NamedKey::Hiragana => Key::Hiragana, + NamedKey::HiraganaKatakana => Key::HiraganaKatakana, + NamedKey::Home => Key::Home, + NamedKey::Hyper => Key::Hyper, + NamedKey::Info => Key::Info, + NamedKey::Insert => Key::Insert, + NamedKey::InstantReplay => Key::InstantReplay, + NamedKey::JunjaMode => Key::JunjaMode, + NamedKey::KanaMode => Key::KanaMode, + NamedKey::KanjiMode => Key::KanjiMode, + NamedKey::Katakana => Key::Katakana, + NamedKey::Key11 => Key::Key11, + NamedKey::Key12 => Key::Key12, + NamedKey::LastNumberRedial => Key::LastNumberRedial, + NamedKey::LaunchApplication1 => Key::LaunchApplication1, + NamedKey::LaunchApplication2 => Key::LaunchApplication2, + NamedKey::LaunchCalendar => Key::LaunchCalendar, + NamedKey::LaunchContacts => Key::LaunchContacts, + NamedKey::LaunchMail => Key::LaunchMail, + 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::Link => Key::Link, + NamedKey::ListProgram => Key::ListProgram, + NamedKey::LiveContent => Key::LiveContent, + NamedKey::Lock => Key::Lock, + NamedKey::LogOff => Key::LogOff, + NamedKey::MailForward => Key::MailForward, + NamedKey::MailReply => Key::MailReply, + NamedKey::MailSend => Key::MailSend, + NamedKey::MannerMode => Key::MannerMode, + NamedKey::MediaApps => Key::MediaApps, + NamedKey::MediaAudioTrack => Key::MediaAudioTrack, + NamedKey::MediaClose => Key::MediaClose, + NamedKey::MediaFastForward => Key::MediaFastForward, + NamedKey::MediaLast => Key::MediaLast, + NamedKey::MediaPause => Key::MediaPause, + NamedKey::MediaPlay => Key::MediaPlay, + NamedKey::MediaPlayPause => Key::MediaPlayPause, + NamedKey::MediaRecord => Key::MediaRecord, + NamedKey::MediaRewind => Key::MediaRewind, + NamedKey::MediaSkipBackward => Key::MediaSkipBackward, + NamedKey::MediaSkipForward => Key::MediaSkipForward, + NamedKey::MediaStepBackward => Key::MediaStepBackward, + NamedKey::MediaStepForward => Key::MediaStepForward, + NamedKey::MediaStop => Key::MediaStop, + NamedKey::MediaTopMenu => Key::MediaTopMenu, + NamedKey::MediaTrackNext => Key::MediaTrackNext, + NamedKey::MediaTrackPrevious => Key::MediaTrackPrevious, + NamedKey::Meta => Key::Meta, + NamedKey::MicrophoneToggle => Key::MicrophoneToggle, + NamedKey::MicrophoneVolumeDown => Key::MicrophoneVolumeDown, + NamedKey::MicrophoneVolumeMute => Key::MicrophoneVolumeMute, + NamedKey::MicrophoneVolumeUp => Key::MicrophoneVolumeUp, + NamedKey::ModeChange => Key::ModeChange, + NamedKey::NavigateIn => Key::NavigateIn, + NamedKey::NavigateNext => Key::NavigateNext, + NamedKey::NavigateOut => Key::NavigateOut, + NamedKey::NavigatePrevious => Key::NavigatePrevious, + NamedKey::New => Key::New, + NamedKey::NextCandidate => Key::NextCandidate, + NamedKey::NextFavoriteChannel => Key::NextFavoriteChannel, + NamedKey::NextUserProfile => Key::NextUserProfile, + NamedKey::NonConvert => Key::NonConvert, + NamedKey::Notification => Key::Notification, + NamedKey::NumLock => Key::NumLock, + NamedKey::OnDemand => Key::OnDemand, + NamedKey::Open => Key::Open, + NamedKey::PageDown => Key::PageDown, + NamedKey::PageUp => Key::PageUp, + NamedKey::Pairing => Key::Pairing, + NamedKey::Paste => Key::Paste, + NamedKey::Pause => Key::Pause, + NamedKey::PinPDown => Key::PinPDown, + NamedKey::PinPMove => Key::PinPMove, + NamedKey::PinPToggle => Key::PinPToggle, + NamedKey::PinPUp => Key::PinPUp, + NamedKey::Play => Key::Play, + NamedKey::PlaySpeedDown => Key::PlaySpeedDown, + NamedKey::PlaySpeedReset => Key::PlaySpeedReset, + NamedKey::PlaySpeedUp => Key::PlaySpeedUp, + NamedKey::Power => Key::Power, + NamedKey::PowerOff => Key::PowerOff, + NamedKey::PreviousCandidate => Key::PreviousCandidate, + NamedKey::Print => Key::Print, + NamedKey::PrintScreen => Key::PrintScreen, + NamedKey::Process => Key::Process, + NamedKey::Props => Key::Props, + NamedKey::RandomToggle => Key::RandomToggle, + NamedKey::RcLowBattery => Key::RcLowBattery, + NamedKey::RecordSpeedNext => Key::RecordSpeedNext, + NamedKey::Redo => Key::Redo, + NamedKey::RfBypass => Key::RfBypass, + NamedKey::Romaji => Key::Romaji, + NamedKey::STBInput => Key::STBInput, + NamedKey::STBPower => Key::STBPower, + NamedKey::Save => Key::Save, + NamedKey::ScanChannelsToggle => Key::ScanChannelsToggle, + NamedKey::ScreenModeNext => Key::ScreenModeNext, + NamedKey::ScrollLock => Key::ScrollLock, + NamedKey::Select => Key::Select, + NamedKey::Settings => Key::Settings, + NamedKey::Shift => Key::Shift, + NamedKey::SingleCandidate => Key::SingleCandidate, + NamedKey::Soft1 => Key::Soft1, + NamedKey::Soft2 => Key::Soft2, + NamedKey::Soft3 => Key::Soft3, + NamedKey::Soft4 => Key::Soft4, + NamedKey::Space => Key::Character(" ".to_string()), + NamedKey::SpeechCorrectionList => Key::SpeechCorrectionList, + NamedKey::SpeechInputToggle => Key::SpeechInputToggle, + NamedKey::SpellCheck => Key::SpellCheck, + NamedKey::SplitScreenToggle => Key::SplitScreenToggle, + NamedKey::Standby => Key::Standby, + NamedKey::Subtitle => Key::Subtitle, + NamedKey::Super => Key::Super, + NamedKey::Symbol => Key::Symbol, + NamedKey::SymbolLock => Key::SymbolLock, + 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::Tab => Key::Tab, + NamedKey::Teletext => Key::Teletext, + NamedKey::Undo => Key::Undo, + NamedKey::VideoModeNext => Key::VideoModeNext, + NamedKey::VoiceDial => Key::VoiceDial, + NamedKey::WakeUp => Key::WakeUp, + NamedKey::Wink => Key::Wink, + NamedKey::Zenkaku => Key::Zenkaku, + NamedKey::ZenkakuHankaku => Key::ZenkakuHankaku, + NamedKey::ZoomIn => Key::ZoomIn, + NamedKey::ZoomOut => Key::ZoomOut, + NamedKey::ZoomToggle => Key::ZoomToggle, + _ => Key::Unidentified, + } } } -fn get_servo_code_from_physical_key(physical_key: PhysicalKey) -> Code { - let key_code = match physical_key { - PhysicalKey::Code(key_code) => key_code, - PhysicalKey::Unidentified(_os_code) => return Code::Unidentified, - }; - - match key_code { - KeyCode::Escape => Code::Escape, - KeyCode::Digit1 => Code::Digit1, - KeyCode::Digit2 => Code::Digit2, - KeyCode::Digit3 => Code::Digit3, - KeyCode::Digit4 => Code::Digit4, - KeyCode::Digit5 => Code::Digit5, - KeyCode::Digit6 => Code::Digit6, - KeyCode::Digit7 => Code::Digit7, - KeyCode::Digit8 => Code::Digit8, - KeyCode::Digit9 => Code::Digit9, - KeyCode::Digit0 => Code::Digit0, - - KeyCode::Backspace => Code::Backspace, - KeyCode::Tab => Code::Tab, - KeyCode::KeyQ => Code::KeyQ, - KeyCode::KeyW => Code::KeyW, - KeyCode::KeyE => Code::KeyE, - KeyCode::KeyR => Code::KeyR, - KeyCode::KeyT => Code::KeyT, - KeyCode::KeyY => Code::KeyY, - KeyCode::KeyU => Code::KeyU, - KeyCode::KeyI => Code::KeyI, - KeyCode::KeyO => Code::KeyO, - KeyCode::KeyP => Code::KeyP, - KeyCode::BracketLeft => Code::BracketLeft, - KeyCode::BracketRight => Code::BracketRight, - KeyCode::Enter => Code::Enter, - - KeyCode::KeyA => Code::KeyA, - KeyCode::KeyS => Code::KeyS, - KeyCode::KeyD => Code::KeyD, - KeyCode::KeyF => Code::KeyF, - KeyCode::KeyG => Code::KeyG, - KeyCode::KeyH => Code::KeyH, - KeyCode::KeyJ => Code::KeyJ, - KeyCode::KeyK => Code::KeyK, - KeyCode::KeyL => Code::KeyL, - KeyCode::Semicolon => Code::Semicolon, - KeyCode::Quote => Code::Quote, - - KeyCode::ShiftLeft => Code::ShiftLeft, - KeyCode::Backslash => Code::Backslash, - KeyCode::KeyZ => Code::KeyZ, - KeyCode::KeyX => Code::KeyX, - KeyCode::KeyC => Code::KeyC, - KeyCode::KeyV => Code::KeyV, - KeyCode::KeyB => Code::KeyB, - KeyCode::KeyN => Code::KeyN, - KeyCode::KeyM => Code::KeyM, - KeyCode::Comma => Code::Comma, - KeyCode::Period => Code::Period, - KeyCode::Slash => Code::Slash, - KeyCode::ShiftRight => Code::ShiftRight, - - KeyCode::Space => Code::Space, - - KeyCode::F1 => Code::F1, - KeyCode::F2 => Code::F2, - KeyCode::F3 => Code::F3, - KeyCode::F4 => Code::F4, - KeyCode::F5 => Code::F5, - KeyCode::F6 => Code::F6, - KeyCode::F7 => Code::F7, - KeyCode::F8 => Code::F8, - KeyCode::F9 => Code::F9, - KeyCode::F10 => Code::F10, - - KeyCode::F11 => Code::F11, - KeyCode::F12 => Code::F12, - - KeyCode::ArrowUp => Code::ArrowUp, - KeyCode::PageUp => Code::PageUp, - KeyCode::ArrowLeft => Code::ArrowLeft, - KeyCode::ArrowRight => Code::ArrowRight, +impl FromWinitKeyEvent for Location { + fn from_winit_key_event(key_event: &KeyEvent) -> Self { + match key_event.location { + WinitKeyLocation::Left => Location::Left, + WinitKeyLocation::Numpad => Location::Numpad, + WinitKeyLocation::Right => Location::Right, + WinitKeyLocation::Standard => Location::Standard, + } + } +} - KeyCode::SuperLeft => Code::MetaLeft, - KeyCode::SuperRight => Code::MetaRight, +impl FromWinitKeyEvent for Code { + fn from_winit_key_event(key_event: &KeyEvent) -> Self { + let key_code = match key_event.physical_key { + PhysicalKey::Code(key_code) => key_code, + PhysicalKey::Unidentified(_os_code) => return Code::Unidentified, + }; - 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, + match key_code { + KeyCode::Abort => Code::Abort, + KeyCode::Again => Code::Again, + KeyCode::AltLeft => Code::AltLeft, + KeyCode::AltRight => Code::AltRight, + KeyCode::ArrowDown => Code::ArrowDown, + KeyCode::ArrowLeft => Code::ArrowLeft, + KeyCode::ArrowRight => Code::ArrowRight, + KeyCode::ArrowUp => Code::ArrowUp, + KeyCode::AudioVolumeDown => Code::AudioVolumeDown, + KeyCode::AudioVolumeMute => Code::AudioVolumeMute, + KeyCode::AudioVolumeUp => Code::AudioVolumeUp, + KeyCode::Backquote => Code::Backquote, + KeyCode::Backslash => Code::Backslash, + KeyCode::Backspace => Code::Backspace, + KeyCode::BracketLeft => Code::BracketLeft, + KeyCode::BracketRight => Code::BracketRight, + 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::CapsLock => Code::CapsLock, + KeyCode::Comma => Code::Comma, + KeyCode::ContextMenu => Code::ContextMenu, + KeyCode::ControlLeft => Code::ControlLeft, + KeyCode::ControlRight => Code::ControlRight, + KeyCode::Convert => Code::Convert, + KeyCode::Copy => Code::Copy, + KeyCode::Cut => Code::Cut, + KeyCode::Delete => Code::Delete, + KeyCode::Digit0 => Code::Digit0, + KeyCode::Digit1 => Code::Digit1, + KeyCode::Digit2 => Code::Digit2, + KeyCode::Digit3 => Code::Digit3, + KeyCode::Digit4 => Code::Digit4, + KeyCode::Digit5 => Code::Digit5, + KeyCode::Digit6 => Code::Digit6, + KeyCode::Digit7 => Code::Digit7, + KeyCode::Digit8 => Code::Digit8, + KeyCode::Digit9 => Code::Digit9, + KeyCode::Eject => Code::Eject, + KeyCode::End => Code::End, + KeyCode::Enter => Code::Enter, + KeyCode::Equal => Code::Equal, + KeyCode::Escape => Code::Escape, + KeyCode::F1 => Code::F1, + KeyCode::F10 => Code::F10, + KeyCode::F11 => Code::F11, + KeyCode::F12 => Code::F12, + 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::F2 => Code::F2, + 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::F3 => Code::F3, + KeyCode::F30 => Code::F30, + KeyCode::F31 => Code::F31, + KeyCode::F32 => Code::F32, + KeyCode::F33 => Code::F33, + KeyCode::F34 => Code::F34, + KeyCode::F35 => Code::F35, + KeyCode::F4 => Code::F4, + KeyCode::F5 => Code::F5, + KeyCode::F6 => Code::F6, + KeyCode::F7 => Code::F7, + KeyCode::F8 => Code::F8, + KeyCode::F9 => Code::F9, + KeyCode::Find => Code::Find, + KeyCode::Fn => Code::Fn, + KeyCode::FnLock => Code::FnLock, + KeyCode::Help => Code::Help, + KeyCode::Hiragana => Code::Hiragana, + KeyCode::Home => Code::Home, + KeyCode::Hyper => Code::Hyper, + KeyCode::Insert => Code::Insert, + KeyCode::IntlBackslash => Code::IntlBackslash, + KeyCode::IntlRo => Code::IntlRo, + KeyCode::IntlYen => Code::IntlYen, + KeyCode::KanaMode => Code::KanaMode, + KeyCode::Katakana => Code::Katakana, + KeyCode::KeyA => Code::KeyA, + KeyCode::KeyB => Code::KeyB, + KeyCode::KeyC => Code::KeyC, + KeyCode::KeyD => Code::KeyD, + KeyCode::KeyE => Code::KeyE, + KeyCode::KeyF => Code::KeyF, + KeyCode::KeyG => Code::KeyG, + KeyCode::KeyH => Code::KeyH, + KeyCode::KeyI => Code::KeyI, + KeyCode::KeyJ => Code::KeyJ, + KeyCode::KeyK => Code::KeyK, + KeyCode::KeyL => Code::KeyL, + KeyCode::KeyM => Code::KeyM, + KeyCode::KeyN => Code::KeyN, + KeyCode::KeyO => Code::KeyO, + KeyCode::KeyP => Code::KeyP, + KeyCode::KeyQ => Code::KeyQ, + KeyCode::KeyR => Code::KeyR, + KeyCode::KeyS => Code::KeyS, + KeyCode::KeyT => Code::KeyT, + KeyCode::KeyU => Code::KeyU, + KeyCode::KeyV => Code::KeyV, + KeyCode::KeyW => Code::KeyW, + KeyCode::KeyX => Code::KeyX, + KeyCode::KeyY => Code::KeyY, + KeyCode::KeyZ => Code::KeyZ, + KeyCode::Lang1 => Code::Lang1, + KeyCode::Lang2 => Code::Lang2, + KeyCode::Lang3 => Code::Lang3, + KeyCode::Lang4 => Code::Lang4, + KeyCode::Lang5 => Code::Lang5, + 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::Meta => Code::Super, + KeyCode::Minus => Code::Minus, + KeyCode::NonConvert => Code::NonConvert, + 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::Open => Code::Open, + KeyCode::PageDown => Code::PageDown, + KeyCode::PageUp => Code::PageUp, + KeyCode::Paste => Code::Paste, + KeyCode::Pause => Code::Pause, + KeyCode::Period => Code::Period, + KeyCode::Power => Code::Power, + KeyCode::PrintScreen => Code::PrintScreen, + KeyCode::Props => Code::Props, + KeyCode::Quote => Code::Quote, + KeyCode::Resume => Code::Resume, + KeyCode::ScrollLock => Code::ScrollLock, + KeyCode::Select => Code::Select, + KeyCode::Semicolon => Code::Semicolon, + KeyCode::ShiftLeft => Code::ShiftLeft, + KeyCode::ShiftRight => Code::ShiftRight, + KeyCode::Slash => Code::Slash, + KeyCode::Sleep => Code::Sleep, + KeyCode::Space => Code::Space, + KeyCode::SuperLeft => Code::MetaLeft, + KeyCode::SuperRight => Code::MetaRight, + KeyCode::Suspend => Code::Suspend, + KeyCode::Tab => Code::Tab, + KeyCode::Turbo => Code::Turbo, + KeyCode::Undo => Code::Undo, + KeyCode::WakeUp => Code::WakeUp, + _ => Code::Unidentified, + } + } +} - _ => Code::Unidentified, +impl FromWinitKeyEvent for KeyState { + fn from_winit_key_event(key_event: &KeyEvent) -> Self { + match key_event.state { + ElementState::Pressed => KeyState::Down, + ElementState::Released => KeyState::Up, + } } } -fn get_modifiers(mods: ModifiersState) -> Modifiers { +fn keyboard_modifiers_from_winit_modifiers(mods: ModifiersState) -> Modifiers { let mut modifiers = Modifiers::empty(); modifiers.set(Modifiers::CONTROL, mods.control_key()); modifiers.set(Modifiers::SHIFT, mods.shift_key()); @@ -627,17 +582,13 @@ fn get_modifiers(mods: ModifiersState) -> Modifiers { modifiers } -pub fn keyboard_event_from_winit(input: &KeyEvent, state: ModifiersState) -> KeyboardEvent { - info!("winit keyboard input: {:?}", input); +pub fn keyboard_event_from_winit(key_event: &KeyEvent, state: ModifiersState) -> KeyboardEvent { KeyboardEvent { - state: match input.state { - ElementState::Pressed => KeyState::Down, - ElementState::Released => KeyState::Up, - }, - key: get_servo_key_from_winit_key(&input.logical_key), - code: get_servo_code_from_physical_key(input.physical_key), - location: get_servo_location_from_physical_key(input.physical_key), - modifiers: get_modifiers(state), + state: KeyState::from_winit_key_event(key_event), + key: Key::from_winit_key_event(key_event), + code: Code::from_winit_key_event(key_event), + location: Location::from_winit_key_event(key_event), + modifiers: keyboard_modifiers_from_winit_modifiers(state), repeat: false, is_composing: false, } |