Skip to main content

loam_app/
keymap.rs

1use loam_egui::egui;
2
3pub fn mouse_button_egui(button: u8) -> Option<egui::PointerButton> {
4    match button {
5        0 => Some(egui::PointerButton::Primary),
6        1 => Some(egui::PointerButton::Middle),
7        2 => Some(egui::PointerButton::Secondary),
8        3 => Some(egui::PointerButton::Extra1),
9        4 => Some(egui::PointerButton::Extra2),
10        _ => None,
11    }
12}
13
14pub fn keycode_egui(code: &str) -> Option<egui::Key> {
15    if let Some(k) = letter_egui(code) {
16        return Some(k);
17    }
18    if let Some(k) = digit_egui(code) {
19        return Some(k);
20    }
21    if let Some(k) = function_egui(code) {
22        return Some(k);
23    }
24    match code {
25        "Space" => Some(egui::Key::Space),
26        "Enter" => Some(egui::Key::Enter),
27        "Escape" => Some(egui::Key::Escape),
28        "Tab" => Some(egui::Key::Tab),
29        "Backspace" => Some(egui::Key::Backspace),
30        "Delete" => Some(egui::Key::Delete),
31        "ArrowUp" => Some(egui::Key::ArrowUp),
32        "ArrowDown" => Some(egui::Key::ArrowDown),
33        "ArrowLeft" => Some(egui::Key::ArrowLeft),
34        "ArrowRight" => Some(egui::Key::ArrowRight),
35        "Home" => Some(egui::Key::Home),
36        "End" => Some(egui::Key::End),
37        "PageUp" => Some(egui::Key::PageUp),
38        "PageDown" => Some(egui::Key::PageDown),
39        "Backquote" => Some(egui::Key::Backtick),
40        "Minus" => Some(egui::Key::Minus),
41        "Equal" => Some(egui::Key::Equals),
42        _ => None,
43    }
44}
45
46fn letter_egui(code: &str) -> Option<egui::Key> {
47    match code {
48        "KeyA" => Some(egui::Key::A),
49        "KeyB" => Some(egui::Key::B),
50        "KeyC" => Some(egui::Key::C),
51        "KeyD" => Some(egui::Key::D),
52        "KeyE" => Some(egui::Key::E),
53        "KeyF" => Some(egui::Key::F),
54        "KeyG" => Some(egui::Key::G),
55        "KeyH" => Some(egui::Key::H),
56        "KeyI" => Some(egui::Key::I),
57        "KeyJ" => Some(egui::Key::J),
58        "KeyK" => Some(egui::Key::K),
59        "KeyL" => Some(egui::Key::L),
60        "KeyM" => Some(egui::Key::M),
61        "KeyN" => Some(egui::Key::N),
62        "KeyO" => Some(egui::Key::O),
63        "KeyP" => Some(egui::Key::P),
64        "KeyQ" => Some(egui::Key::Q),
65        "KeyR" => Some(egui::Key::R),
66        "KeyS" => Some(egui::Key::S),
67        "KeyT" => Some(egui::Key::T),
68        "KeyU" => Some(egui::Key::U),
69        "KeyV" => Some(egui::Key::V),
70        "KeyW" => Some(egui::Key::W),
71        "KeyX" => Some(egui::Key::X),
72        "KeyY" => Some(egui::Key::Y),
73        "KeyZ" => Some(egui::Key::Z),
74        _ => None,
75    }
76}
77
78fn digit_egui(code: &str) -> Option<egui::Key> {
79    match code {
80        "Digit0" => Some(egui::Key::Num0),
81        "Digit1" => Some(egui::Key::Num1),
82        "Digit2" => Some(egui::Key::Num2),
83        "Digit3" => Some(egui::Key::Num3),
84        "Digit4" => Some(egui::Key::Num4),
85        "Digit5" => Some(egui::Key::Num5),
86        "Digit6" => Some(egui::Key::Num6),
87        "Digit7" => Some(egui::Key::Num7),
88        "Digit8" => Some(egui::Key::Num8),
89        "Digit9" => Some(egui::Key::Num9),
90        _ => None,
91    }
92}
93
94fn function_egui(code: &str) -> Option<egui::Key> {
95    match code {
96        "F1" => Some(egui::Key::F1),
97        "F2" => Some(egui::Key::F2),
98        "F3" => Some(egui::Key::F3),
99        "F4" => Some(egui::Key::F4),
100        "F5" => Some(egui::Key::F5),
101        "F6" => Some(egui::Key::F6),
102        "F7" => Some(egui::Key::F7),
103        "F8" => Some(egui::Key::F8),
104        "F9" => Some(egui::Key::F9),
105        "F10" => Some(egui::Key::F10),
106        "F11" => Some(egui::Key::F11),
107        "F12" => Some(egui::Key::F12),
108        _ => None,
109    }
110}