1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
use winit::event::VirtualKeyCode;
pub mod virtual_key_codes {
use winit::event::VirtualKeyCode;
pub const LETTERS: [VirtualKeyCode; 26] = [
VirtualKeyCode::A,
VirtualKeyCode::B,
VirtualKeyCode::C,
VirtualKeyCode::D,
VirtualKeyCode::E,
VirtualKeyCode::F,
VirtualKeyCode::G,
VirtualKeyCode::H,
VirtualKeyCode::I,
VirtualKeyCode::J,
VirtualKeyCode::K,
VirtualKeyCode::L,
VirtualKeyCode::M,
VirtualKeyCode::N,
VirtualKeyCode::O,
VirtualKeyCode::P,
VirtualKeyCode::Q,
VirtualKeyCode::R,
VirtualKeyCode::S,
VirtualKeyCode::T,
VirtualKeyCode::U,
VirtualKeyCode::V,
VirtualKeyCode::W,
VirtualKeyCode::X,
VirtualKeyCode::Y,
VirtualKeyCode::Z,
];
pub const NUMBERS: [VirtualKeyCode; 10] = [
VirtualKeyCode::Key0,
VirtualKeyCode::Key1,
VirtualKeyCode::Key2,
VirtualKeyCode::Key3,
VirtualKeyCode::Key4,
VirtualKeyCode::Key5,
VirtualKeyCode::Key6,
VirtualKeyCode::Key7,
VirtualKeyCode::Key8,
VirtualKeyCode::Key9,
];
pub const ARROWS: [VirtualKeyCode; 4] = [
VirtualKeyCode::Up,
VirtualKeyCode::Down,
VirtualKeyCode::Left,
VirtualKeyCode::Right,
];
pub const MODIFIERS: [VirtualKeyCode; 8] = [
VirtualKeyCode::LShift,
VirtualKeyCode::RShift,
VirtualKeyCode::LAlt,
VirtualKeyCode::RAlt,
VirtualKeyCode::RWin,
VirtualKeyCode::LWin,
VirtualKeyCode::LControl,
VirtualKeyCode::RControl,
];
pub const TYPING: [VirtualKeyCode; 4] = [
VirtualKeyCode::Space,
VirtualKeyCode::Return,
VirtualKeyCode::Tab,
VirtualKeyCode::Back,
];
pub const SYMBOLS: [VirtualKeyCode; 12] = [
VirtualKeyCode::Minus,
VirtualKeyCode::Plus,
VirtualKeyCode::Asterisk,
VirtualKeyCode::Semicolon,
VirtualKeyCode::Equals,
VirtualKeyCode::LBracket,
VirtualKeyCode::RBracket,
VirtualKeyCode::Comma,
VirtualKeyCode::Period,
VirtualKeyCode::Slash,
VirtualKeyCode::Apostrophe,
VirtualKeyCode::Backslash,
];
}
pub fn key_press_to_char(code: VirtualKeyCode, shift: bool) -> Option<char> {
key_code_to_char(code).map(|(c1, c2)| if shift { c2 } else { c1 })
}
pub fn key_code_to_char(code: VirtualKeyCode) -> Option<(char, char)> {
match code {
VirtualKeyCode::Key1 => Some(('1', '!')),
VirtualKeyCode::Key2 => Some(('2', '@')),
VirtualKeyCode::Key3 => Some(('3', '£')),
VirtualKeyCode::Key4 => Some(('4', '$')),
VirtualKeyCode::Key5 => Some(('5', '%')),
VirtualKeyCode::Key6 => Some(('6', '^')),
VirtualKeyCode::Key7 => Some(('7', '&')),
VirtualKeyCode::Key8 => Some(('8', '*')),
VirtualKeyCode::Key9 => Some(('9', '(')),
VirtualKeyCode::Key0 => Some(('0', ')')),
VirtualKeyCode::A => Some(('a', 'A')),
VirtualKeyCode::B => Some(('b', 'B')),
VirtualKeyCode::C => Some(('c', 'C')),
VirtualKeyCode::D => Some(('d', 'D')),
VirtualKeyCode::E => Some(('e', 'E')),
VirtualKeyCode::F => Some(('f', 'F')),
VirtualKeyCode::G => Some(('g', 'G')),
VirtualKeyCode::H => Some(('h', 'H')),
VirtualKeyCode::I => Some(('i', 'I')),
VirtualKeyCode::J => Some(('j', 'J')),
VirtualKeyCode::K => Some(('k', 'K')),
VirtualKeyCode::L => Some(('l', 'L')),
VirtualKeyCode::M => Some(('m', 'M')),
VirtualKeyCode::N => Some(('n', 'N')),
VirtualKeyCode::O => Some(('o', 'O')),
VirtualKeyCode::P => Some(('p', 'P')),
VirtualKeyCode::Q => Some(('q', 'Q')),
VirtualKeyCode::R => Some(('r', 'R')),
VirtualKeyCode::S => Some(('s', 'S')),
VirtualKeyCode::T => Some(('t', 'T')),
VirtualKeyCode::U => Some(('u', 'U')),
VirtualKeyCode::V => Some(('v', 'V')),
VirtualKeyCode::W => Some(('w', 'W')),
VirtualKeyCode::X => Some(('x', 'X')),
VirtualKeyCode::Y => Some(('y', 'Y')),
VirtualKeyCode::Z => Some(('z', 'Z')),
VirtualKeyCode::Space => Some((' ', ' ')),
VirtualKeyCode::Numpad0 => Some(('0', '0')),
VirtualKeyCode::Numpad1 => Some(('1', '1')),
VirtualKeyCode::Numpad2 => Some(('2', '2')),
VirtualKeyCode::Numpad3 => Some(('3', '3')),
VirtualKeyCode::Numpad4 => Some(('4', '4')),
VirtualKeyCode::Numpad5 => Some(('5', '5')),
VirtualKeyCode::Numpad6 => Some(('6', '6')),
VirtualKeyCode::Numpad7 => Some(('7', '7')),
VirtualKeyCode::Numpad8 => Some(('8', '8')),
VirtualKeyCode::Numpad9 => Some(('9', '9')),
VirtualKeyCode::NumpadAdd => Some(('+', '+')),
VirtualKeyCode::NumpadDivide => Some(('/', '/')),
VirtualKeyCode::NumpadDecimal => Some(('.', '.')),
VirtualKeyCode::NumpadComma => Some((',', ',')),
VirtualKeyCode::NumpadEquals => Some(('=', '=')),
VirtualKeyCode::NumpadMultiply => Some(('*', '*')),
VirtualKeyCode::NumpadSubtract => Some(('-', '-')),
VirtualKeyCode::Apostrophe => Some(('\'', '"')),
VirtualKeyCode::Asterisk => Some(('*', '*')),
VirtualKeyCode::At => Some(('@', '@')),
VirtualKeyCode::Backslash => Some(('\\', '|')),
VirtualKeyCode::Colon => Some((':', ':')),
VirtualKeyCode::Comma => Some((',', '<')),
VirtualKeyCode::Equals => Some(('=', '+')),
VirtualKeyCode::Grave => Some(('1', '1')),
VirtualKeyCode::LBracket => Some(('[', '{')),
VirtualKeyCode::Minus => Some(('-', '_')),
VirtualKeyCode::Period => Some(('.', '>')),
VirtualKeyCode::Plus => Some(('+', '+')),
VirtualKeyCode::Semicolon => Some((';', ':')),
VirtualKeyCode::Slash => Some(('/', '?')),
VirtualKeyCode::Underline => Some(('_', '_')),
_ => None,
}
}