Enter, Backspace, Tab, Escape, Delete, arrow keys, Home, End, PageUp, PageDown now forward to Servo. Previously only printable characters reached the web engine, making forms unusable.
75 lines
2.5 KiB
Rust
75 lines
2.5 KiB
Rust
use servo::{Code, Key};
|
|
|
|
pub(crate) fn key_and_code_for_character(character: char) -> (Key, Code) {
|
|
match character {
|
|
'\n' | '\r' => (Key::Enter, Code::Enter),
|
|
'\x08' => (Key::Backspace, Code::Backspace),
|
|
'\t' => (Key::Tab, Code::Tab),
|
|
'\x1b' => (Key::Escape, Code::Escape),
|
|
'\x7f' => (Key::Delete, Code::Delete),
|
|
'\u{F700}' => (Key::ArrowUp, Code::ArrowUp),
|
|
'\u{F701}' => (Key::ArrowDown, Code::ArrowDown),
|
|
'\u{F702}' => (Key::ArrowLeft, Code::ArrowLeft),
|
|
'\u{F703}' => (Key::ArrowRight, Code::ArrowRight),
|
|
'\u{F729}' => (Key::Home, Code::Home),
|
|
'\u{F72B}' => (Key::End, Code::End),
|
|
'\u{F72C}' => (Key::PageUp, Code::PageUp),
|
|
'\u{F72D}' => (Key::PageDown, Code::PageDown),
|
|
_ => (Key::Character(character.to_string()), printable_code(character)),
|
|
}
|
|
}
|
|
|
|
fn printable_code(character: char) -> Code {
|
|
match character {
|
|
'a' | 'A' => Code::KeyA,
|
|
'b' | 'B' => Code::KeyB,
|
|
'c' | 'C' => Code::KeyC,
|
|
'd' | 'D' => Code::KeyD,
|
|
'e' | 'E' => Code::KeyE,
|
|
'f' | 'F' => Code::KeyF,
|
|
'g' | 'G' => Code::KeyG,
|
|
'h' | 'H' => Code::KeyH,
|
|
'i' | 'I' => Code::KeyI,
|
|
'j' | 'J' => Code::KeyJ,
|
|
'k' | 'K' => Code::KeyK,
|
|
'l' | 'L' => Code::KeyL,
|
|
'm' | 'M' => Code::KeyM,
|
|
'n' | 'N' => Code::KeyN,
|
|
'o' | 'O' => Code::KeyO,
|
|
'p' | 'P' => Code::KeyP,
|
|
'q' | 'Q' => Code::KeyQ,
|
|
'r' | 'R' => Code::KeyR,
|
|
's' | 'S' => Code::KeyS,
|
|
't' | 'T' => Code::KeyT,
|
|
'u' | 'U' => Code::KeyU,
|
|
'v' | 'V' => Code::KeyV,
|
|
'w' | 'W' => Code::KeyW,
|
|
'x' | 'X' => Code::KeyX,
|
|
'y' | 'Y' => Code::KeyY,
|
|
'z' | 'Z' => Code::KeyZ,
|
|
'0' => Code::Digit0,
|
|
'1' => Code::Digit1,
|
|
'2' => Code::Digit2,
|
|
'3' => Code::Digit3,
|
|
'4' => Code::Digit4,
|
|
'5' => Code::Digit5,
|
|
'6' => Code::Digit6,
|
|
'7' => Code::Digit7,
|
|
'8' => Code::Digit8,
|
|
'9' => Code::Digit9,
|
|
' ' => Code::Space,
|
|
'-' | '_' => Code::Minus,
|
|
'=' | '+' => Code::Equal,
|
|
',' | '<' => Code::Comma,
|
|
'.' | '>' => Code::Period,
|
|
'/' | '?' => Code::Slash,
|
|
';' | ':' => Code::Semicolon,
|
|
'\'' | '"' => Code::Quote,
|
|
'[' | '{' => Code::BracketLeft,
|
|
']' | '}' => Code::BracketRight,
|
|
'\\' | '|' => Code::Backslash,
|
|
'`' | '~' => Code::Backquote,
|
|
_ => Code::Unidentified,
|
|
}
|
|
}
|