Add physical_key to keyboard::Event
Co-authored-by: Exidex <16986685+Exidex@users.noreply.github.com>
This commit is contained in:
parent
62b4da87d1
commit
cbe91d4a7c
3 changed files with 795 additions and 2 deletions
|
|
@ -223,9 +223,13 @@ pub fn window_event(
|
|||
}.filter(|text| !text.as_str().chars().any(is_private_use));
|
||||
|
||||
let winit::event::KeyEvent {
|
||||
state, location, ..
|
||||
state,
|
||||
location,
|
||||
physical_key,
|
||||
..
|
||||
} = event;
|
||||
let key = key(logical_key);
|
||||
let physical_key = self::physical_key(physical_key);
|
||||
let modifiers = self::modifiers(modifiers);
|
||||
|
||||
let location = match location {
|
||||
|
|
@ -245,6 +249,7 @@ pub fn window_event(
|
|||
winit::event::ElementState::Pressed => {
|
||||
keyboard::Event::KeyPressed {
|
||||
key,
|
||||
physical_key,
|
||||
modifiers,
|
||||
location,
|
||||
text,
|
||||
|
|
@ -510,7 +515,7 @@ pub fn touch_event(
|
|||
}
|
||||
}
|
||||
|
||||
/// Converts a `VirtualKeyCode` from [`winit`] to an [`iced`] key code.
|
||||
/// Converts a `Key` from [`winit`] to an [`iced`] key.
|
||||
///
|
||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||
/// [`iced`]: https://github.com/iced-rs/iced/tree/0.12
|
||||
|
|
@ -839,6 +844,257 @@ pub fn key(key: winit::keyboard::Key) -> keyboard::Key {
|
|||
}
|
||||
}
|
||||
|
||||
/// Converts a `PhysicalKey` from [`winit`] to an [`iced`] physical key.
|
||||
///
|
||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||
/// [`iced`]: https://github.com/iced-rs/iced/tree/0.12
|
||||
pub fn physical_key(
|
||||
physical_key: winit::keyboard::PhysicalKey,
|
||||
) -> keyboard::key::Physical {
|
||||
match physical_key {
|
||||
winit::keyboard::PhysicalKey::Code(code) => key_code(code)
|
||||
.map(keyboard::key::Physical::Code)
|
||||
.unwrap_or(keyboard::key::Physical::Unidentified(
|
||||
keyboard::key::NativeCode::Unidentified,
|
||||
)),
|
||||
winit::keyboard::PhysicalKey::Unidentified(code) => {
|
||||
keyboard::key::Physical::Unidentified(native_key_code(code))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Converts a `KeyCode` from [`winit`] to an [`iced`] key code.
|
||||
///
|
||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||
/// [`iced`]: https://github.com/iced-rs/iced/tree/0.12
|
||||
pub fn key_code(
|
||||
key_code: winit::keyboard::KeyCode,
|
||||
) -> Option<keyboard::key::Code> {
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
Some(match key_code {
|
||||
KeyCode::Backquote => keyboard::key::Code::Backquote,
|
||||
KeyCode::Backslash => keyboard::key::Code::Backslash,
|
||||
KeyCode::BracketLeft => keyboard::key::Code::BracketLeft,
|
||||
KeyCode::BracketRight => keyboard::key::Code::BracketRight,
|
||||
KeyCode::Comma => keyboard::key::Code::Comma,
|
||||
KeyCode::Digit0 => keyboard::key::Code::Digit0,
|
||||
KeyCode::Digit1 => keyboard::key::Code::Digit1,
|
||||
KeyCode::Digit2 => keyboard::key::Code::Digit2,
|
||||
KeyCode::Digit3 => keyboard::key::Code::Digit3,
|
||||
KeyCode::Digit4 => keyboard::key::Code::Digit4,
|
||||
KeyCode::Digit5 => keyboard::key::Code::Digit5,
|
||||
KeyCode::Digit6 => keyboard::key::Code::Digit6,
|
||||
KeyCode::Digit7 => keyboard::key::Code::Digit7,
|
||||
KeyCode::Digit8 => keyboard::key::Code::Digit8,
|
||||
KeyCode::Digit9 => keyboard::key::Code::Digit9,
|
||||
KeyCode::Equal => keyboard::key::Code::Equal,
|
||||
KeyCode::IntlBackslash => keyboard::key::Code::IntlBackslash,
|
||||
KeyCode::IntlRo => keyboard::key::Code::IntlRo,
|
||||
KeyCode::IntlYen => keyboard::key::Code::IntlYen,
|
||||
KeyCode::KeyA => keyboard::key::Code::KeyA,
|
||||
KeyCode::KeyB => keyboard::key::Code::KeyB,
|
||||
KeyCode::KeyC => keyboard::key::Code::KeyC,
|
||||
KeyCode::KeyD => keyboard::key::Code::KeyD,
|
||||
KeyCode::KeyE => keyboard::key::Code::KeyE,
|
||||
KeyCode::KeyF => keyboard::key::Code::KeyF,
|
||||
KeyCode::KeyG => keyboard::key::Code::KeyG,
|
||||
KeyCode::KeyH => keyboard::key::Code::KeyH,
|
||||
KeyCode::KeyI => keyboard::key::Code::KeyI,
|
||||
KeyCode::KeyJ => keyboard::key::Code::KeyJ,
|
||||
KeyCode::KeyK => keyboard::key::Code::KeyK,
|
||||
KeyCode::KeyL => keyboard::key::Code::KeyL,
|
||||
KeyCode::KeyM => keyboard::key::Code::KeyM,
|
||||
KeyCode::KeyN => keyboard::key::Code::KeyN,
|
||||
KeyCode::KeyO => keyboard::key::Code::KeyO,
|
||||
KeyCode::KeyP => keyboard::key::Code::KeyP,
|
||||
KeyCode::KeyQ => keyboard::key::Code::KeyQ,
|
||||
KeyCode::KeyR => keyboard::key::Code::KeyR,
|
||||
KeyCode::KeyS => keyboard::key::Code::KeyS,
|
||||
KeyCode::KeyT => keyboard::key::Code::KeyT,
|
||||
KeyCode::KeyU => keyboard::key::Code::KeyU,
|
||||
KeyCode::KeyV => keyboard::key::Code::KeyV,
|
||||
KeyCode::KeyW => keyboard::key::Code::KeyW,
|
||||
KeyCode::KeyX => keyboard::key::Code::KeyX,
|
||||
KeyCode::KeyY => keyboard::key::Code::KeyY,
|
||||
KeyCode::KeyZ => keyboard::key::Code::KeyZ,
|
||||
KeyCode::Minus => keyboard::key::Code::Minus,
|
||||
KeyCode::Period => keyboard::key::Code::Period,
|
||||
KeyCode::Quote => keyboard::key::Code::Quote,
|
||||
KeyCode::Semicolon => keyboard::key::Code::Semicolon,
|
||||
KeyCode::Slash => keyboard::key::Code::Slash,
|
||||
KeyCode::AltLeft => keyboard::key::Code::AltLeft,
|
||||
KeyCode::AltRight => keyboard::key::Code::AltRight,
|
||||
KeyCode::Backspace => keyboard::key::Code::Backspace,
|
||||
KeyCode::CapsLock => keyboard::key::Code::CapsLock,
|
||||
KeyCode::ContextMenu => keyboard::key::Code::ContextMenu,
|
||||
KeyCode::ControlLeft => keyboard::key::Code::ControlLeft,
|
||||
KeyCode::ControlRight => keyboard::key::Code::ControlRight,
|
||||
KeyCode::Enter => keyboard::key::Code::Enter,
|
||||
KeyCode::SuperLeft => keyboard::key::Code::SuperLeft,
|
||||
KeyCode::SuperRight => keyboard::key::Code::SuperRight,
|
||||
KeyCode::ShiftLeft => keyboard::key::Code::ShiftLeft,
|
||||
KeyCode::ShiftRight => keyboard::key::Code::ShiftRight,
|
||||
KeyCode::Space => keyboard::key::Code::Space,
|
||||
KeyCode::Tab => keyboard::key::Code::Tab,
|
||||
KeyCode::Convert => keyboard::key::Code::Convert,
|
||||
KeyCode::KanaMode => keyboard::key::Code::KanaMode,
|
||||
KeyCode::Lang1 => keyboard::key::Code::Lang1,
|
||||
KeyCode::Lang2 => keyboard::key::Code::Lang2,
|
||||
KeyCode::Lang3 => keyboard::key::Code::Lang3,
|
||||
KeyCode::Lang4 => keyboard::key::Code::Lang4,
|
||||
KeyCode::Lang5 => keyboard::key::Code::Lang5,
|
||||
KeyCode::NonConvert => keyboard::key::Code::NonConvert,
|
||||
KeyCode::Delete => keyboard::key::Code::Delete,
|
||||
KeyCode::End => keyboard::key::Code::End,
|
||||
KeyCode::Help => keyboard::key::Code::Help,
|
||||
KeyCode::Home => keyboard::key::Code::Home,
|
||||
KeyCode::Insert => keyboard::key::Code::Insert,
|
||||
KeyCode::PageDown => keyboard::key::Code::PageDown,
|
||||
KeyCode::PageUp => keyboard::key::Code::PageUp,
|
||||
KeyCode::ArrowDown => keyboard::key::Code::ArrowDown,
|
||||
KeyCode::ArrowLeft => keyboard::key::Code::ArrowLeft,
|
||||
KeyCode::ArrowRight => keyboard::key::Code::ArrowRight,
|
||||
KeyCode::ArrowUp => keyboard::key::Code::ArrowUp,
|
||||
KeyCode::NumLock => keyboard::key::Code::NumLock,
|
||||
KeyCode::Numpad0 => keyboard::key::Code::Numpad0,
|
||||
KeyCode::Numpad1 => keyboard::key::Code::Numpad1,
|
||||
KeyCode::Numpad2 => keyboard::key::Code::Numpad2,
|
||||
KeyCode::Numpad3 => keyboard::key::Code::Numpad3,
|
||||
KeyCode::Numpad4 => keyboard::key::Code::Numpad4,
|
||||
KeyCode::Numpad5 => keyboard::key::Code::Numpad5,
|
||||
KeyCode::Numpad6 => keyboard::key::Code::Numpad6,
|
||||
KeyCode::Numpad7 => keyboard::key::Code::Numpad7,
|
||||
KeyCode::Numpad8 => keyboard::key::Code::Numpad8,
|
||||
KeyCode::Numpad9 => keyboard::key::Code::Numpad9,
|
||||
KeyCode::NumpadAdd => keyboard::key::Code::NumpadAdd,
|
||||
KeyCode::NumpadBackspace => keyboard::key::Code::NumpadBackspace,
|
||||
KeyCode::NumpadClear => keyboard::key::Code::NumpadClear,
|
||||
KeyCode::NumpadClearEntry => keyboard::key::Code::NumpadClearEntry,
|
||||
KeyCode::NumpadComma => keyboard::key::Code::NumpadComma,
|
||||
KeyCode::NumpadDecimal => keyboard::key::Code::NumpadDecimal,
|
||||
KeyCode::NumpadDivide => keyboard::key::Code::NumpadDivide,
|
||||
KeyCode::NumpadEnter => keyboard::key::Code::NumpadEnter,
|
||||
KeyCode::NumpadEqual => keyboard::key::Code::NumpadEqual,
|
||||
KeyCode::NumpadHash => keyboard::key::Code::NumpadHash,
|
||||
KeyCode::NumpadMemoryAdd => keyboard::key::Code::NumpadMemoryAdd,
|
||||
KeyCode::NumpadMemoryClear => keyboard::key::Code::NumpadMemoryClear,
|
||||
KeyCode::NumpadMemoryRecall => keyboard::key::Code::NumpadMemoryRecall,
|
||||
KeyCode::NumpadMemoryStore => keyboard::key::Code::NumpadMemoryStore,
|
||||
KeyCode::NumpadMemorySubtract => {
|
||||
keyboard::key::Code::NumpadMemorySubtract
|
||||
}
|
||||
KeyCode::NumpadMultiply => keyboard::key::Code::NumpadMultiply,
|
||||
KeyCode::NumpadParenLeft => keyboard::key::Code::NumpadParenLeft,
|
||||
KeyCode::NumpadParenRight => keyboard::key::Code::NumpadParenRight,
|
||||
KeyCode::NumpadStar => keyboard::key::Code::NumpadStar,
|
||||
KeyCode::NumpadSubtract => keyboard::key::Code::NumpadSubtract,
|
||||
KeyCode::Escape => keyboard::key::Code::Escape,
|
||||
KeyCode::Fn => keyboard::key::Code::Fn,
|
||||
KeyCode::FnLock => keyboard::key::Code::FnLock,
|
||||
KeyCode::PrintScreen => keyboard::key::Code::PrintScreen,
|
||||
KeyCode::ScrollLock => keyboard::key::Code::ScrollLock,
|
||||
KeyCode::Pause => keyboard::key::Code::Pause,
|
||||
KeyCode::BrowserBack => keyboard::key::Code::BrowserBack,
|
||||
KeyCode::BrowserFavorites => keyboard::key::Code::BrowserFavorites,
|
||||
KeyCode::BrowserForward => keyboard::key::Code::BrowserForward,
|
||||
KeyCode::BrowserHome => keyboard::key::Code::BrowserHome,
|
||||
KeyCode::BrowserRefresh => keyboard::key::Code::BrowserRefresh,
|
||||
KeyCode::BrowserSearch => keyboard::key::Code::BrowserSearch,
|
||||
KeyCode::BrowserStop => keyboard::key::Code::BrowserStop,
|
||||
KeyCode::Eject => keyboard::key::Code::Eject,
|
||||
KeyCode::LaunchApp1 => keyboard::key::Code::LaunchApp1,
|
||||
KeyCode::LaunchApp2 => keyboard::key::Code::LaunchApp2,
|
||||
KeyCode::LaunchMail => keyboard::key::Code::LaunchMail,
|
||||
KeyCode::MediaPlayPause => keyboard::key::Code::MediaPlayPause,
|
||||
KeyCode::MediaSelect => keyboard::key::Code::MediaSelect,
|
||||
KeyCode::MediaStop => keyboard::key::Code::MediaStop,
|
||||
KeyCode::MediaTrackNext => keyboard::key::Code::MediaTrackNext,
|
||||
KeyCode::MediaTrackPrevious => keyboard::key::Code::MediaTrackPrevious,
|
||||
KeyCode::Power => keyboard::key::Code::Power,
|
||||
KeyCode::Sleep => keyboard::key::Code::Sleep,
|
||||
KeyCode::AudioVolumeDown => keyboard::key::Code::AudioVolumeDown,
|
||||
KeyCode::AudioVolumeMute => keyboard::key::Code::AudioVolumeMute,
|
||||
KeyCode::AudioVolumeUp => keyboard::key::Code::AudioVolumeUp,
|
||||
KeyCode::WakeUp => keyboard::key::Code::WakeUp,
|
||||
KeyCode::Meta => keyboard::key::Code::Meta,
|
||||
KeyCode::Hyper => keyboard::key::Code::Hyper,
|
||||
KeyCode::Turbo => keyboard::key::Code::Turbo,
|
||||
KeyCode::Abort => keyboard::key::Code::Abort,
|
||||
KeyCode::Resume => keyboard::key::Code::Resume,
|
||||
KeyCode::Suspend => keyboard::key::Code::Suspend,
|
||||
KeyCode::Again => keyboard::key::Code::Again,
|
||||
KeyCode::Copy => keyboard::key::Code::Copy,
|
||||
KeyCode::Cut => keyboard::key::Code::Cut,
|
||||
KeyCode::Find => keyboard::key::Code::Find,
|
||||
KeyCode::Open => keyboard::key::Code::Open,
|
||||
KeyCode::Paste => keyboard::key::Code::Paste,
|
||||
KeyCode::Props => keyboard::key::Code::Props,
|
||||
KeyCode::Select => keyboard::key::Code::Select,
|
||||
KeyCode::Undo => keyboard::key::Code::Undo,
|
||||
KeyCode::Hiragana => keyboard::key::Code::Hiragana,
|
||||
KeyCode::Katakana => keyboard::key::Code::Katakana,
|
||||
KeyCode::F1 => keyboard::key::Code::F1,
|
||||
KeyCode::F2 => keyboard::key::Code::F2,
|
||||
KeyCode::F3 => keyboard::key::Code::F3,
|
||||
KeyCode::F4 => keyboard::key::Code::F4,
|
||||
KeyCode::F5 => keyboard::key::Code::F5,
|
||||
KeyCode::F6 => keyboard::key::Code::F6,
|
||||
KeyCode::F7 => keyboard::key::Code::F7,
|
||||
KeyCode::F8 => keyboard::key::Code::F8,
|
||||
KeyCode::F9 => keyboard::key::Code::F9,
|
||||
KeyCode::F10 => keyboard::key::Code::F10,
|
||||
KeyCode::F11 => keyboard::key::Code::F11,
|
||||
KeyCode::F12 => keyboard::key::Code::F12,
|
||||
KeyCode::F13 => keyboard::key::Code::F13,
|
||||
KeyCode::F14 => keyboard::key::Code::F14,
|
||||
KeyCode::F15 => keyboard::key::Code::F15,
|
||||
KeyCode::F16 => keyboard::key::Code::F16,
|
||||
KeyCode::F17 => keyboard::key::Code::F17,
|
||||
KeyCode::F18 => keyboard::key::Code::F18,
|
||||
KeyCode::F19 => keyboard::key::Code::F19,
|
||||
KeyCode::F20 => keyboard::key::Code::F20,
|
||||
KeyCode::F21 => keyboard::key::Code::F21,
|
||||
KeyCode::F22 => keyboard::key::Code::F22,
|
||||
KeyCode::F23 => keyboard::key::Code::F23,
|
||||
KeyCode::F24 => keyboard::key::Code::F24,
|
||||
KeyCode::F25 => keyboard::key::Code::F25,
|
||||
KeyCode::F26 => keyboard::key::Code::F26,
|
||||
KeyCode::F27 => keyboard::key::Code::F27,
|
||||
KeyCode::F28 => keyboard::key::Code::F28,
|
||||
KeyCode::F29 => keyboard::key::Code::F29,
|
||||
KeyCode::F30 => keyboard::key::Code::F30,
|
||||
KeyCode::F31 => keyboard::key::Code::F31,
|
||||
KeyCode::F32 => keyboard::key::Code::F32,
|
||||
KeyCode::F33 => keyboard::key::Code::F33,
|
||||
KeyCode::F34 => keyboard::key::Code::F34,
|
||||
KeyCode::F35 => keyboard::key::Code::F35,
|
||||
_ => None?,
|
||||
})
|
||||
}
|
||||
|
||||
/// Converts a `NativeKeyCode` from [`winit`] to an [`iced`] native key code.
|
||||
///
|
||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||
/// [`iced`]: https://github.com/iced-rs/iced/tree/0.12
|
||||
pub fn native_key_code(
|
||||
native_key_code: winit::keyboard::NativeKeyCode,
|
||||
) -> keyboard::key::NativeCode {
|
||||
use winit::keyboard::NativeKeyCode;
|
||||
|
||||
match native_key_code {
|
||||
NativeKeyCode::Unidentified => keyboard::key::NativeCode::Unidentified,
|
||||
NativeKeyCode::Android(code) => {
|
||||
keyboard::key::NativeCode::Android(code)
|
||||
}
|
||||
NativeKeyCode::MacOS(code) => keyboard::key::NativeCode::MacOS(code),
|
||||
NativeKeyCode::Windows(code) => {
|
||||
keyboard::key::NativeCode::Windows(code)
|
||||
}
|
||||
NativeKeyCode::Xkb(code) => keyboard::key::NativeCode::Xkb(code),
|
||||
}
|
||||
}
|
||||
|
||||
/// Converts some [`UserAttention`] into it's `winit` counterpart.
|
||||
///
|
||||
/// [`UserAttention`]: window::UserAttention
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue