Revise Key and KeyCode enums
Split `Key` into clear categories, like `Named`, `Dead`, Character`, `Unidentified` removing the `#[non_exhaustive]` from the `Key` itself. Similar action was done for the `KeyCode`. Fixes: #2995 Co-authored-by: Kirill Chibisov <contact@kchibisov.com>
This commit is contained in:
parent
b9e1e96eaa
commit
acfeff5327
31 changed files with 1456 additions and 1277 deletions
|
|
@ -1,328 +1,328 @@
|
|||
use smol_str::SmolStr;
|
||||
|
||||
use crate::keyboard::{Key, KeyCode, NativeKey, NativeKeyCode};
|
||||
use crate::keyboard::{Key, KeyCode, NamedKey, NativeKey, NativeKeyCode, PhysicalKey};
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
pub(crate) struct KeyEventExtra;
|
||||
|
||||
impl Key {
|
||||
pub(crate) fn from_key_attribute_value(kav: &str) -> Self {
|
||||
match kav {
|
||||
"Unidentified" => Key::Unidentified(NativeKey::Web(SmolStr::new(kav))),
|
||||
"Dead" => Key::Dead(None),
|
||||
"Alt" => Key::Alt,
|
||||
"AltGraph" => Key::AltGraph,
|
||||
"CapsLock" => Key::CapsLock,
|
||||
"Control" => Key::Control,
|
||||
"Fn" => Key::Fn,
|
||||
"FnLock" => Key::FnLock,
|
||||
"NumLock" => Key::NumLock,
|
||||
"ScrollLock" => Key::ScrollLock,
|
||||
"Shift" => Key::Shift,
|
||||
"Symbol" => Key::Symbol,
|
||||
"SymbolLock" => Key::SymbolLock,
|
||||
"Hyper" => Key::Hyper,
|
||||
"Meta" => Key::Super,
|
||||
"Enter" => Key::Enter,
|
||||
"Tab" => Key::Tab,
|
||||
" " => Key::Space,
|
||||
"ArrowDown" => Key::ArrowDown,
|
||||
"ArrowLeft" => Key::ArrowLeft,
|
||||
"ArrowRight" => Key::ArrowRight,
|
||||
"ArrowUp" => Key::ArrowUp,
|
||||
"End" => Key::End,
|
||||
"Home" => Key::Home,
|
||||
"PageDown" => Key::PageDown,
|
||||
"PageUp" => Key::PageUp,
|
||||
"Backspace" => Key::Backspace,
|
||||
"Clear" => Key::Clear,
|
||||
"Copy" => Key::Copy,
|
||||
"CrSel" => Key::CrSel,
|
||||
"Cut" => Key::Cut,
|
||||
"Delete" => Key::Delete,
|
||||
"EraseEof" => Key::EraseEof,
|
||||
"ExSel" => Key::ExSel,
|
||||
"Insert" => Key::Insert,
|
||||
"Paste" => Key::Paste,
|
||||
"Redo" => Key::Redo,
|
||||
"Undo" => Key::Undo,
|
||||
"Accept" => Key::Accept,
|
||||
"Again" => Key::Again,
|
||||
"Attn" => Key::Attn,
|
||||
"Cancel" => Key::Cancel,
|
||||
"ContextMenu" => Key::ContextMenu,
|
||||
"Escape" => Key::Escape,
|
||||
"Execute" => Key::Execute,
|
||||
"Find" => Key::Find,
|
||||
"Help" => Key::Help,
|
||||
"Pause" => Key::Pause,
|
||||
"Play" => Key::Play,
|
||||
"Props" => Key::Props,
|
||||
"Select" => Key::Select,
|
||||
"ZoomIn" => Key::ZoomIn,
|
||||
"ZoomOut" => Key::ZoomOut,
|
||||
"BrightnessDown" => Key::BrightnessDown,
|
||||
"BrightnessUp" => Key::BrightnessUp,
|
||||
"Eject" => Key::Eject,
|
||||
"LogOff" => Key::LogOff,
|
||||
"Power" => Key::Power,
|
||||
"PowerOff" => Key::PowerOff,
|
||||
"PrintScreen" => Key::PrintScreen,
|
||||
"Hibernate" => Key::Hibernate,
|
||||
"Standby" => Key::Standby,
|
||||
"WakeUp" => Key::WakeUp,
|
||||
"AllCandidates" => Key::AllCandidates,
|
||||
"Alphanumeric" => Key::Alphanumeric,
|
||||
"CodeInput" => Key::CodeInput,
|
||||
"Compose" => Key::Compose,
|
||||
"Convert" => Key::Convert,
|
||||
"FinalMode" => Key::FinalMode,
|
||||
"GroupFirst" => Key::GroupFirst,
|
||||
"GroupLast" => Key::GroupLast,
|
||||
"GroupNext" => Key::GroupNext,
|
||||
"GroupPrevious" => Key::GroupPrevious,
|
||||
"ModeChange" => Key::ModeChange,
|
||||
"NextCandidate" => Key::NextCandidate,
|
||||
"NonConvert" => Key::NonConvert,
|
||||
"PreviousCandidate" => Key::PreviousCandidate,
|
||||
"Process" => Key::Process,
|
||||
"SingleCandidate" => Key::SingleCandidate,
|
||||
"HangulMode" => Key::HangulMode,
|
||||
"HanjaMode" => Key::HanjaMode,
|
||||
"JunjaMode" => Key::JunjaMode,
|
||||
"Eisu" => Key::Eisu,
|
||||
"Hankaku" => Key::Hankaku,
|
||||
"Hiragana" => Key::Hiragana,
|
||||
"HiraganaKatakana" => Key::HiraganaKatakana,
|
||||
"KanaMode" => Key::KanaMode,
|
||||
"KanjiMode" => Key::KanjiMode,
|
||||
"Katakana" => Key::Katakana,
|
||||
"Romaji" => Key::Romaji,
|
||||
"Zenkaku" => Key::Zenkaku,
|
||||
"ZenkakuHankaku" => Key::ZenkakuHankaku,
|
||||
"Soft1" => Key::Soft1,
|
||||
"Soft2" => Key::Soft2,
|
||||
"Soft3" => Key::Soft3,
|
||||
"Soft4" => Key::Soft4,
|
||||
"ChannelDown" => Key::ChannelDown,
|
||||
"ChannelUp" => Key::ChannelUp,
|
||||
"Close" => Key::Close,
|
||||
"MailForward" => Key::MailForward,
|
||||
"MailReply" => Key::MailReply,
|
||||
"MailSend" => Key::MailSend,
|
||||
"MediaClose" => Key::MediaClose,
|
||||
"MediaFastForward" => Key::MediaFastForward,
|
||||
"MediaPause" => Key::MediaPause,
|
||||
"MediaPlay" => Key::MediaPlay,
|
||||
"MediaPlayPause" => Key::MediaPlayPause,
|
||||
"MediaRecord" => Key::MediaRecord,
|
||||
"MediaRewind" => Key::MediaRewind,
|
||||
"MediaStop" => Key::MediaStop,
|
||||
"MediaTrackNext" => Key::MediaTrackNext,
|
||||
"MediaTrackPrevious" => Key::MediaTrackPrevious,
|
||||
"New" => Key::New,
|
||||
"Open" => Key::Open,
|
||||
"Print" => Key::Print,
|
||||
"Save" => Key::Save,
|
||||
"SpellCheck" => Key::SpellCheck,
|
||||
"Key11" => Key::Key11,
|
||||
"Key12" => Key::Key12,
|
||||
"AudioBalanceLeft" => Key::AudioBalanceLeft,
|
||||
"AudioBalanceRight" => Key::AudioBalanceRight,
|
||||
"AudioBassBoostDown" => Key::AudioBassBoostDown,
|
||||
"AudioBassBoostToggle" => Key::AudioBassBoostToggle,
|
||||
"AudioBassBoostUp" => Key::AudioBassBoostUp,
|
||||
"AudioFaderFront" => Key::AudioFaderFront,
|
||||
"AudioFaderRear" => Key::AudioFaderRear,
|
||||
"AudioSurroundModeNext" => Key::AudioSurroundModeNext,
|
||||
"AudioTrebleDown" => Key::AudioTrebleDown,
|
||||
"AudioTrebleUp" => Key::AudioTrebleUp,
|
||||
"AudioVolumeDown" => Key::AudioVolumeDown,
|
||||
"AudioVolumeUp" => Key::AudioVolumeUp,
|
||||
"AudioVolumeMute" => Key::AudioVolumeMute,
|
||||
"MicrophoneToggle" => Key::MicrophoneToggle,
|
||||
"MicrophoneVolumeDown" => Key::MicrophoneVolumeDown,
|
||||
"MicrophoneVolumeUp" => Key::MicrophoneVolumeUp,
|
||||
"MicrophoneVolumeMute" => Key::MicrophoneVolumeMute,
|
||||
"SpeechCorrectionList" => Key::SpeechCorrectionList,
|
||||
"SpeechInputToggle" => Key::SpeechInputToggle,
|
||||
"LaunchApplication1" => Key::LaunchApplication1,
|
||||
"LaunchApplication2" => Key::LaunchApplication2,
|
||||
"LaunchCalendar" => Key::LaunchCalendar,
|
||||
"LaunchContacts" => Key::LaunchContacts,
|
||||
"LaunchMail" => Key::LaunchMail,
|
||||
"LaunchMediaPlayer" => Key::LaunchMediaPlayer,
|
||||
"LaunchMusicPlayer" => Key::LaunchMusicPlayer,
|
||||
"LaunchPhone" => Key::LaunchPhone,
|
||||
"LaunchScreenSaver" => Key::LaunchScreenSaver,
|
||||
"LaunchSpreadsheet" => Key::LaunchSpreadsheet,
|
||||
"LaunchWebBrowser" => Key::LaunchWebBrowser,
|
||||
"LaunchWebCam" => Key::LaunchWebCam,
|
||||
"LaunchWordProcessor" => Key::LaunchWordProcessor,
|
||||
"BrowserBack" => Key::BrowserBack,
|
||||
"BrowserFavorites" => Key::BrowserFavorites,
|
||||
"BrowserForward" => Key::BrowserForward,
|
||||
"BrowserHome" => Key::BrowserHome,
|
||||
"BrowserRefresh" => Key::BrowserRefresh,
|
||||
"BrowserSearch" => Key::BrowserSearch,
|
||||
"BrowserStop" => Key::BrowserStop,
|
||||
"AppSwitch" => Key::AppSwitch,
|
||||
"Call" => Key::Call,
|
||||
"Camera" => Key::Camera,
|
||||
"CameraFocus" => Key::CameraFocus,
|
||||
"EndCall" => Key::EndCall,
|
||||
"GoBack" => Key::GoBack,
|
||||
"GoHome" => Key::GoHome,
|
||||
"HeadsetHook" => Key::HeadsetHook,
|
||||
"LastNumberRedial" => Key::LastNumberRedial,
|
||||
"Notification" => Key::Notification,
|
||||
"MannerMode" => Key::MannerMode,
|
||||
"VoiceDial" => Key::VoiceDial,
|
||||
"TV" => Key::TV,
|
||||
"TV3DMode" => Key::TV3DMode,
|
||||
"TVAntennaCable" => Key::TVAntennaCable,
|
||||
"TVAudioDescription" => Key::TVAudioDescription,
|
||||
"TVAudioDescriptionMixDown" => Key::TVAudioDescriptionMixDown,
|
||||
"TVAudioDescriptionMixUp" => Key::TVAudioDescriptionMixUp,
|
||||
"TVContentsMenu" => Key::TVContentsMenu,
|
||||
"TVDataService" => Key::TVDataService,
|
||||
"TVInput" => Key::TVInput,
|
||||
"TVInputComponent1" => Key::TVInputComponent1,
|
||||
"TVInputComponent2" => Key::TVInputComponent2,
|
||||
"TVInputComposite1" => Key::TVInputComposite1,
|
||||
"TVInputComposite2" => Key::TVInputComposite2,
|
||||
"TVInputHDMI1" => Key::TVInputHDMI1,
|
||||
"TVInputHDMI2" => Key::TVInputHDMI2,
|
||||
"TVInputHDMI3" => Key::TVInputHDMI3,
|
||||
"TVInputHDMI4" => Key::TVInputHDMI4,
|
||||
"TVInputVGA1" => Key::TVInputVGA1,
|
||||
"TVMediaContext" => Key::TVMediaContext,
|
||||
"TVNetwork" => Key::TVNetwork,
|
||||
"TVNumberEntry" => Key::TVNumberEntry,
|
||||
"TVPower" => Key::TVPower,
|
||||
"TVRadioService" => Key::TVRadioService,
|
||||
"TVSatellite" => Key::TVSatellite,
|
||||
"TVSatelliteBS" => Key::TVSatelliteBS,
|
||||
"TVSatelliteCS" => Key::TVSatelliteCS,
|
||||
"TVSatelliteToggle" => Key::TVSatelliteToggle,
|
||||
"TVTerrestrialAnalog" => Key::TVTerrestrialAnalog,
|
||||
"TVTerrestrialDigital" => Key::TVTerrestrialDigital,
|
||||
"TVTimer" => Key::TVTimer,
|
||||
"AVRInput" => Key::AVRInput,
|
||||
"AVRPower" => Key::AVRPower,
|
||||
"ColorF0Red" => Key::ColorF0Red,
|
||||
"ColorF1Green" => Key::ColorF1Green,
|
||||
"ColorF2Yellow" => Key::ColorF2Yellow,
|
||||
"ColorF3Blue" => Key::ColorF3Blue,
|
||||
"ColorF4Grey" => Key::ColorF4Grey,
|
||||
"ColorF5Brown" => Key::ColorF5Brown,
|
||||
"ClosedCaptionToggle" => Key::ClosedCaptionToggle,
|
||||
"Dimmer" => Key::Dimmer,
|
||||
"DisplaySwap" => Key::DisplaySwap,
|
||||
"DVR" => Key::DVR,
|
||||
"Exit" => Key::Exit,
|
||||
"FavoriteClear0" => Key::FavoriteClear0,
|
||||
"FavoriteClear1" => Key::FavoriteClear1,
|
||||
"FavoriteClear2" => Key::FavoriteClear2,
|
||||
"FavoriteClear3" => Key::FavoriteClear3,
|
||||
"FavoriteRecall0" => Key::FavoriteRecall0,
|
||||
"FavoriteRecall1" => Key::FavoriteRecall1,
|
||||
"FavoriteRecall2" => Key::FavoriteRecall2,
|
||||
"FavoriteRecall3" => Key::FavoriteRecall3,
|
||||
"FavoriteStore0" => Key::FavoriteStore0,
|
||||
"FavoriteStore1" => Key::FavoriteStore1,
|
||||
"FavoriteStore2" => Key::FavoriteStore2,
|
||||
"FavoriteStore3" => Key::FavoriteStore3,
|
||||
"Guide" => Key::Guide,
|
||||
"GuideNextDay" => Key::GuideNextDay,
|
||||
"GuidePreviousDay" => Key::GuidePreviousDay,
|
||||
"Info" => Key::Info,
|
||||
"InstantReplay" => Key::InstantReplay,
|
||||
"Link" => Key::Link,
|
||||
"ListProgram" => Key::ListProgram,
|
||||
"LiveContent" => Key::LiveContent,
|
||||
"Lock" => Key::Lock,
|
||||
"MediaApps" => Key::MediaApps,
|
||||
"MediaAudioTrack" => Key::MediaAudioTrack,
|
||||
"MediaLast" => Key::MediaLast,
|
||||
"MediaSkipBackward" => Key::MediaSkipBackward,
|
||||
"MediaSkipForward" => Key::MediaSkipForward,
|
||||
"MediaStepBackward" => Key::MediaStepBackward,
|
||||
"MediaStepForward" => Key::MediaStepForward,
|
||||
"MediaTopMenu" => Key::MediaTopMenu,
|
||||
"NavigateIn" => Key::NavigateIn,
|
||||
"NavigateNext" => Key::NavigateNext,
|
||||
"NavigateOut" => Key::NavigateOut,
|
||||
"NavigatePrevious" => Key::NavigatePrevious,
|
||||
"NextFavoriteChannel" => Key::NextFavoriteChannel,
|
||||
"NextUserProfile" => Key::NextUserProfile,
|
||||
"OnDemand" => Key::OnDemand,
|
||||
"Pairing" => Key::Pairing,
|
||||
"PinPDown" => Key::PinPDown,
|
||||
"PinPMove" => Key::PinPMove,
|
||||
"PinPToggle" => Key::PinPToggle,
|
||||
"PinPUp" => Key::PinPUp,
|
||||
"PlaySpeedDown" => Key::PlaySpeedDown,
|
||||
"PlaySpeedReset" => Key::PlaySpeedReset,
|
||||
"PlaySpeedUp" => Key::PlaySpeedUp,
|
||||
"RandomToggle" => Key::RandomToggle,
|
||||
"RcLowBattery" => Key::RcLowBattery,
|
||||
"RecordSpeedNext" => Key::RecordSpeedNext,
|
||||
"RfBypass" => Key::RfBypass,
|
||||
"ScanChannelsToggle" => Key::ScanChannelsToggle,
|
||||
"ScreenModeNext" => Key::ScreenModeNext,
|
||||
"Settings" => Key::Settings,
|
||||
"SplitScreenToggle" => Key::SplitScreenToggle,
|
||||
"STBInput" => Key::STBInput,
|
||||
"STBPower" => Key::STBPower,
|
||||
"Subtitle" => Key::Subtitle,
|
||||
"Teletext" => Key::Teletext,
|
||||
"VideoModeNext" => Key::VideoModeNext,
|
||||
"Wink" => Key::Wink,
|
||||
"ZoomToggle" => Key::ZoomToggle,
|
||||
"F1" => Key::F1,
|
||||
"F2" => Key::F2,
|
||||
"F3" => Key::F3,
|
||||
"F4" => Key::F4,
|
||||
"F5" => Key::F5,
|
||||
"F6" => Key::F6,
|
||||
"F7" => Key::F7,
|
||||
"F8" => Key::F8,
|
||||
"F9" => Key::F9,
|
||||
"F10" => Key::F10,
|
||||
"F11" => Key::F11,
|
||||
"F12" => Key::F12,
|
||||
"F13" => Key::F13,
|
||||
"F14" => Key::F14,
|
||||
"F15" => Key::F15,
|
||||
"F16" => Key::F16,
|
||||
"F17" => Key::F17,
|
||||
"F18" => Key::F18,
|
||||
"F19" => Key::F19,
|
||||
"F20" => Key::F20,
|
||||
"F21" => Key::F21,
|
||||
"F22" => Key::F22,
|
||||
"F23" => Key::F23,
|
||||
"F24" => Key::F24,
|
||||
"F25" => Key::F25,
|
||||
"F26" => Key::F26,
|
||||
"F27" => Key::F27,
|
||||
"F28" => Key::F28,
|
||||
"F29" => Key::F29,
|
||||
"F30" => Key::F30,
|
||||
"F31" => Key::F31,
|
||||
"F32" => Key::F32,
|
||||
"F33" => Key::F33,
|
||||
"F34" => Key::F34,
|
||||
"F35" => Key::F35,
|
||||
string => Key::Character(SmolStr::new(string)),
|
||||
}
|
||||
Key::Named(match kav {
|
||||
"Unidentified" => return Key::Unidentified(NativeKey::Web(SmolStr::new(kav))),
|
||||
"Dead" => return Key::Dead(None),
|
||||
"Alt" => NamedKey::Alt,
|
||||
"AltGraph" => NamedKey::AltGraph,
|
||||
"CapsLock" => NamedKey::CapsLock,
|
||||
"Control" => NamedKey::Control,
|
||||
"Fn" => NamedKey::Fn,
|
||||
"FnLock" => NamedKey::FnLock,
|
||||
"NumLock" => NamedKey::NumLock,
|
||||
"ScrollLock" => NamedKey::ScrollLock,
|
||||
"Shift" => NamedKey::Shift,
|
||||
"Symbol" => NamedKey::Symbol,
|
||||
"SymbolLock" => NamedKey::SymbolLock,
|
||||
"Hyper" => NamedKey::Hyper,
|
||||
"Meta" => NamedKey::Super,
|
||||
"Enter" => NamedKey::Enter,
|
||||
"Tab" => NamedKey::Tab,
|
||||
" " => NamedKey::Space,
|
||||
"ArrowDown" => NamedKey::ArrowDown,
|
||||
"ArrowLeft" => NamedKey::ArrowLeft,
|
||||
"ArrowRight" => NamedKey::ArrowRight,
|
||||
"ArrowUp" => NamedKey::ArrowUp,
|
||||
"End" => NamedKey::End,
|
||||
"Home" => NamedKey::Home,
|
||||
"PageDown" => NamedKey::PageDown,
|
||||
"PageUp" => NamedKey::PageUp,
|
||||
"Backspace" => NamedKey::Backspace,
|
||||
"Clear" => NamedKey::Clear,
|
||||
"Copy" => NamedKey::Copy,
|
||||
"CrSel" => NamedKey::CrSel,
|
||||
"Cut" => NamedKey::Cut,
|
||||
"Delete" => NamedKey::Delete,
|
||||
"EraseEof" => NamedKey::EraseEof,
|
||||
"ExSel" => NamedKey::ExSel,
|
||||
"Insert" => NamedKey::Insert,
|
||||
"Paste" => NamedKey::Paste,
|
||||
"Redo" => NamedKey::Redo,
|
||||
"Undo" => NamedKey::Undo,
|
||||
"Accept" => NamedKey::Accept,
|
||||
"Again" => NamedKey::Again,
|
||||
"Attn" => NamedKey::Attn,
|
||||
"Cancel" => NamedKey::Cancel,
|
||||
"ContextMenu" => NamedKey::ContextMenu,
|
||||
"Escape" => NamedKey::Escape,
|
||||
"Execute" => NamedKey::Execute,
|
||||
"Find" => NamedKey::Find,
|
||||
"Help" => NamedKey::Help,
|
||||
"Pause" => NamedKey::Pause,
|
||||
"Play" => NamedKey::Play,
|
||||
"Props" => NamedKey::Props,
|
||||
"Select" => NamedKey::Select,
|
||||
"ZoomIn" => NamedKey::ZoomIn,
|
||||
"ZoomOut" => NamedKey::ZoomOut,
|
||||
"BrightnessDown" => NamedKey::BrightnessDown,
|
||||
"BrightnessUp" => NamedKey::BrightnessUp,
|
||||
"Eject" => NamedKey::Eject,
|
||||
"LogOff" => NamedKey::LogOff,
|
||||
"Power" => NamedKey::Power,
|
||||
"PowerOff" => NamedKey::PowerOff,
|
||||
"PrintScreen" => NamedKey::PrintScreen,
|
||||
"Hibernate" => NamedKey::Hibernate,
|
||||
"Standby" => NamedKey::Standby,
|
||||
"WakeUp" => NamedKey::WakeUp,
|
||||
"AllCandidates" => NamedKey::AllCandidates,
|
||||
"Alphanumeric" => NamedKey::Alphanumeric,
|
||||
"CodeInput" => NamedKey::CodeInput,
|
||||
"Compose" => NamedKey::Compose,
|
||||
"Convert" => NamedKey::Convert,
|
||||
"FinalMode" => NamedKey::FinalMode,
|
||||
"GroupFirst" => NamedKey::GroupFirst,
|
||||
"GroupLast" => NamedKey::GroupLast,
|
||||
"GroupNext" => NamedKey::GroupNext,
|
||||
"GroupPrevious" => NamedKey::GroupPrevious,
|
||||
"ModeChange" => NamedKey::ModeChange,
|
||||
"NextCandidate" => NamedKey::NextCandidate,
|
||||
"NonConvert" => NamedKey::NonConvert,
|
||||
"PreviousCandidate" => NamedKey::PreviousCandidate,
|
||||
"Process" => NamedKey::Process,
|
||||
"SingleCandidate" => NamedKey::SingleCandidate,
|
||||
"HangulMode" => NamedKey::HangulMode,
|
||||
"HanjaMode" => NamedKey::HanjaMode,
|
||||
"JunjaMode" => NamedKey::JunjaMode,
|
||||
"Eisu" => NamedKey::Eisu,
|
||||
"Hankaku" => NamedKey::Hankaku,
|
||||
"Hiragana" => NamedKey::Hiragana,
|
||||
"HiraganaKatakana" => NamedKey::HiraganaKatakana,
|
||||
"KanaMode" => NamedKey::KanaMode,
|
||||
"KanjiMode" => NamedKey::KanjiMode,
|
||||
"Katakana" => NamedKey::Katakana,
|
||||
"Romaji" => NamedKey::Romaji,
|
||||
"Zenkaku" => NamedKey::Zenkaku,
|
||||
"ZenkakuHankaku" => NamedKey::ZenkakuHankaku,
|
||||
"Soft1" => NamedKey::Soft1,
|
||||
"Soft2" => NamedKey::Soft2,
|
||||
"Soft3" => NamedKey::Soft3,
|
||||
"Soft4" => NamedKey::Soft4,
|
||||
"ChannelDown" => NamedKey::ChannelDown,
|
||||
"ChannelUp" => NamedKey::ChannelUp,
|
||||
"Close" => NamedKey::Close,
|
||||
"MailForward" => NamedKey::MailForward,
|
||||
"MailReply" => NamedKey::MailReply,
|
||||
"MailSend" => NamedKey::MailSend,
|
||||
"MediaClose" => NamedKey::MediaClose,
|
||||
"MediaFastForward" => NamedKey::MediaFastForward,
|
||||
"MediaPause" => NamedKey::MediaPause,
|
||||
"MediaPlay" => NamedKey::MediaPlay,
|
||||
"MediaPlayPause" => NamedKey::MediaPlayPause,
|
||||
"MediaRecord" => NamedKey::MediaRecord,
|
||||
"MediaRewind" => NamedKey::MediaRewind,
|
||||
"MediaStop" => NamedKey::MediaStop,
|
||||
"MediaTrackNext" => NamedKey::MediaTrackNext,
|
||||
"MediaTrackPrevious" => NamedKey::MediaTrackPrevious,
|
||||
"New" => NamedKey::New,
|
||||
"Open" => NamedKey::Open,
|
||||
"Print" => NamedKey::Print,
|
||||
"Save" => NamedKey::Save,
|
||||
"SpellCheck" => NamedKey::SpellCheck,
|
||||
"Key11" => NamedKey::Key11,
|
||||
"Key12" => NamedKey::Key12,
|
||||
"AudioBalanceLeft" => NamedKey::AudioBalanceLeft,
|
||||
"AudioBalanceRight" => NamedKey::AudioBalanceRight,
|
||||
"AudioBassBoostDown" => NamedKey::AudioBassBoostDown,
|
||||
"AudioBassBoostToggle" => NamedKey::AudioBassBoostToggle,
|
||||
"AudioBassBoostUp" => NamedKey::AudioBassBoostUp,
|
||||
"AudioFaderFront" => NamedKey::AudioFaderFront,
|
||||
"AudioFaderRear" => NamedKey::AudioFaderRear,
|
||||
"AudioSurroundModeNext" => NamedKey::AudioSurroundModeNext,
|
||||
"AudioTrebleDown" => NamedKey::AudioTrebleDown,
|
||||
"AudioTrebleUp" => NamedKey::AudioTrebleUp,
|
||||
"AudioVolumeDown" => NamedKey::AudioVolumeDown,
|
||||
"AudioVolumeUp" => NamedKey::AudioVolumeUp,
|
||||
"AudioVolumeMute" => NamedKey::AudioVolumeMute,
|
||||
"MicrophoneToggle" => NamedKey::MicrophoneToggle,
|
||||
"MicrophoneVolumeDown" => NamedKey::MicrophoneVolumeDown,
|
||||
"MicrophoneVolumeUp" => NamedKey::MicrophoneVolumeUp,
|
||||
"MicrophoneVolumeMute" => NamedKey::MicrophoneVolumeMute,
|
||||
"SpeechCorrectionList" => NamedKey::SpeechCorrectionList,
|
||||
"SpeechInputToggle" => NamedKey::SpeechInputToggle,
|
||||
"LaunchApplication1" => NamedKey::LaunchApplication1,
|
||||
"LaunchApplication2" => NamedKey::LaunchApplication2,
|
||||
"LaunchCalendar" => NamedKey::LaunchCalendar,
|
||||
"LaunchContacts" => NamedKey::LaunchContacts,
|
||||
"LaunchMail" => NamedKey::LaunchMail,
|
||||
"LaunchMediaPlayer" => NamedKey::LaunchMediaPlayer,
|
||||
"LaunchMusicPlayer" => NamedKey::LaunchMusicPlayer,
|
||||
"LaunchPhone" => NamedKey::LaunchPhone,
|
||||
"LaunchScreenSaver" => NamedKey::LaunchScreenSaver,
|
||||
"LaunchSpreadsheet" => NamedKey::LaunchSpreadsheet,
|
||||
"LaunchWebBrowser" => NamedKey::LaunchWebBrowser,
|
||||
"LaunchWebCam" => NamedKey::LaunchWebCam,
|
||||
"LaunchWordProcessor" => NamedKey::LaunchWordProcessor,
|
||||
"BrowserBack" => NamedKey::BrowserBack,
|
||||
"BrowserFavorites" => NamedKey::BrowserFavorites,
|
||||
"BrowserForward" => NamedKey::BrowserForward,
|
||||
"BrowserHome" => NamedKey::BrowserHome,
|
||||
"BrowserRefresh" => NamedKey::BrowserRefresh,
|
||||
"BrowserSearch" => NamedKey::BrowserSearch,
|
||||
"BrowserStop" => NamedKey::BrowserStop,
|
||||
"AppSwitch" => NamedKey::AppSwitch,
|
||||
"Call" => NamedKey::Call,
|
||||
"Camera" => NamedKey::Camera,
|
||||
"CameraFocus" => NamedKey::CameraFocus,
|
||||
"EndCall" => NamedKey::EndCall,
|
||||
"GoBack" => NamedKey::GoBack,
|
||||
"GoHome" => NamedKey::GoHome,
|
||||
"HeadsetHook" => NamedKey::HeadsetHook,
|
||||
"LastNumberRedial" => NamedKey::LastNumberRedial,
|
||||
"Notification" => NamedKey::Notification,
|
||||
"MannerMode" => NamedKey::MannerMode,
|
||||
"VoiceDial" => NamedKey::VoiceDial,
|
||||
"TV" => NamedKey::TV,
|
||||
"TV3DMode" => NamedKey::TV3DMode,
|
||||
"TVAntennaCable" => NamedKey::TVAntennaCable,
|
||||
"TVAudioDescription" => NamedKey::TVAudioDescription,
|
||||
"TVAudioDescriptionMixDown" => NamedKey::TVAudioDescriptionMixDown,
|
||||
"TVAudioDescriptionMixUp" => NamedKey::TVAudioDescriptionMixUp,
|
||||
"TVContentsMenu" => NamedKey::TVContentsMenu,
|
||||
"TVDataService" => NamedKey::TVDataService,
|
||||
"TVInput" => NamedKey::TVInput,
|
||||
"TVInputComponent1" => NamedKey::TVInputComponent1,
|
||||
"TVInputComponent2" => NamedKey::TVInputComponent2,
|
||||
"TVInputComposite1" => NamedKey::TVInputComposite1,
|
||||
"TVInputComposite2" => NamedKey::TVInputComposite2,
|
||||
"TVInputHDMI1" => NamedKey::TVInputHDMI1,
|
||||
"TVInputHDMI2" => NamedKey::TVInputHDMI2,
|
||||
"TVInputHDMI3" => NamedKey::TVInputHDMI3,
|
||||
"TVInputHDMI4" => NamedKey::TVInputHDMI4,
|
||||
"TVInputVGA1" => NamedKey::TVInputVGA1,
|
||||
"TVMediaContext" => NamedKey::TVMediaContext,
|
||||
"TVNetwork" => NamedKey::TVNetwork,
|
||||
"TVNumberEntry" => NamedKey::TVNumberEntry,
|
||||
"TVPower" => NamedKey::TVPower,
|
||||
"TVRadioService" => NamedKey::TVRadioService,
|
||||
"TVSatellite" => NamedKey::TVSatellite,
|
||||
"TVSatelliteBS" => NamedKey::TVSatelliteBS,
|
||||
"TVSatelliteCS" => NamedKey::TVSatelliteCS,
|
||||
"TVSatelliteToggle" => NamedKey::TVSatelliteToggle,
|
||||
"TVTerrestrialAnalog" => NamedKey::TVTerrestrialAnalog,
|
||||
"TVTerrestrialDigital" => NamedKey::TVTerrestrialDigital,
|
||||
"TVTimer" => NamedKey::TVTimer,
|
||||
"AVRInput" => NamedKey::AVRInput,
|
||||
"AVRPower" => NamedKey::AVRPower,
|
||||
"ColorF0Red" => NamedKey::ColorF0Red,
|
||||
"ColorF1Green" => NamedKey::ColorF1Green,
|
||||
"ColorF2Yellow" => NamedKey::ColorF2Yellow,
|
||||
"ColorF3Blue" => NamedKey::ColorF3Blue,
|
||||
"ColorF4Grey" => NamedKey::ColorF4Grey,
|
||||
"ColorF5Brown" => NamedKey::ColorF5Brown,
|
||||
"ClosedCaptionToggle" => NamedKey::ClosedCaptionToggle,
|
||||
"Dimmer" => NamedKey::Dimmer,
|
||||
"DisplaySwap" => NamedKey::DisplaySwap,
|
||||
"DVR" => NamedKey::DVR,
|
||||
"Exit" => NamedKey::Exit,
|
||||
"FavoriteClear0" => NamedKey::FavoriteClear0,
|
||||
"FavoriteClear1" => NamedKey::FavoriteClear1,
|
||||
"FavoriteClear2" => NamedKey::FavoriteClear2,
|
||||
"FavoriteClear3" => NamedKey::FavoriteClear3,
|
||||
"FavoriteRecall0" => NamedKey::FavoriteRecall0,
|
||||
"FavoriteRecall1" => NamedKey::FavoriteRecall1,
|
||||
"FavoriteRecall2" => NamedKey::FavoriteRecall2,
|
||||
"FavoriteRecall3" => NamedKey::FavoriteRecall3,
|
||||
"FavoriteStore0" => NamedKey::FavoriteStore0,
|
||||
"FavoriteStore1" => NamedKey::FavoriteStore1,
|
||||
"FavoriteStore2" => NamedKey::FavoriteStore2,
|
||||
"FavoriteStore3" => NamedKey::FavoriteStore3,
|
||||
"Guide" => NamedKey::Guide,
|
||||
"GuideNextDay" => NamedKey::GuideNextDay,
|
||||
"GuidePreviousDay" => NamedKey::GuidePreviousDay,
|
||||
"Info" => NamedKey::Info,
|
||||
"InstantReplay" => NamedKey::InstantReplay,
|
||||
"Link" => NamedKey::Link,
|
||||
"ListProgram" => NamedKey::ListProgram,
|
||||
"LiveContent" => NamedKey::LiveContent,
|
||||
"Lock" => NamedKey::Lock,
|
||||
"MediaApps" => NamedKey::MediaApps,
|
||||
"MediaAudioTrack" => NamedKey::MediaAudioTrack,
|
||||
"MediaLast" => NamedKey::MediaLast,
|
||||
"MediaSkipBackward" => NamedKey::MediaSkipBackward,
|
||||
"MediaSkipForward" => NamedKey::MediaSkipForward,
|
||||
"MediaStepBackward" => NamedKey::MediaStepBackward,
|
||||
"MediaStepForward" => NamedKey::MediaStepForward,
|
||||
"MediaTopMenu" => NamedKey::MediaTopMenu,
|
||||
"NavigateIn" => NamedKey::NavigateIn,
|
||||
"NavigateNext" => NamedKey::NavigateNext,
|
||||
"NavigateOut" => NamedKey::NavigateOut,
|
||||
"NavigatePrevious" => NamedKey::NavigatePrevious,
|
||||
"NextFavoriteChannel" => NamedKey::NextFavoriteChannel,
|
||||
"NextUserProfile" => NamedKey::NextUserProfile,
|
||||
"OnDemand" => NamedKey::OnDemand,
|
||||
"Pairing" => NamedKey::Pairing,
|
||||
"PinPDown" => NamedKey::PinPDown,
|
||||
"PinPMove" => NamedKey::PinPMove,
|
||||
"PinPToggle" => NamedKey::PinPToggle,
|
||||
"PinPUp" => NamedKey::PinPUp,
|
||||
"PlaySpeedDown" => NamedKey::PlaySpeedDown,
|
||||
"PlaySpeedReset" => NamedKey::PlaySpeedReset,
|
||||
"PlaySpeedUp" => NamedKey::PlaySpeedUp,
|
||||
"RandomToggle" => NamedKey::RandomToggle,
|
||||
"RcLowBattery" => NamedKey::RcLowBattery,
|
||||
"RecordSpeedNext" => NamedKey::RecordSpeedNext,
|
||||
"RfBypass" => NamedKey::RfBypass,
|
||||
"ScanChannelsToggle" => NamedKey::ScanChannelsToggle,
|
||||
"ScreenModeNext" => NamedKey::ScreenModeNext,
|
||||
"Settings" => NamedKey::Settings,
|
||||
"SplitScreenToggle" => NamedKey::SplitScreenToggle,
|
||||
"STBInput" => NamedKey::STBInput,
|
||||
"STBPower" => NamedKey::STBPower,
|
||||
"Subtitle" => NamedKey::Subtitle,
|
||||
"Teletext" => NamedKey::Teletext,
|
||||
"VideoModeNext" => NamedKey::VideoModeNext,
|
||||
"Wink" => NamedKey::Wink,
|
||||
"ZoomToggle" => NamedKey::ZoomToggle,
|
||||
"F1" => NamedKey::F1,
|
||||
"F2" => NamedKey::F2,
|
||||
"F3" => NamedKey::F3,
|
||||
"F4" => NamedKey::F4,
|
||||
"F5" => NamedKey::F5,
|
||||
"F6" => NamedKey::F6,
|
||||
"F7" => NamedKey::F7,
|
||||
"F8" => NamedKey::F8,
|
||||
"F9" => NamedKey::F9,
|
||||
"F10" => NamedKey::F10,
|
||||
"F11" => NamedKey::F11,
|
||||
"F12" => NamedKey::F12,
|
||||
"F13" => NamedKey::F13,
|
||||
"F14" => NamedKey::F14,
|
||||
"F15" => NamedKey::F15,
|
||||
"F16" => NamedKey::F16,
|
||||
"F17" => NamedKey::F17,
|
||||
"F18" => NamedKey::F18,
|
||||
"F19" => NamedKey::F19,
|
||||
"F20" => NamedKey::F20,
|
||||
"F21" => NamedKey::F21,
|
||||
"F22" => NamedKey::F22,
|
||||
"F23" => NamedKey::F23,
|
||||
"F24" => NamedKey::F24,
|
||||
"F25" => NamedKey::F25,
|
||||
"F26" => NamedKey::F26,
|
||||
"F27" => NamedKey::F27,
|
||||
"F28" => NamedKey::F28,
|
||||
"F29" => NamedKey::F29,
|
||||
"F30" => NamedKey::F30,
|
||||
"F31" => NamedKey::F31,
|
||||
"F32" => NamedKey::F32,
|
||||
"F33" => NamedKey::F33,
|
||||
"F34" => NamedKey::F34,
|
||||
"F35" => NamedKey::F35,
|
||||
string => return Key::Character(SmolStr::new(string)),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl KeyCode {
|
||||
impl PhysicalKey {
|
||||
pub fn from_key_code_attribute_value(kcav: &str) -> Self {
|
||||
match kcav {
|
||||
PhysicalKey::Code(match kcav {
|
||||
"Backquote" => KeyCode::Backquote,
|
||||
"Backslash" => KeyCode::Backslash,
|
||||
"BracketLeft" => KeyCode::BracketLeft,
|
||||
|
|
@ -516,7 +516,7 @@ impl KeyCode {
|
|||
"F33" => KeyCode::F33,
|
||||
"F34" => KeyCode::F34,
|
||||
"F35" => KeyCode::F35,
|
||||
_ => KeyCode::Unidentified(NativeKeyCode::Unidentified),
|
||||
}
|
||||
_ => return PhysicalKey::Unidentified(NativeKeyCode::Unidentified),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use web_sys::{
|
|||
use crate::dpi::{LogicalPosition, PhysicalPosition, PhysicalSize};
|
||||
use crate::error::OsError as RootOE;
|
||||
use crate::event::{Force, InnerSizeWriter, MouseButton, MouseScrollDelta};
|
||||
use crate::keyboard::{Key, KeyCode, KeyLocation, ModifiersState};
|
||||
use crate::keyboard::{Key, KeyLocation, ModifiersState, PhysicalKey};
|
||||
use crate::platform_impl::{OsError, PlatformSpecificWindowBuilderAttributes};
|
||||
use crate::window::{WindowAttributes, WindowId as RootWindowId};
|
||||
|
||||
|
|
@ -258,7 +258,7 @@ impl Canvas {
|
|||
|
||||
pub fn on_keyboard_release<F>(&mut self, mut handler: F, prevent_default: bool)
|
||||
where
|
||||
F: 'static + FnMut(KeyCode, Key, Option<SmolStr>, KeyLocation, bool, ModifiersState),
|
||||
F: 'static + FnMut(PhysicalKey, Key, Option<SmolStr>, KeyLocation, bool, ModifiersState),
|
||||
{
|
||||
self.on_keyboard_release =
|
||||
Some(self.common.add_event("keyup", move |event: KeyboardEvent| {
|
||||
|
|
@ -280,7 +280,7 @@ impl Canvas {
|
|||
|
||||
pub fn on_keyboard_press<F>(&mut self, mut handler: F, prevent_default: bool)
|
||||
where
|
||||
F: 'static + FnMut(KeyCode, Key, Option<SmolStr>, KeyLocation, bool, ModifiersState),
|
||||
F: 'static + FnMut(PhysicalKey, Key, Option<SmolStr>, KeyLocation, bool, ModifiersState),
|
||||
{
|
||||
self.on_keyboard_press = Some(self.common.add_transient_event(
|
||||
"keydown",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use crate::dpi::LogicalPosition;
|
||||
use crate::event::{MouseButton, MouseScrollDelta};
|
||||
use crate::keyboard::{Key, KeyCode, KeyLocation, ModifiersState};
|
||||
use crate::keyboard::{Key, KeyLocation, ModifiersState, NamedKey, PhysicalKey};
|
||||
|
||||
use once_cell::unsync::OnceCell;
|
||||
use smol_str::SmolStr;
|
||||
|
|
@ -149,9 +149,9 @@ pub fn mouse_scroll_delta(
|
|||
}
|
||||
}
|
||||
|
||||
pub fn key_code(event: &KeyboardEvent) -> KeyCode {
|
||||
pub fn key_code(event: &KeyboardEvent) -> PhysicalKey {
|
||||
let code = event.code();
|
||||
KeyCode::from_key_code_attribute_value(&code)
|
||||
PhysicalKey::from_key_code_attribute_value(&code)
|
||||
}
|
||||
|
||||
pub fn key(event: &KeyboardEvent) -> Key {
|
||||
|
|
@ -163,9 +163,9 @@ pub fn key_text(event: &KeyboardEvent) -> Option<SmolStr> {
|
|||
let key = Key::from_key_attribute_value(&key);
|
||||
match &key {
|
||||
Key::Character(text) => Some(text.clone()),
|
||||
Key::Tab => Some(SmolStr::new("\t")),
|
||||
Key::Enter => Some(SmolStr::new("\r")),
|
||||
Key::Space => Some(SmolStr::new(" ")),
|
||||
Key::Named(NamedKey::Tab) => Some(SmolStr::new("\t")),
|
||||
Key::Named(NamedKey::Enter) => Some(SmolStr::new("\r")),
|
||||
Key::Named(NamedKey::Space) => Some(SmolStr::new(" ")),
|
||||
_ => None,
|
||||
}
|
||||
.map(SmolStr::new)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue