Skip to main content

telar_platform_winit/
map.rs

1use winit::event::{Modifiers, MouseButton as WinitMouseButton};
2use winit::keyboard::NamedKey as WinitNamedKey;
3
4// Shared winit->platform_core translation used by every winit backend (desktop + android). Keeping the
5// NamedKey table in one place avoids the two-backend hazard where a new key is added to one match only.
6pub fn map_named_key(key: WinitNamedKey) -> Option<platform_core::NamedKey> {
7    let nk = match key {
8        WinitNamedKey::Enter => platform_core::NamedKey::Enter,
9        WinitNamedKey::Backspace => platform_core::NamedKey::Backspace,
10        WinitNamedKey::Escape => platform_core::NamedKey::Escape,
11        WinitNamedKey::Tab => platform_core::NamedKey::Tab,
12        WinitNamedKey::Delete => platform_core::NamedKey::Delete,
13        WinitNamedKey::Home => platform_core::NamedKey::Home,
14        WinitNamedKey::End => platform_core::NamedKey::End,
15        WinitNamedKey::PageUp => platform_core::NamedKey::PageUp,
16        WinitNamedKey::PageDown => platform_core::NamedKey::PageDown,
17        WinitNamedKey::ArrowUp => platform_core::NamedKey::ArrowUp,
18        WinitNamedKey::ArrowDown => platform_core::NamedKey::ArrowDown,
19        WinitNamedKey::ArrowLeft => platform_core::NamedKey::ArrowLeft,
20        WinitNamedKey::ArrowRight => platform_core::NamedKey::ArrowRight,
21        WinitNamedKey::F1 => platform_core::NamedKey::F1,
22        WinitNamedKey::F2 => platform_core::NamedKey::F2,
23        WinitNamedKey::F3 => platform_core::NamedKey::F3,
24        WinitNamedKey::F4 => platform_core::NamedKey::F4,
25        WinitNamedKey::F5 => platform_core::NamedKey::F5,
26        WinitNamedKey::F6 => platform_core::NamedKey::F6,
27        WinitNamedKey::F7 => platform_core::NamedKey::F7,
28        WinitNamedKey::F8 => platform_core::NamedKey::F8,
29        WinitNamedKey::F9 => platform_core::NamedKey::F9,
30        WinitNamedKey::F10 => platform_core::NamedKey::F10,
31        WinitNamedKey::F11 => platform_core::NamedKey::F11,
32        WinitNamedKey::F12 => platform_core::NamedKey::F12,
33        WinitNamedKey::Space => platform_core::NamedKey::Space,
34        WinitNamedKey::Insert => platform_core::NamedKey::Insert,
35        WinitNamedKey::CapsLock => platform_core::NamedKey::CapsLock,
36        _ => return None,
37    };
38    Some(nk)
39}
40
41pub fn map_mouse_button(button: WinitMouseButton) -> Option<platform_core::PointerButton> {
42    match button {
43        WinitMouseButton::Left => Some(platform_core::PointerButton::Primary),
44        WinitMouseButton::Right => Some(platform_core::PointerButton::Secondary),
45        WinitMouseButton::Middle => Some(platform_core::PointerButton::Auxiliary),
46        _ => None,
47    }
48}
49
50pub fn map_modifiers(mods: &Modifiers) -> platform_core::ModifiersState {
51    platform_core::ModifiersState {
52        is_shift: mods.state().shift_key(),
53        is_ctrl: mods.state().control_key(),
54        is_alt: mods.state().alt_key(),
55        is_meta: mods.state().super_key(),
56    }
57}