winit-core/keyboard: use keyboard_types

Closes #2394.
This commit is contained in:
Mads Marquart
2025-06-07 09:47:47 +02:00
committed by GitHub
parent 3a84da6951
commit 2900ecab93
12 changed files with 54 additions and 1897 deletions

View File

@@ -6,10 +6,11 @@ use wasm_bindgen::prelude::wasm_bindgen;
use wasm_bindgen::{JsCast, JsValue};
use web_sys::{KeyboardEvent, MouseEvent, Navigator, PointerEvent, WheelEvent};
use winit_core::event::{FingerId, MouseButton, MouseScrollDelta, PointerKind};
use winit_core::keyboard::{Key, KeyLocation, ModifiersState, NamedKey, PhysicalKey};
use winit_core::keyboard::{
Key, KeyCode, KeyLocation, ModifiersState, NamedKey, NativeKey, NativeKeyCode, PhysicalKey,
};
use super::Engine;
use crate::keyboard::FromAttributeValue;
bitflags::bitflags! {
// https://www.w3.org/TR/pointerevents3/#the-buttons-property
@@ -168,17 +169,32 @@ pub fn pointer_type(event: &PointerEvent, pointer_id: i32) -> PointerKind {
}
pub fn key_code(event: &KeyboardEvent) -> PhysicalKey {
let code = event.code();
PhysicalKey::from_attribute_value(&code)
// Use keyboard-types' parsing (it is based on the W3C standard).
match event.code().parse() {
Ok(KeyCode::Unidentified) => PhysicalKey::Unidentified(NativeKeyCode::Unidentified),
Ok(code) => PhysicalKey::Code(code),
Err(err) => {
tracing::warn!("unknown keyboard input: {err}");
PhysicalKey::Unidentified(NativeKeyCode::Unidentified)
},
}
}
pub fn key(event: &KeyboardEvent) -> Key {
Key::from_attribute_value(&event.key())
let key = event.key();
// Use keyboard-types' parsing (it is based on the W3C standard).
match key.parse() {
Ok(NamedKey::Unidentified) => {
Key::Unidentified(NativeKey::Web(SmolStr::new("Unidentified")))
},
Ok(NamedKey::Dead) => Key::Dead(None),
Ok(named) => Key::Named(named),
Err(_) => Key::Character(SmolStr::new(key)),
}
}
pub fn key_text(event: &KeyboardEvent) -> Option<SmolStr> {
let key = event.key();
let key = Key::from_attribute_value(&key);
let key = key(event);
match &key {
Key::Character(text) => Some(text.clone()),
Key::Named(NamedKey::Tab) => Some(SmolStr::new("\t")),