From be52984ec2375065e85f8f8ab9cd719910c0d9c3 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Sun, 1 Dec 2024 16:05:14 +0100 Subject: [PATCH 1/3] Remove NamedKey::Space This is not in the W3C spec, and doesn't make sense to special-case. --- src/changelog/unreleased.md | 1 + src/keyboard.rs | 5 ----- src/platform_impl/android/keycodes.rs | 2 +- src/platform_impl/apple/appkit/event.rs | 2 +- src/platform_impl/linux/common/xkb/keymap.rs | 2 +- src/platform_impl/orbital/event_loop.rs | 2 +- src/platform_impl/web/keyboard.rs | 1 - src/platform_impl/web/web_sys/event.rs | 1 - src/platform_impl/windows/keyboard_layout.rs | 2 +- 9 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 4c8616e158..6ed24cc085 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -193,6 +193,7 @@ changelog entry. `ButtonSource` as part of the new pointer event overhaul. - Remove `Force::altitude_angle`. - Removed `Window::inner_position`, use the new `Window::surface_position` instead. +- Removed `NamedKey::Space`, match on `Key::Character(" ")` instead. ### Fixed diff --git a/src/keyboard.rs b/src/keyboard.rs index da501b2dfc..ee0edb27d4 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -745,8 +745,6 @@ pub enum KeyCode { /// exceptions: /// - The `Super` variant here, is named `Meta` in the aforementioned specification. (There's /// another key which the specification calls `Super`. That does not exist here.) -/// - The `Space` variant here, can be identified by the character it generates in the -/// specification. /// /// [`KeyboardEvent.key`]: https://w3c.github.io/uievents-key/ #[non_exhaustive] @@ -807,8 +805,6 @@ pub enum NamedKey { Enter, /// The Horizontal Tabulation `Tab` key. Tab, - /// Used in text to insert a space between words. Usually located below the character keys. - Space, /// Navigate or traverse downward. (`KEYCODE_DPAD_DOWN`) ArrowDown, /// Navigate or traverse leftward. (`KEYCODE_DPAD_LEFT`) @@ -1583,7 +1579,6 @@ impl NamedKey { NamedKey::Enter => Some("\r"), NamedKey::Backspace => Some("\x08"), NamedKey::Tab => Some("\t"), - NamedKey::Space => Some(" "), NamedKey::Escape => Some("\x1b"), _ => None, } diff --git a/src/platform_impl/android/keycodes.rs b/src/platform_impl/android/keycodes.rs index 207d549f3d..e65d5424cc 100644 --- a/src/platform_impl/android/keycodes.rs +++ b/src/platform_impl/android/keycodes.rs @@ -309,7 +309,7 @@ pub fn to_logical(key_char: Option, keycode: Keycode) -> Key { ShiftLeft => Key::Named(NamedKey::Shift), ShiftRight => Key::Named(NamedKey::Shift), Tab => Key::Named(NamedKey::Tab), - Space => Key::Named(NamedKey::Space), + Space => Key::Character(" ".into()), Sym => Key::Named(NamedKey::Symbol), Explorer => Key::Named(NamedKey::LaunchWebBrowser), Envelope => Key::Named(NamedKey::LaunchMail), diff --git a/src/platform_impl/apple/appkit/event.rs b/src/platform_impl/apple/appkit/event.rs index f71111b67f..f6eb3212b4 100644 --- a/src/platform_impl/apple/appkit/event.rs +++ b/src/platform_impl/apple/appkit/event.rs @@ -185,7 +185,7 @@ pub fn code_to_key(key: PhysicalKey, scancode: u16) -> Key { Key::Named(match code { KeyCode::Enter => NamedKey::Enter, KeyCode::Tab => NamedKey::Tab, - KeyCode::Space => NamedKey::Space, + KeyCode::Space => return Key::Character(" ".into()), KeyCode::Backspace => NamedKey::Backspace, KeyCode::Escape => NamedKey::Escape, KeyCode::SuperRight => NamedKey::Super, diff --git a/src/platform_impl/linux/common/xkb/keymap.rs b/src/platform_impl/linux/common/xkb/keymap.rs index d9ac1838ef..0b42c502e4 100644 --- a/src/platform_impl/linux/common/xkb/keymap.rs +++ b/src/platform_impl/linux/common/xkb/keymap.rs @@ -724,7 +724,7 @@ pub fn keysym_to_key(keysym: u32) -> Key { keysyms::_3270_PrintScreen => NamedKey::PrintScreen, keysyms::_3270_Enter => NamedKey::Enter, - keysyms::space => NamedKey::Space, + keysyms::space => return Key::Character(" ".into()), // exclam..Sinh_kunddaliya // XFree86 diff --git a/src/platform_impl/orbital/event_loop.rs b/src/platform_impl/orbital/event_loop.rs index 1b9cc6042c..c5f4bbfb2d 100644 --- a/src/platform_impl/orbital/event_loop.rs +++ b/src/platform_impl/orbital/event_loop.rs @@ -121,7 +121,7 @@ fn convert_scancode(scancode: u8) -> (PhysicalKey, Option) { orbclient::K_RIGHT_SHIFT => (KeyCode::ShiftRight, Some(NamedKey::Shift)), orbclient::K_SEMICOLON => (KeyCode::Semicolon, None), orbclient::K_SLASH => (KeyCode::Slash, None), - orbclient::K_SPACE => (KeyCode::Space, Some(NamedKey::Space)), + orbclient::K_SPACE => (KeyCode::Space, None), orbclient::K_SUPER => (KeyCode::SuperLeft, Some(NamedKey::Super)), orbclient::K_TAB => (KeyCode::Tab, Some(NamedKey::Tab)), orbclient::K_TICK => (KeyCode::Backquote, None), diff --git a/src/platform_impl/web/keyboard.rs b/src/platform_impl/web/keyboard.rs index 6f8d69c760..c660639985 100644 --- a/src/platform_impl/web/keyboard.rs +++ b/src/platform_impl/web/keyboard.rs @@ -25,7 +25,6 @@ impl Key { "Meta" => NamedKey::Super, "Enter" => NamedKey::Enter, "Tab" => NamedKey::Tab, - " " => NamedKey::Space, "ArrowDown" => NamedKey::ArrowDown, "ArrowLeft" => NamedKey::ArrowLeft, "ArrowRight" => NamedKey::ArrowRight, diff --git a/src/platform_impl/web/web_sys/event.rs b/src/platform_impl/web/web_sys/event.rs index ed7f03ba8a..551e40a459 100644 --- a/src/platform_impl/web/web_sys/event.rs +++ b/src/platform_impl/web/web_sys/event.rs @@ -184,7 +184,6 @@ pub fn key_text(event: &KeyboardEvent) -> Option { Key::Character(text) => Some(text.clone()), 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) diff --git a/src/platform_impl/windows/keyboard_layout.rs b/src/platform_impl/windows/keyboard_layout.rs index a518886030..1ab0d2a68e 100644 --- a/src/platform_impl/windows/keyboard_layout.rs +++ b/src/platform_impl/windows/keyboard_layout.rs @@ -787,7 +787,7 @@ fn vkey_to_non_char_key( VK_NONCONVERT => Key::Named(NamedKey::NonConvert), VK_ACCEPT => Key::Named(NamedKey::Accept), VK_MODECHANGE => Key::Named(NamedKey::ModeChange), - VK_SPACE => Key::Named(NamedKey::Space), + VK_SPACE => Key::Character(" ".into()), VK_PRIOR => Key::Named(NamedKey::PageUp), VK_NEXT => Key::Named(NamedKey::PageDown), VK_END => Key::Named(NamedKey::End), From c04e6a1778e6ed9abbc587da66a726b80651343d Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Sun, 1 Dec 2024 16:04:35 +0100 Subject: [PATCH 2/3] Rename "super" key to "meta" This is inconsistent with the W3C spec, and while it's arguably not the best name, it's worse that Winit is diverging and choosing a different name. --- Full list of changes: KeyCode: - SuperLeft -> MetaLeft - SuperRight -> MetaRight - Meta -> Super NamedKey::Meta is swapped with NamedKey::Super. ModifiersState::SUPER is renamed to ModifiersState::META. ModifiersKeys::LSUPER and RSUPER are renamed to LMETA and RMETA. --- examples/window.rs | 6 +-- src/changelog/unreleased.md | 1 + src/event.rs | 4 +- src/keyboard.rs | 41 ++++++++------------ src/platform_impl/android/keycodes.rs | 8 ++-- src/platform_impl/apple/appkit/event.rs | 22 +++++------ src/platform_impl/apple/appkit/view.rs | 6 +-- src/platform_impl/linux/common/xkb/keymap.rs | 20 +++++----- src/platform_impl/linux/common/xkb/state.rs | 2 +- src/platform_impl/orbital/event_loop.rs | 18 ++++----- src/platform_impl/web/keyboard.rs | 8 ++-- src/platform_impl/web/web_sys/event.rs | 4 +- src/platform_impl/windows/keyboard.rs | 8 ++-- src/platform_impl/windows/keyboard_layout.rs | 10 ++--- 14 files changed, 77 insertions(+), 81 deletions(-) diff --git a/examples/window.rs b/examples/window.rs index 3d87e2f8d9..17c97e83ae 100644 --- a/examples/window.rs +++ b/examples/window.rs @@ -1125,7 +1125,7 @@ fn modifiers_to_string(mods: ModifiersState) -> String { let mut mods_line = String::new(); // Always add + since it's printed as a part of the bindings. for (modifier, desc) in [ - (ModifiersState::SUPER, "Super+"), + (ModifiersState::META, "Meta+"), (ModifiersState::ALT, "Alt+"), (ModifiersState::CONTROL, "Ctrl+"), (ModifiersState::SHIFT, "Shift+"), @@ -1224,10 +1224,10 @@ const KEY_BINDINGS: &[Binding<&'static str>] = &[ Binding::new("Z", ModifiersState::CONTROL, Action::ToggleCursorVisibility), // K. Binding::new("K", ModifiersState::empty(), Action::SetTheme(None)), - Binding::new("K", ModifiersState::SUPER, Action::SetTheme(Some(Theme::Light))), + Binding::new("K", ModifiersState::META, Action::SetTheme(Some(Theme::Light))), Binding::new("K", ModifiersState::CONTROL, Action::SetTheme(Some(Theme::Dark))), #[cfg(macos_platform)] - Binding::new("T", ModifiersState::SUPER, Action::CreateNewTab), + Binding::new("T", ModifiersState::META, Action::CreateNewTab), #[cfg(macos_platform)] Binding::new("O", ModifiersState::CONTROL, Action::CycleOptionAsAlt), Binding::new("S", ModifiersState::CONTROL, Action::Message), diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 6ed24cc085..fe110765d2 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -161,6 +161,7 @@ changelog entry. - In the same spirit rename `DeviceEvent::MouseMotion` to `PointerMotion`. - Remove `Force::Calibrated::altitude_angle`. - On X11, use bottom-right corner for IME hotspot in `Window::set_ime_cursor_area`. +- Renamed "super" key to "meta", to match the naming in the W3C specification. ### Removed diff --git a/src/event.rs b/src/event.rs index 94ed8a2584..6f702c8dea 100644 --- a/src/event.rs +++ b/src/event.rs @@ -910,12 +910,12 @@ impl Modifiers { /// The state of the left super key. pub fn lsuper_state(&self) -> ModifiersKeyState { - self.mod_state(ModifiersKeys::LSUPER) + self.mod_state(ModifiersKeys::LMETA) } /// The state of the right super key. pub fn rsuper_state(&self) -> ModifiersKeyState { - self.mod_state(ModifiersKeys::RSUPER) + self.mod_state(ModifiersKeys::RMETA) } fn mod_state(&self, modifier: ModifiersKeys) -> ModifiersKeyState { diff --git a/src/keyboard.rs b/src/keyboard.rs index ee0edb27d4..97cea8547c 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -283,11 +283,7 @@ impl PartialEq for NativeKeyCode { /// Code representing the location of a physical key /// -/// This mostly conforms to the UI Events Specification's [`KeyboardEvent.code`] with a few -/// exceptions: -/// - The keys that the specification calls "MetaLeft" and "MetaRight" are named "SuperLeft" and -/// "SuperRight" here. -/// - The key that the specification calls "Super" is reported as `Unidentified` here. +/// This conforms to the UI Events Specification's [`KeyboardEvent.code`]. /// /// [`KeyboardEvent.code`]: https://w3c.github.io/uievents-code/#code-value-tables #[non_exhaustive] @@ -420,7 +416,7 @@ pub enum KeyCode { /// CapsLock or CapsLock, /// The application context menu key, which is typically found between the right - /// Super key and the right Control key. + /// Meta key and the right Control key. ContextMenu, /// Control or ControlLeft, @@ -429,9 +425,9 @@ pub enum KeyCode { /// Enter or . Labeled Return on Apple keyboards. Enter, /// The Windows, , Command, or other OS symbol key. - SuperLeft, + MetaLeft, /// The Windows, , Command, or other OS symbol key. - SuperRight, + MetaRight, /// Shift or ShiftLeft, /// Shift or @@ -613,8 +609,8 @@ pub enum KeyCode { AudioVolumeMute, AudioVolumeUp, WakeUp, - // Legacy modifier key. Also called "Super" in certain places. - Meta, + // Legacy modifier key. + Super, // Legacy modifier key. Hyper, Turbo, @@ -741,10 +737,7 @@ pub enum KeyCode { /// A [`Key::Named`] value /// -/// This mostly conforms to the UI Events Specification's [`KeyboardEvent.key`] with a few -/// exceptions: -/// - The `Super` variant here, is named `Meta` in the aforementioned specification. (There's -/// another key which the specification calls `Super`. That does not exist here.) +/// This conforms to the UI Events Specification's [`KeyboardEvent.key`]. /// /// [`KeyboardEvent.key`]: https://w3c.github.io/uievents-key/ #[non_exhaustive] @@ -789,16 +782,14 @@ pub enum NamedKey { /// The Symbol modifier key (used on some virtual keyboards). Symbol, SymbolLock, - // Legacy modifier key. Also called "Super" in certain places. - Meta, + // Legacy modifier key. + Super, // Legacy modifier key. Hyper, - /// Used to enable "super" modifier function for interpreting concurrent or subsequent keyboard + /// Used to enable "meta" modifier function for interpreting concurrent or subsequent keyboard /// input. This key value is used for the "Windows Logo" key and the Apple `Command` or `⌘` /// key. - /// - /// Note: In some contexts (e.g. the Web) this is referred to as the "Meta" key. - Super, + Meta, /// The `Enter` or `↵` key. Used to activate current selection or accept current input. This /// key value is also used for the `Return` (Macintosh numpad) key. This key value is also /// used for the Android `KEYCODE_DPAD_CENTER`. @@ -860,7 +851,7 @@ pub enum NamedKey { Attn, Cancel, /// Show the application’s context menu. - /// This key is commonly found between the right `Super` key and the right `Control` key. + /// This key is commonly found between the right `Meta` key and the right `Control` key. ContextMenu, /// The `Esc` key. This key was originally used to initiate an escape sequence, but is /// now more generally used to exit or "escape" the current context, such as closing a dialog @@ -1704,7 +1695,7 @@ bitflags! { /// The "alt" key. const ALT = 0b100 << 6; /// This is the "windows" key on PC and "command" key on Mac. - const SUPER = 0b100 << 9; + const META = 0b100 << 9; } } @@ -1726,7 +1717,7 @@ impl ModifiersState { /// Returns `true` if the super key is pressed. pub fn super_key(&self) -> bool { - self.intersects(Self::SUPER) + self.intersects(Self::META) } } @@ -1759,7 +1750,7 @@ bitflags! { const RCONTROL = 0b0000_1000; const LALT = 0b0001_0000; const RALT = 0b0010_0000; - const LSUPER = 0b0100_0000; - const RSUPER = 0b1000_0000; + const LMETA = 0b0100_0000; + const RMETA = 0b1000_0000; } } diff --git a/src/platform_impl/android/keycodes.rs b/src/platform_impl/android/keycodes.rs index e65d5424cc..e1f77fe00e 100644 --- a/src/platform_impl/android/keycodes.rs +++ b/src/platform_impl/android/keycodes.rs @@ -143,8 +143,8 @@ pub fn to_physical_key(keycode: Keycode) -> PhysicalKey { Keycode::AltLeft => KeyCode::AltLeft, Keycode::AltRight => KeyCode::AltRight, - Keycode::MetaLeft => KeyCode::SuperLeft, - Keycode::MetaRight => KeyCode::SuperRight, + Keycode::MetaLeft => KeyCode::MetaLeft, + Keycode::MetaRight => KeyCode::MetaRight, Keycode::LeftBracket => KeyCode::BracketLeft, Keycode::RightBracket => KeyCode::BracketRight, @@ -340,8 +340,8 @@ pub fn to_logical(key_char: Option, keycode: Keycode) -> Key { CtrlRight => Key::Named(NamedKey::Control), CapsLock => Key::Named(NamedKey::CapsLock), ScrollLock => Key::Named(NamedKey::ScrollLock), - MetaLeft => Key::Named(NamedKey::Super), - MetaRight => Key::Named(NamedKey::Super), + MetaLeft => Key::Named(NamedKey::Meta), + MetaRight => Key::Named(NamedKey::Meta), Function => Key::Named(NamedKey::Fn), Sysrq => Key::Named(NamedKey::PrintScreen), Break => Key::Named(NamedKey::Pause), diff --git a/src/platform_impl/apple/appkit/event.rs b/src/platform_impl/apple/appkit/event.rs index f6eb3212b4..51a0425aa0 100644 --- a/src/platform_impl/apple/appkit/event.rs +++ b/src/platform_impl/apple/appkit/event.rs @@ -188,8 +188,8 @@ pub fn code_to_key(key: PhysicalKey, scancode: u16) -> Key { KeyCode::Space => return Key::Character(" ".into()), KeyCode::Backspace => NamedKey::Backspace, KeyCode::Escape => NamedKey::Escape, - KeyCode::SuperRight => NamedKey::Super, - KeyCode::SuperLeft => NamedKey::Super, + KeyCode::MetaRight => NamedKey::Meta, + KeyCode::MetaLeft => NamedKey::Meta, KeyCode::ShiftLeft => NamedKey::Shift, KeyCode::AltLeft => NamedKey::Alt, KeyCode::ControlLeft => NamedKey::Control, @@ -246,8 +246,8 @@ pub fn code_to_location(key: PhysicalKey) -> KeyLocation { }; match code { - KeyCode::SuperRight => KeyLocation::Right, - KeyCode::SuperLeft => KeyLocation::Left, + KeyCode::MetaRight => KeyLocation::Right, + KeyCode::MetaLeft => KeyLocation::Left, KeyCode::ShiftLeft => KeyLocation::Left, KeyCode::AltLeft => KeyLocation::Left, KeyCode::ControlLeft => KeyLocation::Left, @@ -335,11 +335,11 @@ pub(super) fn event_mods(event: &NSEvent) -> Modifiers { pressed_mods.set(ModifiersKeys::RALT, flags.contains(NX_DEVICERALTKEYMASK)); state.set( - ModifiersState::SUPER, + ModifiersState::META, flags.contains(NSEventModifierFlags::NSEventModifierFlagCommand), ); - pressed_mods.set(ModifiersKeys::LSUPER, flags.contains(NX_DEVICELCMDKEYMASK)); - pressed_mods.set(ModifiersKeys::RSUPER, flags.contains(NX_DEVICERCMDKEYMASK)); + pressed_mods.set(ModifiersKeys::LMETA, flags.contains(NX_DEVICELCMDKEYMASK)); + pressed_mods.set(ModifiersKeys::RMETA, flags.contains(NX_DEVICERCMDKEYMASK)); Modifiers { state, pressed_mods } } @@ -419,8 +419,8 @@ pub(crate) fn physicalkey_to_scancode(physical_key: PhysicalKey) -> Option KeyCode::Backquote => Some(0x32), KeyCode::Backspace => Some(0x33), KeyCode::Escape => Some(0x35), - KeyCode::SuperRight => Some(0x36), - KeyCode::SuperLeft => Some(0x37), + KeyCode::MetaRight => Some(0x36), + KeyCode::MetaLeft => Some(0x37), KeyCode::ShiftLeft => Some(0x38), KeyCode::AltLeft => Some(0x3a), KeyCode::ControlLeft => Some(0x3b), @@ -538,8 +538,8 @@ pub(crate) fn scancode_to_physicalkey(scancode: u32) -> PhysicalKey { 0x33 => KeyCode::Backspace, // 0x34 => unknown, 0x35 => KeyCode::Escape, - 0x36 => KeyCode::SuperRight, - 0x37 => KeyCode::SuperLeft, + 0x36 => KeyCode::MetaRight, + 0x37 => KeyCode::MetaLeft, 0x38 => KeyCode::ShiftLeft, 0x39 => KeyCode::CapsLock, 0x3a => KeyCode::AltLeft, diff --git a/src/platform_impl/apple/appkit/view.rs b/src/platform_impl/apple/appkit/view.rs index e8bdffa809..41a71bb443 100644 --- a/src/platform_impl/apple/appkit/view.rs +++ b/src/platform_impl/apple/appkit/view.rs @@ -82,7 +82,7 @@ fn key_to_modifier(key: &Key) -> Option { match key { Key::Named(NamedKey::Alt) => Some(ModifiersState::ALT), Key::Named(NamedKey::Control) => Some(ModifiersState::CONTROL), - Key::Named(NamedKey::Super) => Some(ModifiersState::SUPER), + Key::Named(NamedKey::Meta) => Some(ModifiersState::META), Key::Named(NamedKey::Shift) => Some(ModifiersState::SHIFT), _ => None, } @@ -93,7 +93,7 @@ fn get_right_modifier_code(key: &Key) -> KeyCode { Key::Named(NamedKey::Alt) => KeyCode::AltRight, Key::Named(NamedKey::Control) => KeyCode::ControlRight, Key::Named(NamedKey::Shift) => KeyCode::ShiftRight, - Key::Named(NamedKey::Super) => KeyCode::SuperRight, + Key::Named(NamedKey::Meta) => KeyCode::MetaRight, _ => unreachable!(), } } @@ -103,7 +103,7 @@ fn get_left_modifier_code(key: &Key) -> KeyCode { Key::Named(NamedKey::Alt) => KeyCode::AltLeft, Key::Named(NamedKey::Control) => KeyCode::ControlLeft, Key::Named(NamedKey::Shift) => KeyCode::ShiftLeft, - Key::Named(NamedKey::Super) => KeyCode::SuperLeft, + Key::Named(NamedKey::Meta) => KeyCode::MetaLeft, _ => unreachable!(), } } diff --git a/src/platform_impl/linux/common/xkb/keymap.rs b/src/platform_impl/linux/common/xkb/keymap.rs index 0b42c502e4..5c3df70cf8 100644 --- a/src/platform_impl/linux/common/xkb/keymap.rs +++ b/src/platform_impl/linux/common/xkb/keymap.rs @@ -166,8 +166,8 @@ pub fn scancode_to_physicalkey(scancode: u32) -> PhysicalKey { 122 => KeyCode::Lang1, 123 => KeyCode::Lang2, 124 => KeyCode::IntlYen, - 125 => KeyCode::SuperLeft, - 126 => KeyCode::SuperRight, + 125 => KeyCode::MetaLeft, + 126 => KeyCode::MetaRight, 127 => KeyCode::ContextMenu, 128 => KeyCode::BrowserStop, 129 => KeyCode::Again, @@ -419,8 +419,8 @@ pub fn physicalkey_to_scancode(key: PhysicalKey) -> Option { KeyCode::Lang1 => Some(122), KeyCode::Lang2 => Some(123), KeyCode::IntlYen => Some(124), - KeyCode::SuperLeft => Some(125), - KeyCode::SuperRight => Some(126), + KeyCode::MetaLeft => Some(125), + KeyCode::MetaRight => Some(126), KeyCode::ContextMenu => Some(127), KeyCode::BrowserStop => Some(128), KeyCode::Again => Some(129), @@ -622,16 +622,18 @@ pub fn keysym_to_key(keysym: u32) -> Key { keysyms::Control_R => NamedKey::Control, keysyms::Caps_Lock => NamedKey::CapsLock, // keysyms::Shift_Lock => NamedKey::ShiftLock, - - // keysyms::Meta_L => NamedKey::Meta, - // keysyms::Meta_R => NamedKey::Meta, keysyms::Alt_L => NamedKey::Alt, keysyms::Alt_R => NamedKey::Alt, - keysyms::Super_L => NamedKey::Super, - keysyms::Super_R => NamedKey::Super, keysyms::Hyper_L => NamedKey::Hyper, keysyms::Hyper_R => NamedKey::Hyper, + // Browsers map X11's Super keys to Meta, so we do that as well. + keysyms::Super_L => NamedKey::Meta, + keysyms::Super_R => NamedKey::Meta, + // The actual Meta keys do not seem to be used by browsers, so we don't do that either. + // keysyms::Meta_L => NamedKey::Meta, + // keysyms::Meta_R => NamedKey::Meta, + // XKB function and modifier keys // keysyms::ISO_Lock => NamedKey::IsoLock, // keysyms::ISO_Level2_Latch => NamedKey::IsoLevel2Latch, diff --git a/src/platform_impl/linux/common/xkb/state.rs b/src/platform_impl/linux/common/xkb/state.rs index 27c055aa20..31bcec8b3f 100644 --- a/src/platform_impl/linux/common/xkb/state.rs +++ b/src/platform_impl/linux/common/xkb/state.rs @@ -183,7 +183,7 @@ impl From for crate::keyboard::ModifiersState { to_mods.set(crate::keyboard::ModifiersState::SHIFT, mods.shift); to_mods.set(crate::keyboard::ModifiersState::CONTROL, mods.ctrl); to_mods.set(crate::keyboard::ModifiersState::ALT, mods.alt); - to_mods.set(crate::keyboard::ModifiersState::SUPER, mods.logo); + to_mods.set(crate::keyboard::ModifiersState::META, mods.logo); to_mods } } diff --git a/src/platform_impl/orbital/event_loop.rs b/src/platform_impl/orbital/event_loop.rs index c5f4bbfb2d..fec80246b6 100644 --- a/src/platform_impl/orbital/event_loop.rs +++ b/src/platform_impl/orbital/event_loop.rs @@ -122,7 +122,7 @@ fn convert_scancode(scancode: u8) -> (PhysicalKey, Option) { orbclient::K_SEMICOLON => (KeyCode::Semicolon, None), orbclient::K_SLASH => (KeyCode::Slash, None), orbclient::K_SPACE => (KeyCode::Space, None), - orbclient::K_SUPER => (KeyCode::SuperLeft, Some(NamedKey::Super)), + orbclient::K_SUPER => (KeyCode::MetaLeft, Some(NamedKey::Meta)), orbclient::K_TAB => (KeyCode::Tab, Some(NamedKey::Tab)), orbclient::K_TICK => (KeyCode::Backquote, None), orbclient::K_UP => (KeyCode::ArrowUp, Some(NamedKey::ArrowUp)), @@ -152,8 +152,8 @@ bitflags! { const RCTRL = 1 << 3; const LALT = 1 << 4; const RALT = 1 << 5; - const LSUPER = 1 << 6; - const RSUPER = 1 << 7; + const LMETA = 1 << 6; + const RMETA = 1 << 7; } } @@ -203,8 +203,8 @@ impl EventState { KeyCode::ControlRight => self.keyboard.set(KeyboardModifierState::RCTRL, pressed), KeyCode::AltLeft => self.keyboard.set(KeyboardModifierState::LALT, pressed), KeyCode::AltRight => self.keyboard.set(KeyboardModifierState::RALT, pressed), - KeyCode::SuperLeft => self.keyboard.set(KeyboardModifierState::LSUPER, pressed), - KeyCode::SuperRight => self.keyboard.set(KeyboardModifierState::RSUPER, pressed), + KeyCode::MetaLeft => self.keyboard.set(KeyboardModifierState::LMETA, pressed), + KeyCode::MetaRight => self.keyboard.set(KeyboardModifierState::RMETA, pressed), _ => (), } } @@ -262,14 +262,14 @@ impl EventState { pressed_mods.set(ModifiersKeys::LALT, self.keyboard.contains(KeyboardModifierState::LALT)); pressed_mods.set(ModifiersKeys::RALT, self.keyboard.contains(KeyboardModifierState::RALT)); - if self.keyboard.intersects(KeyboardModifierState::LSUPER | KeyboardModifierState::RSUPER) { - state |= ModifiersState::SUPER + if self.keyboard.intersects(KeyboardModifierState::LMETA | KeyboardModifierState::RMETA) { + state |= ModifiersState::META } pressed_mods - .set(ModifiersKeys::LSUPER, self.keyboard.contains(KeyboardModifierState::LSUPER)); + .set(ModifiersKeys::LMETA, self.keyboard.contains(KeyboardModifierState::LMETA)); pressed_mods - .set(ModifiersKeys::RSUPER, self.keyboard.contains(KeyboardModifierState::RSUPER)); + .set(ModifiersKeys::RMETA, self.keyboard.contains(KeyboardModifierState::RMETA)); Modifiers { state, pressed_mods } } diff --git a/src/platform_impl/web/keyboard.rs b/src/platform_impl/web/keyboard.rs index c660639985..d0484ef54f 100644 --- a/src/platform_impl/web/keyboard.rs +++ b/src/platform_impl/web/keyboard.rs @@ -21,8 +21,9 @@ impl Key { "Shift" => NamedKey::Shift, "Symbol" => NamedKey::Symbol, "SymbolLock" => NamedKey::SymbolLock, + "Super" => NamedKey::Super, "Hyper" => NamedKey::Hyper, - "Meta" => NamedKey::Super, + "Meta" => NamedKey::Meta, "Enter" => NamedKey::Enter, "Tab" => NamedKey::Tab, "ArrowDown" => NamedKey::ArrowDown, @@ -380,8 +381,8 @@ impl PhysicalKey { "ControlLeft" => KeyCode::ControlLeft, "ControlRight" => KeyCode::ControlRight, "Enter" => KeyCode::Enter, - "MetaLeft" => KeyCode::SuperLeft, - "MetaRight" => KeyCode::SuperRight, + "MetaLeft" => KeyCode::MetaLeft, + "MetaRight" => KeyCode::MetaRight, "ShiftLeft" => KeyCode::ShiftLeft, "ShiftRight" => KeyCode::ShiftRight, "Space" => KeyCode::Space, @@ -464,6 +465,7 @@ impl PhysicalKey { "AudioVolumeMute" => KeyCode::AudioVolumeMute, "AudioVolumeUp" => KeyCode::AudioVolumeUp, "WakeUp" => KeyCode::WakeUp, + "Super" => KeyCode::Super, "Hyper" => KeyCode::Hyper, "Turbo" => KeyCode::Turbo, "Abort" => KeyCode::Abort, diff --git a/src/platform_impl/web/web_sys/event.rs b/src/platform_impl/web/web_sys/event.rs index 551e40a459..dbecbf395e 100644 --- a/src/platform_impl/web/web_sys/event.rs +++ b/src/platform_impl/web/web_sys/event.rs @@ -215,7 +215,7 @@ pub fn keyboard_modifiers(event: &KeyboardEvent) -> ModifiersState { state |= ModifiersState::ALT; } if event.meta_key() { - state |= ModifiersState::SUPER; + state |= ModifiersState::META; } state @@ -234,7 +234,7 @@ pub fn mouse_modifiers(event: &MouseEvent) -> ModifiersState { state |= ModifiersState::ALT; } if event.meta_key() { - state |= ModifiersState::SUPER; + state |= ModifiersState::META; } state diff --git a/src/platform_impl/windows/keyboard.rs b/src/platform_impl/windows/keyboard.rs index d360a1d363..24418f4f57 100644 --- a/src/platform_impl/windows/keyboard.rs +++ b/src/platform_impl/windows/keyboard.rs @@ -978,8 +978,8 @@ pub(crate) fn physicalkey_to_scancode(physical_key: PhysicalKey) -> Option KeyCode::ControlLeft => Some(0x001d), KeyCode::ControlRight => Some(0xe01d), KeyCode::Enter => Some(0x001c), - KeyCode::SuperLeft => Some(0xe05b), - KeyCode::SuperRight => Some(0xe05c), + KeyCode::MetaLeft => Some(0xe05b), + KeyCode::MetaRight => Some(0xe05c), KeyCode::ShiftLeft => Some(0x002a), KeyCode::ShiftRight => Some(0x0036), KeyCode::Space => Some(0x0039), @@ -1147,8 +1147,8 @@ pub(crate) fn scancode_to_physicalkey(scancode: u32) -> PhysicalKey { 0x001d => KeyCode::ControlLeft, 0xe01d => KeyCode::ControlRight, 0x001c => KeyCode::Enter, - 0xe05b => KeyCode::SuperLeft, - 0xe05c => KeyCode::SuperRight, + 0xe05b => KeyCode::MetaLeft, + 0xe05c => KeyCode::MetaRight, 0x002a => KeyCode::ShiftLeft, 0x0036 => KeyCode::ShiftRight, 0x0039 => KeyCode::Space, diff --git a/src/platform_impl/windows/keyboard_layout.rs b/src/platform_impl/windows/keyboard_layout.rs index 1ab0d2a68e..fb124d854d 100644 --- a/src/platform_impl/windows/keyboard_layout.rs +++ b/src/platform_impl/windows/keyboard_layout.rs @@ -279,7 +279,7 @@ impl LayoutCache { mods.set(ModifiersState::SHIFT, key_pressed(VK_SHIFT)); mods.set(ModifiersState::CONTROL, key_pressed(VK_CONTROL) && !filter_out_altgr); mods.set(ModifiersState::ALT, key_pressed(VK_MENU) && !filter_out_altgr); - mods.set(ModifiersState::SUPER, key_pressed(VK_LWIN) || key_pressed(VK_RWIN)); + mods.set(ModifiersState::META, key_pressed(VK_LWIN) || key_pressed(VK_RWIN)); mods } @@ -584,8 +584,8 @@ fn keycode_to_vkey(keycode: KeyCode, hkl: u64) -> VIRTUAL_KEY { KeyCode::ControlLeft => VK_LCONTROL, KeyCode::ControlRight => VK_RCONTROL, KeyCode::Enter => VK_RETURN, - KeyCode::SuperLeft => VK_LWIN, - KeyCode::SuperRight => VK_RWIN, + KeyCode::MetaLeft => VK_LWIN, + KeyCode::MetaRight => VK_RWIN, KeyCode::ShiftLeft => VK_RSHIFT, KeyCode::ShiftRight => VK_LSHIFT, KeyCode::Space => VK_SPACE, @@ -803,8 +803,8 @@ fn vkey_to_non_char_key( VK_INSERT => Key::Named(NamedKey::Insert), VK_DELETE => Key::Named(NamedKey::Delete), VK_HELP => Key::Named(NamedKey::Help), - VK_LWIN => Key::Named(NamedKey::Super), - VK_RWIN => Key::Named(NamedKey::Super), + VK_LWIN => Key::Named(NamedKey::Meta), + VK_RWIN => Key::Named(NamedKey::Meta), VK_APPS => Key::Named(NamedKey::ContextMenu), VK_SLEEP => Key::Named(NamedKey::Standby), From 46529b00d463999aa383f4f19feff2d922da0df4 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Sun, 1 Dec 2024 14:40:36 +0100 Subject: [PATCH 3/3] Use keyboard-types --- Cargo.toml | 10 +- src/event.rs | 6 +- src/keyboard.rs | 1226 +---------------------------------------------- 3 files changed, 37 insertions(+), 1205 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bbd6f8d1a1..97ec697ccb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,14 @@ android-game-activity = ["android-activity/game-activity"] android-native-activity = ["android-activity/native-activity"] default = ["x11", "wayland", "wayland-dlopen", "wayland-csd-adwaita"] mint = ["dpi/mint"] -serde = ["dep:serde", "cursor-icon/serde", "smol_str/serde", "dpi/serde", "bitflags/serde"] +serde = [ + "dep:serde", + "cursor-icon/serde", + "smol_str/serde", + "dpi/serde", + "bitflags/serde", + "keyboard-types/serde", +] wayland = [ "wayland-client", "wayland-backend", @@ -79,6 +86,7 @@ cfg_aliases = "0.2.1" bitflags = "2" cursor-icon = "1.1.0" dpi = { version = "0.1.1", path = "dpi" } +keyboard-types = { git = "https://github.com/madsmtm/keyboard-types.git", branch = "winit", default-features = false } rwh_06 = { package = "raw-window-handle", version = "0.6", features = ["std"] } serde = { workspace = true, optional = true } smol_str = "0.2.0" diff --git a/src/event.rs b/src/event.rs index 6f702c8dea..9ea1cf6e0f 100644 --- a/src/event.rs +++ b/src/event.rs @@ -732,7 +732,9 @@ pub struct KeyEvent { /// The most prevalent use case for this is games. For example the default keys for the player /// to move around might be the W, A, S, and D keys on a US layout. The position of these keys /// is more important than their label, so they should map to Z, Q, S, and D on an "AZERTY" - /// layout. (This value is `KeyCode::KeyW` for the Z key on an AZERTY layout.) + /// layout. (This value is [`Code::KeyW`] for the Z key on an AZERTY layout.) + /// + /// [`Code::KeyW`]: keyboard_types::Code::KeyW /// /// ## Caveats /// @@ -740,7 +742,7 @@ pub struct KeyEvent { /// implements DVORAK in hardware (or firmware) /// - Your application will likely have to handle keyboards which are missing keys that your /// own keyboard has. - /// - Certain `KeyCode`s will move between a couple of different positions depending on what + /// - Certain `Code`s will move between a couple of different positions depending on what /// layout the keyboard was manufactured to support. /// /// **Because of these caveats, it is important that you provide users with a way to configure diff --git a/src/keyboard.rs b/src/keyboard.rs index 97cea8547c..b2d1d7872b 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -1,8 +1,8 @@ //! Types related to the keyboard. // This file contains a substantial portion of the UI Events Specification by the W3C. In -// particular, the variant names within `Key` and `KeyCode` and their documentation are modified -// versions of contents of the aforementioned specification. +// particular, the variant names within `Key` and their documentation are modified versions of +// contents of the aforementioned specification. // // The original documents are: // @@ -11,14 +11,9 @@ // https://www.w3.org/TR/2017/CR-uievents-key-20170601/ // Copyright © 2017 W3C® (MIT, ERCIM, Keio, Beihang). // -// ### For `KeyCode` -// UI Events KeyboardEvent code Values -// https://www.w3.org/TR/2017/CR-uievents-code-20170601/ -// Copyright © 2017 W3C® (MIT, ERCIM, Keio, Beihang). -// // These documents were used under the terms of the following license. This W3C license as well as -// the W3C short notice apply to the `Key` and `KeyCode` enums and their variants and the -// documentation attached to their variants. +// the W3C short notice apply to the `Key` enums and their variants and the documentation attached +// to their variants. // --------- BEGINNING OF W3C LICENSE -------------------------------------------------------------- // @@ -70,6 +65,7 @@ // --------- END OF W3C SHORT NOTICE --------------------------------------------------------------- use bitflags::bitflags; +pub use keyboard_types::{Code as KeyCode, NamedKey}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; pub use smol_str::SmolStr; @@ -218,8 +214,8 @@ impl PartialEq for NativeKey { /// Represents the location of a physical key. /// -/// This type is a superset of [`KeyCode`], including an [`Unidentified`][Self::Unidentified] -/// variant. +/// Winit will not emit [`KeyCode::Unidentified`] when it cannot recognize the key, instead it will +/// emit [`PhysicalKey::Unidentified`] with additional data about the key. #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum PhysicalKey { @@ -240,6 +236,16 @@ impl From for PhysicalKey { } } +impl From for KeyCode { + #[inline] + fn from(key: PhysicalKey) -> Self { + match key { + PhysicalKey::Code(code) => code, + PhysicalKey::Unidentified(_) => KeyCode::Unidentified, + } + } +} + impl From for PhysicalKey { #[inline] fn from(code: NativeKeyCode) -> Self { @@ -281,1169 +287,6 @@ impl PartialEq for NativeKeyCode { } } -/// Code representing the location of a physical key -/// -/// This conforms to the UI Events Specification's [`KeyboardEvent.code`]. -/// -/// [`KeyboardEvent.code`]: https://w3c.github.io/uievents-code/#code-value-tables -#[non_exhaustive] -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub enum KeyCode { - /// ` on a US keyboard. This is also called a backtick or grave. - /// This is the 半角/全角/漢字 - /// (hankaku/zenkaku/kanji) key on Japanese keyboards - Backquote, - /// Used for both the US \\ (on the 101-key layout) and also for the key - /// located between the " and Enter keys on row C of the 102-, - /// 104- and 106-key layouts. - /// Labeled # on a UK (102) keyboard. - Backslash, - /// [ on a US keyboard. - BracketLeft, - /// ] on a US keyboard. - BracketRight, - /// , on a US keyboard. - Comma, - /// 0 on a US keyboard. - Digit0, - /// 1 on a US keyboard. - Digit1, - /// 2 on a US keyboard. - Digit2, - /// 3 on a US keyboard. - Digit3, - /// 4 on a US keyboard. - Digit4, - /// 5 on a US keyboard. - Digit5, - /// 6 on a US keyboard. - Digit6, - /// 7 on a US keyboard. - Digit7, - /// 8 on a US keyboard. - Digit8, - /// 9 on a US keyboard. - Digit9, - /// = on a US keyboard. - Equal, - /// Located between the left Shift and Z keys. - /// Labeled \\ on a UK keyboard. - IntlBackslash, - /// Located between the / and right Shift keys. - /// Labeled \\ (ro) on a Japanese keyboard. - IntlRo, - /// Located between the = and Backspace keys. - /// Labeled ¥ (yen) on a Japanese keyboard. \\ on a - /// Russian keyboard. - IntlYen, - /// a on a US keyboard. - /// Labeled q on an AZERTY (e.g., French) keyboard. - KeyA, - /// b on a US keyboard. - KeyB, - /// c on a US keyboard. - KeyC, - /// d on a US keyboard. - KeyD, - /// e on a US keyboard. - KeyE, - /// f on a US keyboard. - KeyF, - /// g on a US keyboard. - KeyG, - /// h on a US keyboard. - KeyH, - /// i on a US keyboard. - KeyI, - /// j on a US keyboard. - KeyJ, - /// k on a US keyboard. - KeyK, - /// l on a US keyboard. - KeyL, - /// m on a US keyboard. - KeyM, - /// n on a US keyboard. - KeyN, - /// o on a US keyboard. - KeyO, - /// p on a US keyboard. - KeyP, - /// q on a US keyboard. - /// Labeled a on an AZERTY (e.g., French) keyboard. - KeyQ, - /// r on a US keyboard. - KeyR, - /// s on a US keyboard. - KeyS, - /// t on a US keyboard. - KeyT, - /// u on a US keyboard. - KeyU, - /// v on a US keyboard. - KeyV, - /// w on a US keyboard. - /// Labeled z on an AZERTY (e.g., French) keyboard. - KeyW, - /// x on a US keyboard. - KeyX, - /// y on a US keyboard. - /// Labeled z on a QWERTZ (e.g., German) keyboard. - KeyY, - /// z on a US keyboard. - /// Labeled w on an AZERTY (e.g., French) keyboard, and y on a - /// QWERTZ (e.g., German) keyboard. - KeyZ, - /// - on a US keyboard. - Minus, - /// . on a US keyboard. - Period, - /// ' on a US keyboard. - Quote, - /// ; on a US keyboard. - Semicolon, - /// / on a US keyboard. - Slash, - /// Alt, Option, or . - AltLeft, - /// Alt, Option, or . - /// This is labeled AltGr on many keyboard layouts. - AltRight, - /// Backspace or . - /// Labeled Delete on Apple keyboards. - Backspace, - /// CapsLock or - CapsLock, - /// The application context menu key, which is typically found between the right - /// Meta key and the right Control key. - ContextMenu, - /// Control or - ControlLeft, - /// Control or - ControlRight, - /// Enter or . Labeled Return on Apple keyboards. - Enter, - /// The Windows, , Command, or other OS symbol key. - MetaLeft, - /// The Windows, , Command, or other OS symbol key. - MetaRight, - /// Shift or - ShiftLeft, - /// Shift or - ShiftRight, - ///   (space) - Space, - /// Tab or - Tab, - /// Japanese: (henkan) - Convert, - /// Japanese: カタカナ/ひらがな/ローマ字 - /// (katakana/hiragana/romaji) - KanaMode, - /// Korean: HangulMode 한/영 (han/yeong) - /// - /// Japanese (Mac keyboard): (kana) - Lang1, - /// Korean: Hanja (hanja) - /// - /// Japanese (Mac keyboard): (eisu) - Lang2, - /// Japanese (word-processing keyboard): Katakana - Lang3, - /// Japanese (word-processing keyboard): Hiragana - Lang4, - /// Japanese (word-processing keyboard): Zenkaku/Hankaku - Lang5, - /// Japanese: 無変換 (muhenkan) - NonConvert, - /// . The forward delete key. - /// Note that on Apple keyboards, the key labelled Delete on the main part of - /// the keyboard is encoded as [`Backspace`]. - /// - /// [`Backspace`]: Self::Backspace - Delete, - /// Page Down, End, or - End, - /// Help. Not present on standard PC keyboards. - Help, - /// Home or - Home, - /// Insert or Ins. Not present on Apple keyboards. - Insert, - /// Page Down, PgDn, or - PageDown, - /// Page Up, PgUp, or - PageUp, - /// - ArrowDown, - /// - ArrowLeft, - /// - ArrowRight, - /// - ArrowUp, - /// On the Mac, this is used for the numpad Clear key. - NumLock, - /// 0 Ins on a keyboard. 0 on a phone or remote control - Numpad0, - /// 1 End on a keyboard. 1 or 1 QZ on a phone or remote - /// control - Numpad1, - /// 2 ↓ on a keyboard. 2 ABC on a phone or remote control - Numpad2, - /// 3 PgDn on a keyboard. 3 DEF on a phone or remote control - Numpad3, - /// 4 ← on a keyboard. 4 GHI on a phone or remote control - Numpad4, - /// 5 on a keyboard. 5 JKL on a phone or remote control - Numpad5, - /// 6 → on a keyboard. 6 MNO on a phone or remote control - Numpad6, - /// 7 Home on a keyboard. 7 PQRS or 7 PRS on a phone - /// or remote control - Numpad7, - /// 8 ↑ on a keyboard. 8 TUV on a phone or remote control - Numpad8, - /// 9 PgUp on a keyboard. 9 WXYZ or 9 WXY on a phone - /// or remote control - Numpad9, - /// + - NumpadAdd, - /// Found on the Microsoft Natural Keyboard. - NumpadBackspace, - /// C or A (All Clear). Also for use with numpads that have a - /// Clear key that is separate from the NumLock key. On the Mac, the - /// numpad Clear key is encoded as [`NumLock`]. - /// - /// [`NumLock`]: Self::NumLock - NumpadClear, - /// C (Clear Entry) - NumpadClearEntry, - /// , (thousands separator). For locales where the thousands separator - /// is a "." (e.g., Brazil), this key may generate a .. - NumpadComma, - /// . Del. For locales where the decimal separator is "," (e.g., - /// Brazil), this key may generate a ,. - NumpadDecimal, - /// / - NumpadDivide, - NumpadEnter, - /// = - NumpadEqual, - /// # on a phone or remote control device. This key is typically found - /// below the 9 key and to the right of the 0 key. - NumpadHash, - /// M Add current entry to the value stored in memory. - NumpadMemoryAdd, - /// M Clear the value stored in memory. - NumpadMemoryClear, - /// M Replace the current entry with the value stored in memory. - NumpadMemoryRecall, - /// M Replace the value stored in memory with the current entry. - NumpadMemoryStore, - /// M Subtract current entry from the value stored in memory. - NumpadMemorySubtract, - /// * on a keyboard. For use with numpads that provide mathematical - /// operations (+, - * and /). - /// - /// Use `NumpadStar` for the * key on phones and remote controls. - NumpadMultiply, - /// ( Found on the Microsoft Natural Keyboard. - NumpadParenLeft, - /// ) Found on the Microsoft Natural Keyboard. - NumpadParenRight, - /// * on a phone or remote control device. - /// - /// This key is typically found below the 7 key and to the left of - /// the 0 key. - /// - /// Use "NumpadMultiply" for the * key on - /// numeric keypads. - NumpadStar, - /// - - NumpadSubtract, - /// Esc or - Escape, - /// Fn This is typically a hardware key that does not generate a separate code. - Fn, - /// FLock or FnLock. Function Lock key. Found on the Microsoft - /// Natural Keyboard. - FnLock, - /// PrtScr SysRq or Print Screen - PrintScreen, - /// Scroll Lock - ScrollLock, - /// Pause Break - Pause, - /// Some laptops place this key to the left of the key. - /// - /// This also the "back" button (triangle) on Android. - BrowserBack, - BrowserFavorites, - /// Some laptops place this key to the right of the key. - BrowserForward, - /// The "home" button on Android. - BrowserHome, - BrowserRefresh, - BrowserSearch, - BrowserStop, - /// Eject or . This key is placed in the function section on some Apple - /// keyboards. - Eject, - /// Sometimes labelled My Computer on the keyboard - LaunchApp1, - /// Sometimes labelled Calculator on the keyboard - LaunchApp2, - LaunchMail, - MediaPlayPause, - MediaSelect, - MediaStop, - MediaTrackNext, - MediaTrackPrevious, - /// This key is placed in the function section on some Apple keyboards, replacing the - /// Eject key. - Power, - Sleep, - AudioVolumeDown, - AudioVolumeMute, - AudioVolumeUp, - WakeUp, - // Legacy modifier key. - Super, - // Legacy modifier key. - Hyper, - Turbo, - Abort, - Resume, - Suspend, - /// Found on Sun’s USB keyboard. - Again, - /// Found on Sun’s USB keyboard. - Copy, - /// Found on Sun’s USB keyboard. - Cut, - /// Found on Sun’s USB keyboard. - Find, - /// Found on Sun’s USB keyboard. - Open, - /// Found on Sun’s USB keyboard. - Paste, - /// Found on Sun’s USB keyboard. - Props, - /// Found on Sun’s USB keyboard. - Select, - /// Found on Sun’s USB keyboard. - Undo, - /// Use for dedicated ひらがな key found on some Japanese word processing keyboards. - Hiragana, - /// Use for dedicated カタカナ key found on some Japanese word processing keyboards. - Katakana, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F1, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F2, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F3, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F4, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F5, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F6, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F7, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F8, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F9, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F10, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F11, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F12, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F13, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F14, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F15, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F16, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F17, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F18, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F19, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F20, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F21, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F22, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F23, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F24, - /// General-purpose function key. - F25, - /// General-purpose function key. - F26, - /// General-purpose function key. - F27, - /// General-purpose function key. - F28, - /// General-purpose function key. - F29, - /// General-purpose function key. - F30, - /// General-purpose function key. - F31, - /// General-purpose function key. - F32, - /// General-purpose function key. - F33, - /// General-purpose function key. - F34, - /// General-purpose function key. - F35, -} - -/// A [`Key::Named`] value -/// -/// This conforms to the UI Events Specification's [`KeyboardEvent.key`]. -/// -/// [`KeyboardEvent.key`]: https://w3c.github.io/uievents-key/ -#[non_exhaustive] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub enum NamedKey { - /// The `Alt` (Alternative) key. - /// - /// This key enables the alternate modifier function for interpreting concurrent or subsequent - /// keyboard input. This key value is also used for the Apple Option key. - Alt, - /// The Alternate Graphics (AltGr or AltGraph) key. - /// - /// This key is used enable the ISO Level 3 shift modifier (the standard `Shift` key is the - /// level 2 modifier). - AltGraph, - /// The `Caps Lock` (Capital) key. - /// - /// Toggle capital character lock function for interpreting subsequent keyboard input event. - CapsLock, - /// The `Control` or `Ctrl` key. - /// - /// Used to enable control modifier function for interpreting concurrent or subsequent keyboard - /// input. - Control, - /// The Function switch `Fn` key. Activating this key simultaneously with another key changes - /// that key’s value to an alternate character or function. This key is often handled directly - /// in the keyboard hardware and does not usually generate key events. - Fn, - /// The Function-Lock (`FnLock` or `F-Lock`) key. Activating this key switches the mode of the - /// keyboard to changes some keys' values to an alternate character or function. This key is - /// often handled directly in the keyboard hardware and does not usually generate key events. - FnLock, - /// The `NumLock` or Number Lock key. Used to toggle numpad mode function for interpreting - /// subsequent keyboard input. - NumLock, - /// Toggle between scrolling and cursor movement modes. - ScrollLock, - /// Used to enable shift modifier function for interpreting concurrent or subsequent keyboard - /// input. - Shift, - /// The Symbol modifier key (used on some virtual keyboards). - Symbol, - SymbolLock, - // Legacy modifier key. - Super, - // Legacy modifier key. - Hyper, - /// Used to enable "meta" modifier function for interpreting concurrent or subsequent keyboard - /// input. This key value is used for the "Windows Logo" key and the Apple `Command` or `⌘` - /// key. - Meta, - /// The `Enter` or `↵` key. Used to activate current selection or accept current input. This - /// key value is also used for the `Return` (Macintosh numpad) key. This key value is also - /// used for the Android `KEYCODE_DPAD_CENTER`. - Enter, - /// The Horizontal Tabulation `Tab` key. - Tab, - /// Navigate or traverse downward. (`KEYCODE_DPAD_DOWN`) - ArrowDown, - /// Navigate or traverse leftward. (`KEYCODE_DPAD_LEFT`) - ArrowLeft, - /// Navigate or traverse rightward. (`KEYCODE_DPAD_RIGHT`) - ArrowRight, - /// Navigate or traverse upward. (`KEYCODE_DPAD_UP`) - ArrowUp, - /// The End key, used with keyboard entry to go to the end of content (`KEYCODE_MOVE_END`). - End, - /// The Home key, used with keyboard entry, to go to start of content (`KEYCODE_MOVE_HOME`). - /// For the mobile phone `Home` key (which goes to the phone’s main screen), use [`GoHome`]. - /// - /// [`GoHome`]: Self::GoHome - Home, - /// Scroll down or display next page of content. - PageDown, - /// Scroll up or display previous page of content. - PageUp, - /// Used to remove the character to the left of the cursor. This key value is also used for - /// the key labeled `Delete` on MacOS keyboards. - Backspace, - /// Remove the currently selected input. - Clear, - /// Copy the current selection. (`APPCOMMAND_COPY`) - Copy, - /// The Cursor Select key. - CrSel, - /// Cut the current selection. (`APPCOMMAND_CUT`) - Cut, - /// Used to delete the character to the right of the cursor. This key value is also used for - /// the key labeled `Delete` on MacOS keyboards when `Fn` is active. - Delete, - /// The Erase to End of Field key. This key deletes all characters from the current cursor - /// position to the end of the current field. - EraseEof, - /// The Extend Selection (Exsel) key. - ExSel, - /// Toggle between text modes for insertion or overtyping. - /// (`KEYCODE_INSERT`) - Insert, - /// The Paste key. (`APPCOMMAND_PASTE`) - Paste, - /// Redo the last action. (`APPCOMMAND_REDO`) - Redo, - /// Undo the last action. (`APPCOMMAND_UNDO`) - Undo, - /// The Accept (Commit, OK) key. Accept current option or input method sequence conversion. - Accept, - /// Redo or repeat an action. - Again, - /// The Attention (Attn) key. - Attn, - Cancel, - /// Show the application’s context menu. - /// This key is commonly found between the right `Meta` key and the right `Control` key. - ContextMenu, - /// The `Esc` key. This key was originally used to initiate an escape sequence, but is - /// now more generally used to exit or "escape" the current context, such as closing a dialog - /// or exiting full screen mode. - Escape, - Execute, - /// Open the Find dialog. (`APPCOMMAND_FIND`) - Find, - /// Open a help dialog or toggle display of help information. (`APPCOMMAND_HELP`, - /// `KEYCODE_HELP`) - Help, - /// Pause the current state or application (as appropriate). - /// - /// Note: Do not use this value for the `Pause` button on media controllers. Use `"MediaPause"` - /// instead. - Pause, - /// Play or resume the current state or application (as appropriate). - /// - /// Note: Do not use this value for the `Play` button on media controllers. Use `"MediaPlay"` - /// instead. - Play, - /// The properties (Props) key. - Props, - Select, - /// The ZoomIn key. (`KEYCODE_ZOOM_IN`) - ZoomIn, - /// The ZoomOut key. (`KEYCODE_ZOOM_OUT`) - ZoomOut, - /// The Brightness Down key. Typically controls the display brightness. - /// (`KEYCODE_BRIGHTNESS_DOWN`) - BrightnessDown, - /// The Brightness Up key. Typically controls the display brightness. (`KEYCODE_BRIGHTNESS_UP`) - BrightnessUp, - /// Toggle removable media to eject (open) and insert (close) state. (`KEYCODE_MEDIA_EJECT`) - Eject, - LogOff, - /// Toggle power state. (`KEYCODE_POWER`) - /// Note: Note: Some devices might not expose this key to the operating environment. - Power, - /// The `PowerOff` key. Sometime called `PowerDown`. - PowerOff, - /// Initiate print-screen function. - PrintScreen, - /// The Hibernate key. This key saves the current state of the computer to disk so that it can - /// be restored. The computer will then shutdown. - Hibernate, - /// The Standby key. This key turns off the display and places the computer into a low-power - /// mode without completely shutting down. It is sometimes labelled `Suspend` or `Sleep` key. - /// (`KEYCODE_SLEEP`) - Standby, - /// The WakeUp key. (`KEYCODE_WAKEUP`) - WakeUp, - /// Initiate the multi-candidate mode. - AllCandidates, - Alphanumeric, - /// Initiate the Code Input mode to allow characters to be entered by - /// their code points. - CodeInput, - /// The Compose key, also known as "Multi_key" on the X Window System. This key acts in a - /// manner similar to a dead key, triggering a mode where subsequent key presses are combined - /// to produce a different character. - Compose, - /// Convert the current input method sequence. - Convert, - /// The Final Mode `Final` key used on some Asian keyboards, to enable the final mode for IMEs. - FinalMode, - /// Switch to the first character group. (ISO/IEC 9995) - GroupFirst, - /// Switch to the last character group. (ISO/IEC 9995) - GroupLast, - /// Switch to the next character group. (ISO/IEC 9995) - GroupNext, - /// Switch to the previous character group. (ISO/IEC 9995) - GroupPrevious, - /// Toggle between or cycle through input modes of IMEs. - ModeChange, - NextCandidate, - /// Accept current input method sequence without - /// conversion in IMEs. - NonConvert, - PreviousCandidate, - Process, - SingleCandidate, - /// Toggle between Hangul and English modes. - HangulMode, - HanjaMode, - JunjaMode, - /// The Eisu key. This key may close the IME, but its purpose is defined by the current IME. - /// (`KEYCODE_EISU`) - Eisu, - /// The (Half-Width) Characters key. - Hankaku, - /// The Hiragana (Japanese Kana characters) key. - Hiragana, - /// The Hiragana/Katakana toggle key. (`KEYCODE_KATAKANA_HIRAGANA`) - HiraganaKatakana, - /// The Kana Mode (Kana Lock) key. This key is used to enter hiragana mode (typically from - /// romaji mode). - KanaMode, - /// The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key. This key - /// is typically used to switch to a hiragana keyboard for the purpose of converting input - /// into kanji. (`KEYCODE_KANA`) - KanjiMode, - /// The Katakana (Japanese Kana characters) key. - Katakana, - /// The Roman characters function key. - Romaji, - /// The Zenkaku (Full-Width) Characters key. - Zenkaku, - /// The Zenkaku/Hankaku (full-width/half-width) toggle key. (`KEYCODE_ZENKAKU_HANKAKU`) - ZenkakuHankaku, - /// General purpose virtual function key, as index 1. - Soft1, - /// General purpose virtual function key, as index 2. - Soft2, - /// General purpose virtual function key, as index 3. - Soft3, - /// General purpose virtual function key, as index 4. - Soft4, - /// Select next (numerically or logically) lower channel. (`APPCOMMAND_MEDIA_CHANNEL_DOWN`, - /// `KEYCODE_CHANNEL_DOWN`) - ChannelDown, - /// Select next (numerically or logically) higher channel. (`APPCOMMAND_MEDIA_CHANNEL_UP`, - /// `KEYCODE_CHANNEL_UP`) - ChannelUp, - /// Close the current document or message (Note: This doesn’t close the application). - /// (`APPCOMMAND_CLOSE`) - Close, - /// Open an editor to forward the current message. (`APPCOMMAND_FORWARD_MAIL`) - MailForward, - /// Open an editor to reply to the current message. (`APPCOMMAND_REPLY_TO_MAIL`) - MailReply, - /// Send the current message. (`APPCOMMAND_SEND_MAIL`) - MailSend, - /// Close the current media, for example to close a CD or DVD tray. (`KEYCODE_MEDIA_CLOSE`) - MediaClose, - /// Initiate or continue forward playback at faster than normal speed, or increase speed if - /// already fast forwarding. (`APPCOMMAND_MEDIA_FAST_FORWARD`, `KEYCODE_MEDIA_FAST_FORWARD`) - MediaFastForward, - /// Pause the currently playing media. (`APPCOMMAND_MEDIA_PAUSE`, `KEYCODE_MEDIA_PAUSE`) - /// - /// Note: Media controller devices should use this value rather than `"Pause"` for their pause - /// keys. - MediaPause, - /// Initiate or continue media playback at normal speed, if not currently playing at normal - /// speed. (`APPCOMMAND_MEDIA_PLAY`, `KEYCODE_MEDIA_PLAY`) - MediaPlay, - /// Toggle media between play and pause states. (`APPCOMMAND_MEDIA_PLAY_PAUSE`, - /// `KEYCODE_MEDIA_PLAY_PAUSE`) - MediaPlayPause, - /// Initiate or resume recording of currently selected media. (`APPCOMMAND_MEDIA_RECORD`, - /// `KEYCODE_MEDIA_RECORD`) - MediaRecord, - /// Initiate or continue reverse playback at faster than normal speed, or increase speed if - /// already rewinding. (`APPCOMMAND_MEDIA_REWIND`, `KEYCODE_MEDIA_REWIND`) - MediaRewind, - /// Stop media playing, pausing, forwarding, rewinding, or recording, if not already stopped. - /// (`APPCOMMAND_MEDIA_STOP`, `KEYCODE_MEDIA_STOP`) - MediaStop, - /// Seek to next media or program track. (`APPCOMMAND_MEDIA_NEXTTRACK`, `KEYCODE_MEDIA_NEXT`) - MediaTrackNext, - /// Seek to previous media or program track. (`APPCOMMAND_MEDIA_PREVIOUSTRACK`, - /// `KEYCODE_MEDIA_PREVIOUS`) - MediaTrackPrevious, - /// Open a new document or message. (`APPCOMMAND_NEW`) - New, - /// Open an existing document or message. (`APPCOMMAND_OPEN`) - Open, - /// Print the current document or message. (`APPCOMMAND_PRINT`) - Print, - /// Save the current document or message. (`APPCOMMAND_SAVE`) - Save, - /// Spellcheck the current document or selection. (`APPCOMMAND_SPELL_CHECK`) - SpellCheck, - /// The `11` key found on media numpads that - /// have buttons from `1` ... `12`. - Key11, - /// The `12` key found on media numpads that - /// have buttons from `1` ... `12`. - Key12, - /// Adjust audio balance leftward. (`VK_AUDIO_BALANCE_LEFT`) - AudioBalanceLeft, - /// Adjust audio balance rightward. (`VK_AUDIO_BALANCE_RIGHT`) - AudioBalanceRight, - /// Decrease audio bass boost or cycle down through bass boost states. (`APPCOMMAND_BASS_DOWN`, - /// `VK_BASS_BOOST_DOWN`) - AudioBassBoostDown, - /// Toggle bass boost on/off. (`APPCOMMAND_BASS_BOOST`) - AudioBassBoostToggle, - /// Increase audio bass boost or cycle up through bass boost states. (`APPCOMMAND_BASS_UP`, - /// `VK_BASS_BOOST_UP`) - AudioBassBoostUp, - /// Adjust audio fader towards front. (`VK_FADER_FRONT`) - AudioFaderFront, - /// Adjust audio fader towards rear. (`VK_FADER_REAR`) - AudioFaderRear, - /// Advance surround audio mode to next available mode. (`VK_SURROUND_MODE_NEXT`) - AudioSurroundModeNext, - /// Decrease treble. (`APPCOMMAND_TREBLE_DOWN`) - AudioTrebleDown, - /// Increase treble. (`APPCOMMAND_TREBLE_UP`) - AudioTrebleUp, - /// Decrease audio volume. (`APPCOMMAND_VOLUME_DOWN`, `KEYCODE_VOLUME_DOWN`) - AudioVolumeDown, - /// Increase audio volume. (`APPCOMMAND_VOLUME_UP`, `KEYCODE_VOLUME_UP`) - AudioVolumeUp, - /// Toggle between muted state and prior volume level. (`APPCOMMAND_VOLUME_MUTE`, - /// `KEYCODE_VOLUME_MUTE`) - AudioVolumeMute, - /// Toggle the microphone on/off. (`APPCOMMAND_MIC_ON_OFF_TOGGLE`) - MicrophoneToggle, - /// Decrease microphone volume. (`APPCOMMAND_MICROPHONE_VOLUME_DOWN`) - MicrophoneVolumeDown, - /// Increase microphone volume. (`APPCOMMAND_MICROPHONE_VOLUME_UP`) - MicrophoneVolumeUp, - /// Mute the microphone. (`APPCOMMAND_MICROPHONE_VOLUME_MUTE`, `KEYCODE_MUTE`) - MicrophoneVolumeMute, - /// Show correction list when a word is incorrectly identified. (`APPCOMMAND_CORRECTION_LIST`) - SpeechCorrectionList, - /// Toggle between dictation mode and command/control mode. - /// (`APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE`) - SpeechInputToggle, - /// The first generic "LaunchApplication" key. This is commonly associated with launching "My - /// Computer", and may have a computer symbol on the key. (`APPCOMMAND_LAUNCH_APP1`) - LaunchApplication1, - /// The second generic "LaunchApplication" key. This is commonly associated with launching - /// "Calculator", and may have a calculator symbol on the key. (`APPCOMMAND_LAUNCH_APP2`, - /// `KEYCODE_CALCULATOR`) - LaunchApplication2, - /// The "Calendar" key. (`KEYCODE_CALENDAR`) - LaunchCalendar, - /// The "Contacts" key. (`KEYCODE_CONTACTS`) - LaunchContacts, - /// The "Mail" key. (`APPCOMMAND_LAUNCH_MAIL`) - LaunchMail, - /// The "Media Player" key. (`APPCOMMAND_LAUNCH_MEDIA_SELECT`) - LaunchMediaPlayer, - LaunchMusicPlayer, - LaunchPhone, - LaunchScreenSaver, - LaunchSpreadsheet, - LaunchWebBrowser, - LaunchWebCam, - LaunchWordProcessor, - /// Navigate to previous content or page in current history. (`APPCOMMAND_BROWSER_BACKWARD`) - BrowserBack, - /// Open the list of browser favorites. (`APPCOMMAND_BROWSER_FAVORITES`) - BrowserFavorites, - /// Navigate to next content or page in current history. (`APPCOMMAND_BROWSER_FORWARD`) - BrowserForward, - /// Go to the user’s preferred home page. (`APPCOMMAND_BROWSER_HOME`) - BrowserHome, - /// Refresh the current page or content. (`APPCOMMAND_BROWSER_REFRESH`) - BrowserRefresh, - /// Call up the user’s preferred search page. (`APPCOMMAND_BROWSER_SEARCH`) - BrowserSearch, - /// Stop loading the current page or content. (`APPCOMMAND_BROWSER_STOP`) - BrowserStop, - /// The Application switch key, which provides a list of recent apps to switch between. - /// (`KEYCODE_APP_SWITCH`) - AppSwitch, - /// The Call key. (`KEYCODE_CALL`) - Call, - /// The Camera key. (`KEYCODE_CAMERA`) - Camera, - /// The Camera focus key. (`KEYCODE_FOCUS`) - CameraFocus, - /// The End Call key. (`KEYCODE_ENDCALL`) - EndCall, - /// The Back key. (`KEYCODE_BACK`) - GoBack, - /// The Home key, which goes to the phone’s main screen. (`KEYCODE_HOME`) - GoHome, - /// The Headset Hook key. (`KEYCODE_HEADSETHOOK`) - HeadsetHook, - LastNumberRedial, - /// The Notification key. (`KEYCODE_NOTIFICATION`) - Notification, - /// Toggle between manner mode state: silent, vibrate, ring, ... (`KEYCODE_MANNER_MODE`) - MannerMode, - VoiceDial, - /// Switch to viewing TV. (`KEYCODE_TV`) - TV, - /// TV 3D Mode. (`KEYCODE_3D_MODE`) - TV3DMode, - /// Toggle between antenna and cable input. (`KEYCODE_TV_ANTENNA_CABLE`) - TVAntennaCable, - /// Audio description. (`KEYCODE_TV_AUDIO_DESCRIPTION`) - TVAudioDescription, - /// Audio description mixing volume down. (`KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN`) - TVAudioDescriptionMixDown, - /// Audio description mixing volume up. (`KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP`) - TVAudioDescriptionMixUp, - /// Contents menu. (`KEYCODE_TV_CONTENTS_MENU`) - TVContentsMenu, - /// Contents menu. (`KEYCODE_TV_DATA_SERVICE`) - TVDataService, - /// Switch the input mode on an external TV. (`KEYCODE_TV_INPUT`) - TVInput, - /// Switch to component input #1. (`KEYCODE_TV_INPUT_COMPONENT_1`) - TVInputComponent1, - /// Switch to component input #2. (`KEYCODE_TV_INPUT_COMPONENT_2`) - TVInputComponent2, - /// Switch to composite input #1. (`KEYCODE_TV_INPUT_COMPOSITE_1`) - TVInputComposite1, - /// Switch to composite input #2. (`KEYCODE_TV_INPUT_COMPOSITE_2`) - TVInputComposite2, - /// Switch to HDMI input #1. (`KEYCODE_TV_INPUT_HDMI_1`) - TVInputHDMI1, - /// Switch to HDMI input #2. (`KEYCODE_TV_INPUT_HDMI_2`) - TVInputHDMI2, - /// Switch to HDMI input #3. (`KEYCODE_TV_INPUT_HDMI_3`) - TVInputHDMI3, - /// Switch to HDMI input #4. (`KEYCODE_TV_INPUT_HDMI_4`) - TVInputHDMI4, - /// Switch to VGA input #1. (`KEYCODE_TV_INPUT_VGA_1`) - TVInputVGA1, - /// Media context menu. (`KEYCODE_TV_MEDIA_CONTEXT_MENU`) - TVMediaContext, - /// Toggle network. (`KEYCODE_TV_NETWORK`) - TVNetwork, - /// Number entry. (`KEYCODE_TV_NUMBER_ENTRY`) - TVNumberEntry, - /// Toggle the power on an external TV. (`KEYCODE_TV_POWER`) - TVPower, - /// Radio. (`KEYCODE_TV_RADIO_SERVICE`) - TVRadioService, - /// Satellite. (`KEYCODE_TV_SATELLITE`) - TVSatellite, - /// Broadcast Satellite. (`KEYCODE_TV_SATELLITE_BS`) - TVSatelliteBS, - /// Communication Satellite. (`KEYCODE_TV_SATELLITE_CS`) - TVSatelliteCS, - /// Toggle between available satellites. (`KEYCODE_TV_SATELLITE_SERVICE`) - TVSatelliteToggle, - /// Analog Terrestrial. (`KEYCODE_TV_TERRESTRIAL_ANALOG`) - TVTerrestrialAnalog, - /// Digital Terrestrial. (`KEYCODE_TV_TERRESTRIAL_DIGITAL`) - TVTerrestrialDigital, - /// Timer programming. (`KEYCODE_TV_TIMER_PROGRAMMING`) - TVTimer, - /// Switch the input mode on an external AVR (audio/video receiver). (`KEYCODE_AVR_INPUT`) - AVRInput, - /// Toggle the power on an external AVR (audio/video receiver). (`KEYCODE_AVR_POWER`) - AVRPower, - /// General purpose color-coded media function key, as index 0 (red). (`VK_COLORED_KEY_0`, - /// `KEYCODE_PROG_RED`) - ColorF0Red, - /// General purpose color-coded media function key, as index 1 (green). (`VK_COLORED_KEY_1`, - /// `KEYCODE_PROG_GREEN`) - ColorF1Green, - /// General purpose color-coded media function key, as index 2 (yellow). (`VK_COLORED_KEY_2`, - /// `KEYCODE_PROG_YELLOW`) - ColorF2Yellow, - /// General purpose color-coded media function key, as index 3 (blue). (`VK_COLORED_KEY_3`, - /// `KEYCODE_PROG_BLUE`) - ColorF3Blue, - /// General purpose color-coded media function key, as index 4 (grey). (`VK_COLORED_KEY_4`) - ColorF4Grey, - /// General purpose color-coded media function key, as index 5 (brown). (`VK_COLORED_KEY_5`) - ColorF5Brown, - /// Toggle the display of Closed Captions. (`VK_CC`, `KEYCODE_CAPTIONS`) - ClosedCaptionToggle, - /// Adjust brightness of device, by toggling between or cycling through states. (`VK_DIMMER`) - Dimmer, - /// Swap video sources. (`VK_DISPLAY_SWAP`) - DisplaySwap, - /// Select Digital Video Rrecorder. (`KEYCODE_DVR`) - DVR, - /// Exit the current application. (`VK_EXIT`) - Exit, - /// Clear program or content stored as favorite 0. (`VK_CLEAR_FAVORITE_0`) - FavoriteClear0, - /// Clear program or content stored as favorite 1. (`VK_CLEAR_FAVORITE_1`) - FavoriteClear1, - /// Clear program or content stored as favorite 2. (`VK_CLEAR_FAVORITE_2`) - FavoriteClear2, - /// Clear program or content stored as favorite 3. (`VK_CLEAR_FAVORITE_3`) - FavoriteClear3, - /// Select (recall) program or content stored as favorite 0. (`VK_RECALL_FAVORITE_0`) - FavoriteRecall0, - /// Select (recall) program or content stored as favorite 1. (`VK_RECALL_FAVORITE_1`) - FavoriteRecall1, - /// Select (recall) program or content stored as favorite 2. (`VK_RECALL_FAVORITE_2`) - FavoriteRecall2, - /// Select (recall) program or content stored as favorite 3. (`VK_RECALL_FAVORITE_3`) - FavoriteRecall3, - /// Store current program or content as favorite 0. (`VK_STORE_FAVORITE_0`) - FavoriteStore0, - /// Store current program or content as favorite 1. (`VK_STORE_FAVORITE_1`) - FavoriteStore1, - /// Store current program or content as favorite 2. (`VK_STORE_FAVORITE_2`) - FavoriteStore2, - /// Store current program or content as favorite 3. (`VK_STORE_FAVORITE_3`) - FavoriteStore3, - /// Toggle display of program or content guide. (`VK_GUIDE`, `KEYCODE_GUIDE`) - Guide, - /// If guide is active and displayed, then display next day’s content. (`VK_NEXT_DAY`) - GuideNextDay, - /// If guide is active and displayed, then display previous day’s content. (`VK_PREV_DAY`) - GuidePreviousDay, - /// Toggle display of information about currently selected context or media. (`VK_INFO`, - /// `KEYCODE_INFO`) - Info, - /// Toggle instant replay. (`VK_INSTANT_REPLAY`) - InstantReplay, - /// Launch linked content, if available and appropriate. (`VK_LINK`) - Link, - /// List the current program. (`VK_LIST`) - ListProgram, - /// Toggle display listing of currently available live content or programs. (`VK_LIVE`) - LiveContent, - /// Lock or unlock current content or program. (`VK_LOCK`) - Lock, - /// Show a list of media applications: audio/video players and image viewers. (`VK_APPS`) - /// - /// Note: Do not confuse this key value with the Windows' `VK_APPS` / `VK_CONTEXT_MENU` key, - /// which is encoded as `"ContextMenu"`. - MediaApps, - /// Audio track key. (`KEYCODE_MEDIA_AUDIO_TRACK`) - MediaAudioTrack, - /// Select previously selected channel or media. (`VK_LAST`, `KEYCODE_LAST_CHANNEL`) - MediaLast, - /// Skip backward to next content or program. (`KEYCODE_MEDIA_SKIP_BACKWARD`) - MediaSkipBackward, - /// Skip forward to next content or program. (`VK_SKIP`, `KEYCODE_MEDIA_SKIP_FORWARD`) - MediaSkipForward, - /// Step backward to next content or program. (`KEYCODE_MEDIA_STEP_BACKWARD`) - MediaStepBackward, - /// Step forward to next content or program. (`KEYCODE_MEDIA_STEP_FORWARD`) - MediaStepForward, - /// Media top menu. (`KEYCODE_MEDIA_TOP_MENU`) - MediaTopMenu, - /// Navigate in. (`KEYCODE_NAVIGATE_IN`) - NavigateIn, - /// Navigate to next key. (`KEYCODE_NAVIGATE_NEXT`) - NavigateNext, - /// Navigate out. (`KEYCODE_NAVIGATE_OUT`) - NavigateOut, - /// Navigate to previous key. (`KEYCODE_NAVIGATE_PREVIOUS`) - NavigatePrevious, - /// Cycle to next favorite channel (in favorites list). (`VK_NEXT_FAVORITE_CHANNEL`) - NextFavoriteChannel, - /// Cycle to next user profile (if there are multiple user profiles). (`VK_USER`) - NextUserProfile, - /// Access on-demand content or programs. (`VK_ON_DEMAND`) - OnDemand, - /// Pairing key to pair devices. (`KEYCODE_PAIRING`) - Pairing, - /// Move picture-in-picture window down. (`VK_PINP_DOWN`) - PinPDown, - /// Move picture-in-picture window. (`VK_PINP_MOVE`) - PinPMove, - /// Toggle display of picture-in-picture window. (`VK_PINP_TOGGLE`) - PinPToggle, - /// Move picture-in-picture window up. (`VK_PINP_UP`) - PinPUp, - /// Decrease media playback speed. (`VK_PLAY_SPEED_DOWN`) - PlaySpeedDown, - /// Reset playback to normal speed. (`VK_PLAY_SPEED_RESET`) - PlaySpeedReset, - /// Increase media playback speed. (`VK_PLAY_SPEED_UP`) - PlaySpeedUp, - /// Toggle random media or content shuffle mode. (`VK_RANDOM_TOGGLE`) - RandomToggle, - /// Not a physical key, but this key code is sent when the remote control battery is low. - /// (`VK_RC_LOW_BATTERY`) - RcLowBattery, - /// Toggle or cycle between media recording speeds. (`VK_RECORD_SPEED_NEXT`) - RecordSpeedNext, - /// Toggle RF (radio frequency) input bypass mode (pass RF input directly to the RF output). - /// (`VK_RF_BYPASS`) - RfBypass, - /// Toggle scan channels mode. (`VK_SCAN_CHANNELS_TOGGLE`) - ScanChannelsToggle, - /// Advance display screen mode to next available mode. (`VK_SCREEN_MODE_NEXT`) - ScreenModeNext, - /// Toggle display of device settings screen. (`VK_SETTINGS`, `KEYCODE_SETTINGS`) - Settings, - /// Toggle split screen mode. (`VK_SPLIT_SCREEN_TOGGLE`) - SplitScreenToggle, - /// Switch the input mode on an external STB (set top box). (`KEYCODE_STB_INPUT`) - STBInput, - /// Toggle the power on an external STB (set top box). (`KEYCODE_STB_POWER`) - STBPower, - /// Toggle display of subtitles, if available. (`VK_SUBTITLE`) - Subtitle, - /// Toggle display of teletext, if available (`VK_TELETEXT`, `KEYCODE_TV_TELETEXT`). - Teletext, - /// Advance video mode to next available mode. (`VK_VIDEO_MODE_NEXT`) - VideoModeNext, - /// Cause device to identify itself in some manner, e.g., audibly or visibly. (`VK_WINK`) - Wink, - /// Toggle between full-screen and scaled content, or alter magnification level. (`VK_ZOOM`, - /// `KEYCODE_TV_ZOOM_MODE`) - ZoomToggle, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F1, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F2, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F3, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F4, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F5, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F6, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F7, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F8, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F9, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F10, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F11, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F12, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F13, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F14, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F15, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F16, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F17, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F18, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F19, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F20, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F21, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F22, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F23, - /// General-purpose function key. - /// Usually found at the top of the keyboard. - F24, - /// General-purpose function key. - F25, - /// General-purpose function key. - F26, - /// General-purpose function key. - F27, - /// General-purpose function key. - F28, - /// General-purpose function key. - F29, - /// General-purpose function key. - F30, - /// General-purpose function key. - F31, - /// General-purpose function key. - F32, - /// General-purpose function key. - F33, - /// General-purpose function key. - F34, - /// General-purpose function key. - F35, -} - /// Key represents the meaning of a keypress. /// /// This is a superset of the UI Events Specification's [`KeyboardEvent.key`] with @@ -1549,33 +392,6 @@ impl Key { } } -impl NamedKey { - /// Convert an action to its approximate textual equivalent. - /// - /// # Examples - /// - /// ``` - /// # #[cfg(web_platform)] - /// # wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser); - /// # #[cfg_attr(web_platform, wasm_bindgen_test::wasm_bindgen_test)] - /// # fn main() { - /// use winit::keyboard::NamedKey; - /// - /// assert_eq!(NamedKey::Enter.to_text(), Some("\r")); - /// assert_eq!(NamedKey::F20.to_text(), None); - /// # } - /// ``` - pub fn to_text(&self) -> Option<&str> { - match self { - NamedKey::Enter => Some("\r"), - NamedKey::Backspace => Some("\x08"), - NamedKey::Tab => Some("\t"), - NamedKey::Escape => Some("\x1b"), - _ => None, - } - } -} - impl Key { /// Convert a key to its approximate textual equivalent. /// @@ -1595,7 +411,13 @@ impl Key { /// ``` pub fn to_text(&self) -> Option<&str> { match self { - Key::Named(action) => action.to_text(), + Key::Named(action) => match action { + NamedKey::Enter => Some("\r"), + NamedKey::Backspace => Some("\x08"), + NamedKey::Tab => Some("\t"), + NamedKey::Escape => Some("\x1b"), + _ => None, + }, Key::Character(ch) => Some(ch.as_str()), _ => None, }