Skip to main content

cotis_utils/interactivity/
keyboard.rs

1use indexmap::IndexSet;
2
3/// Normalized keyboard key identifiers used by Cotis input providers.
4///
5/// Values intentionally match platform/backend key tables used by Cotis
6/// integrations (GLFW/raylib style codes, plus Android keys).
7#[repr(i32)]
8#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
9pub enum KeyboardKey {
10    KeyNull = 0,
11    KeyApostrophe = 39,
12    KeyComma = 44,
13    KeyMinus = 45,
14    KeyPeriod = 46,
15    KeySlash = 47,
16    KeyZero = 48,
17    KeyOne = 49,
18    KeyTwo = 50,
19    KeyThree = 51,
20    KeyFour = 52,
21    KeyFive = 53,
22    KeySix = 54,
23    KeySeven = 55,
24    KeyEight = 56,
25    KeyNine = 57,
26    KeySemicolon = 59,
27    KeyEqual = 61,
28    KeyA = 65,
29    KeyB = 66,
30    KeyC = 67,
31    KeyD = 68,
32    KeyE = 69,
33    KeyF = 70,
34    KeyG = 71,
35    KeyH = 72,
36    KeyI = 73,
37    KeyJ = 74,
38    KeyK = 75,
39    KeyL = 76,
40    KeyM = 77,
41    KeyN = 78,
42    KeyO = 79,
43    KeyP = 80,
44    KeyQ = 81,
45    KeyR = 82,
46    KeyS = 83,
47    KeyT = 84,
48    KeyU = 85,
49    KeyV = 86,
50    KeyW = 87,
51    KeyX = 88,
52    KeyY = 89,
53    KeyZ = 90,
54    KeyLeftBracket = 91,
55    KeyBackslash = 92,
56    KeyRightBracket = 93,
57    KeyGrave = 96,
58    KeySpace = 32,
59    KeyEscape = 256,
60    KeyEnter = 257,
61    KeyTab = 258,
62    KeyBackspace = 259,
63    KeyInsert = 260,
64    KeyDelete = 261,
65    KeyRight = 262,
66    KeyLeft = 263,
67    KeyDown = 264,
68    KeyUp = 265,
69    KeyPageUp = 266,
70    KeyPageDown = 267,
71    KeyHome = 268,
72    KeyEnd = 269,
73    KeyCapsLock = 280,
74    KeyScrollLock = 281,
75    KeyNumLock = 282,
76    KeyPrintScreen = 283,
77    KeyPause = 284,
78    KeyF1 = 290,
79    KeyF2 = 291,
80    KeyF3 = 292,
81    KeyF4 = 293,
82    KeyF5 = 294,
83    KeyF6 = 295,
84    KeyF7 = 296,
85    KeyF8 = 297,
86    KeyF9 = 298,
87    KeyF10 = 299,
88    KeyF11 = 300,
89    KeyF12 = 301,
90    KeyLeftShift = 340,
91    KeyLeftControl = 341,
92    KeyLeftAlt = 342,
93    KeyLeftSuper = 343,
94    KeyRightShift = 344,
95    KeyRightControl = 345,
96    KeyRightAlt = 346,
97    KeyRightSuper = 347,
98    KeyKbMenu = 348,
99    KeyKp0 = 320,
100    KeyKp1 = 321,
101    KeyKp2 = 322,
102    KeyKp3 = 323,
103    KeyKp4 = 324,
104    KeyKp5 = 325,
105    KeyKp6 = 326,
106    KeyKp7 = 327,
107    KeyKp8 = 328,
108    KeyKp9 = 329,
109    KeyKpDecimal = 330,
110    KeyKpDivide = 331,
111    KeyKpMultiply = 332,
112    KeyKpSubtract = 333,
113    KeyKpAdd = 334,
114    KeyKpEnter = 335,
115    KeyKpEqual = 336,
116    KeyBack = 4,
117    KeyMenu = 5,
118    KeyVolumeUp = 24,
119    KeyVolumeDown = 25,
120}
121use KeyboardKey::*;
122/// Full key list for integrations that poll every key each frame.
123pub const KEYBOARD_LIST: [KeyboardKey; 110] = [
124    KeyNull,
125    KeyApostrophe,
126    KeyComma,
127    KeyMinus,
128    KeyPeriod,
129    KeySlash,
130    KeyZero,
131    KeyOne,
132    KeyTwo,
133    KeyThree,
134    KeyFour,
135    KeyFive,
136    KeySix,
137    KeySeven,
138    KeyEight,
139    KeyNine,
140    KeySemicolon,
141    KeyEqual,
142    KeyA,
143    KeyB,
144    KeyC,
145    KeyD,
146    KeyE,
147    KeyF,
148    KeyG,
149    KeyH,
150    KeyI,
151    KeyJ,
152    KeyK,
153    KeyL,
154    KeyM,
155    KeyN,
156    KeyO,
157    KeyP,
158    KeyQ,
159    KeyR,
160    KeyS,
161    KeyT,
162    KeyU,
163    KeyV,
164    KeyW,
165    KeyX,
166    KeyY,
167    KeyZ,
168    KeyLeftBracket,
169    KeyBackslash,
170    KeyRightBracket,
171    KeyGrave,
172    KeySpace,
173    KeyEscape,
174    KeyEnter,
175    KeyTab,
176    KeyBackspace,
177    KeyInsert,
178    KeyDelete,
179    KeyRight,
180    KeyLeft,
181    KeyDown,
182    KeyUp,
183    KeyPageUp,
184    KeyPageDown,
185    KeyHome,
186    KeyEnd,
187    KeyCapsLock,
188    KeyScrollLock,
189    KeyNumLock,
190    KeyPrintScreen,
191    KeyPause,
192    KeyF1,
193    KeyF2,
194    KeyF3,
195    KeyF4,
196    KeyF5,
197    KeyF6,
198    KeyF7,
199    KeyF8,
200    KeyF9,
201    KeyF10,
202    KeyF11,
203    KeyF12,
204    KeyLeftShift,
205    KeyLeftControl,
206    KeyLeftAlt,
207    KeyLeftSuper,
208    KeyRightShift,
209    KeyRightControl,
210    KeyRightAlt,
211    KeyRightSuper,
212    KeyKbMenu,
213    KeyKp0,
214    KeyKp1,
215    KeyKp2,
216    KeyKp3,
217    KeyKp4,
218    KeyKp5,
219    KeyKp6,
220    KeyKp7,
221    KeyKp8,
222    KeyKp9,
223    KeyKpDecimal,
224    KeyKpDivide,
225    KeyKpMultiply,
226    KeyKpSubtract,
227    KeyKpAdd,
228    KeyKpEnter,
229    KeyKpEqual,
230    KeyBack,
231    KeyMenu,
232    KeyVolumeUp,
233    KeyVolumeDown,
234];
235
236/// Provides the current set of pressed keys for the active frame.
237///
238/// The returned set is state-based (keys currently down), not edge-triggered.
239pub trait SimpleKeyboardProvider {
240    /// Returns keys currently pressed.
241    fn get_pressed_keys(&self) -> IndexSet<KeyboardKey>;
242}
243
244/// Provides the characters typed during the current frame.
245pub trait SimpleTextProvider {
246    /// Returns entered characters in backend-provided order.
247    fn get_pressed_chars(&self) -> Vec<char>;
248}