desktop: Handle properly keys with modifiers
FP recognizes modifiers for numpad keys, but ignores them for non-numpad keys, so that pressing Shift+3 produces key codes for Shift and Key3, but pressing Shift+Numpad7 produces keycodes for Shift and Home.
This commit is contained in:
parent
cda7ac6024
commit
b75d4cdce0
|
@ -60,6 +60,11 @@ pub fn winit_to_ruffle_text_control(
|
||||||
/// Convert a winit event into a Ruffle `KeyCode`.
|
/// Convert a winit event into a Ruffle `KeyCode`.
|
||||||
/// Return `KeyCode::Unknown` if there is no matching Flash key code.
|
/// Return `KeyCode::Unknown` if there is no matching Flash key code.
|
||||||
pub fn winit_to_ruffle_key_code(event: &KeyEvent) -> Option<KeyCode> {
|
pub fn winit_to_ruffle_key_code(event: &KeyEvent) -> Option<KeyCode> {
|
||||||
|
// Note: it would be tempting to use event.key_without_modifiers() here, but FP
|
||||||
|
// does not care about keys without modifiers at all, it does its own mapping,
|
||||||
|
// so that on English UK, Shift+3 produces 16+163, not 16+51.
|
||||||
|
|
||||||
|
let is_numpad = event.location == KeyLocation::Numpad;
|
||||||
let key_code = match event.logical_key.as_ref() {
|
let key_code = match event.logical_key.as_ref() {
|
||||||
Key::Named(NamedKey::Backspace) => KeyCode::Backspace,
|
Key::Named(NamedKey::Backspace) => KeyCode::Backspace,
|
||||||
Key::Named(NamedKey::Tab) => KeyCode::Tab,
|
Key::Named(NamedKey::Tab) => KeyCode::Tab,
|
||||||
|
@ -72,26 +77,33 @@ pub fn winit_to_ruffle_key_code(event: &KeyEvent) -> Option<KeyCode> {
|
||||||
Key::Named(NamedKey::CapsLock) => KeyCode::CapsLock,
|
Key::Named(NamedKey::CapsLock) => KeyCode::CapsLock,
|
||||||
Key::Named(NamedKey::Escape) => KeyCode::Escape,
|
Key::Named(NamedKey::Escape) => KeyCode::Escape,
|
||||||
Key::Named(NamedKey::Space) => KeyCode::Space,
|
Key::Named(NamedKey::Space) => KeyCode::Space,
|
||||||
Key::Character("0") if event.location == KeyLocation::Numpad => KeyCode::Numpad0,
|
// Note: FP DOES care about modifiers for numpad keys,
|
||||||
Key::Character("1") if event.location == KeyLocation::Numpad => KeyCode::Numpad1,
|
// so that Shift+Numpad7 produces 16+36, not 16+103.
|
||||||
Key::Character("2") if event.location == KeyLocation::Numpad => KeyCode::Numpad2,
|
Key::Character("0") if is_numpad => KeyCode::Numpad0,
|
||||||
Key::Character("3") if event.location == KeyLocation::Numpad => KeyCode::Numpad3,
|
Key::Character("1") if is_numpad => KeyCode::Numpad1,
|
||||||
Key::Character("4") if event.location == KeyLocation::Numpad => KeyCode::Numpad4,
|
Key::Character("2") if is_numpad => KeyCode::Numpad2,
|
||||||
Key::Character("5") if event.location == KeyLocation::Numpad => KeyCode::Numpad5,
|
Key::Character("3") if is_numpad => KeyCode::Numpad3,
|
||||||
Key::Character("6") if event.location == KeyLocation::Numpad => KeyCode::Numpad6,
|
Key::Character("4") if is_numpad => KeyCode::Numpad4,
|
||||||
Key::Character("7") if event.location == KeyLocation::Numpad => KeyCode::Numpad7,
|
Key::Character("5") if is_numpad => KeyCode::Numpad5,
|
||||||
Key::Character("8") if event.location == KeyLocation::Numpad => KeyCode::Numpad8,
|
Key::Character("6") if is_numpad => KeyCode::Numpad6,
|
||||||
Key::Character("9") if event.location == KeyLocation::Numpad => KeyCode::Numpad9,
|
Key::Character("7") if is_numpad => KeyCode::Numpad7,
|
||||||
Key::Character("0") => KeyCode::Key0,
|
Key::Character("8") if is_numpad => KeyCode::Numpad8,
|
||||||
Key::Character("1") => KeyCode::Key1,
|
Key::Character("9") if is_numpad => KeyCode::Numpad9,
|
||||||
Key::Character("2") => KeyCode::Key2,
|
Key::Character("*") if is_numpad => KeyCode::Multiply,
|
||||||
Key::Character("3") => KeyCode::Key3,
|
Key::Character("+") if is_numpad => KeyCode::Plus,
|
||||||
Key::Character("4") => KeyCode::Key4,
|
Key::Character("-") if is_numpad => KeyCode::NumpadMinus,
|
||||||
Key::Character("5") => KeyCode::Key5,
|
Key::Character(".") if is_numpad => KeyCode::NumpadPeriod,
|
||||||
Key::Character("6") => KeyCode::Key6,
|
Key::Character("/") if is_numpad => KeyCode::NumpadSlash,
|
||||||
Key::Character("7") => KeyCode::Key7,
|
Key::Character("0") | Key::Character(")") => KeyCode::Key0,
|
||||||
Key::Character("8") => KeyCode::Key8,
|
Key::Character("1") | Key::Character("!") => KeyCode::Key1,
|
||||||
Key::Character("9") => KeyCode::Key9,
|
Key::Character("2") | Key::Character("@") => KeyCode::Key2,
|
||||||
|
Key::Character("3") | Key::Character("#") => KeyCode::Key3,
|
||||||
|
Key::Character("4") | Key::Character("$") => KeyCode::Key4,
|
||||||
|
Key::Character("5") | Key::Character("%") => KeyCode::Key5,
|
||||||
|
Key::Character("6") | Key::Character("^") => KeyCode::Key6,
|
||||||
|
Key::Character("7") | Key::Character("&") => KeyCode::Key7,
|
||||||
|
Key::Character("8") | Key::Character("*") => KeyCode::Key8,
|
||||||
|
Key::Character("9") | Key::Character("(") => KeyCode::Key9,
|
||||||
Key::Character("a") => KeyCode::A,
|
Key::Character("a") => KeyCode::A,
|
||||||
Key::Character("b") => KeyCode::B,
|
Key::Character("b") => KeyCode::B,
|
||||||
Key::Character("c") => KeyCode::C,
|
Key::Character("c") => KeyCode::C,
|
||||||
|
@ -118,22 +130,17 @@ pub fn winit_to_ruffle_key_code(event: &KeyEvent) -> Option<KeyCode> {
|
||||||
Key::Character("x") => KeyCode::X,
|
Key::Character("x") => KeyCode::X,
|
||||||
Key::Character("y") => KeyCode::Y,
|
Key::Character("y") => KeyCode::Y,
|
||||||
Key::Character("z") => KeyCode::Z,
|
Key::Character("z") => KeyCode::Z,
|
||||||
Key::Character(";") => KeyCode::Semicolon,
|
Key::Character(";") | Key::Character(":") => KeyCode::Semicolon,
|
||||||
Key::Character("=") => KeyCode::Equals,
|
Key::Character("=") | Key::Character("+") => KeyCode::Equals,
|
||||||
Key::Character(",") => KeyCode::Comma,
|
Key::Character(",") | Key::Character("<") => KeyCode::Comma,
|
||||||
Key::Character("-") if event.location == KeyLocation::Numpad => KeyCode::NumpadMinus,
|
Key::Character("-") | Key::Character("_") => KeyCode::Minus,
|
||||||
Key::Character("-") => KeyCode::Minus,
|
Key::Character(".") | Key::Character(">") => KeyCode::Period,
|
||||||
Key::Character(".") if event.location == KeyLocation::Numpad => KeyCode::NumpadPeriod,
|
Key::Character("/") | Key::Character("?") => KeyCode::Slash,
|
||||||
Key::Character(".") => KeyCode::Period,
|
Key::Character("`") | Key::Character("~") => KeyCode::Grave,
|
||||||
Key::Character("/") if event.location == KeyLocation::Numpad => KeyCode::NumpadSlash,
|
Key::Character("[") | Key::Character("{") => KeyCode::LBracket,
|
||||||
Key::Character("/") => KeyCode::Slash,
|
Key::Character("\\") | Key::Character("|") => KeyCode::Backslash,
|
||||||
Key::Character("`") => KeyCode::Grave,
|
Key::Character("]") | Key::Character("}") => KeyCode::RBracket,
|
||||||
Key::Character("[") => KeyCode::LBracket,
|
Key::Character("'") | Key::Character("\"") => KeyCode::Apostrophe,
|
||||||
Key::Character("\\") => KeyCode::Backslash,
|
|
||||||
Key::Character("]") => KeyCode::RBracket,
|
|
||||||
Key::Character("'") => KeyCode::Apostrophe,
|
|
||||||
Key::Character("*") => KeyCode::Multiply,
|
|
||||||
Key::Character("+") => KeyCode::Plus,
|
|
||||||
Key::Named(NamedKey::PageUp) => KeyCode::PgUp,
|
Key::Named(NamedKey::PageUp) => KeyCode::PgUp,
|
||||||
Key::Named(NamedKey::PageDown) => KeyCode::PgDown,
|
Key::Named(NamedKey::PageDown) => KeyCode::PgDown,
|
||||||
Key::Named(NamedKey::End) => KeyCode::End,
|
Key::Named(NamedKey::End) => KeyCode::End,
|
||||||
|
|
Loading…
Reference in New Issue