lxgui
Loading...
Searching...
No Matches
input_keys.cpp
1#include "lxgui/input_keys.hpp"
2
3#include "lxgui/utils_string.hpp"
4
5namespace lxgui::input {
6
7std::string_view get_mouse_button_codename(mouse_button button_id) {
8 switch (button_id) {
9 case mouse_button::left: return "LeftButton";
10 case mouse_button::right: return "RightButton";
11 case mouse_button::middle: return "MiddleButton";
12 default: return "";
13 }
14}
15
17 switch (button_id) {
18 case mouse_button::left: return "{mouse_left}";
19 case mouse_button::right: return "{mouse_right}";
20 case mouse_button::middle: return "{mouse_middle}";
21 default: return "{mouse_unknown}";
22 }
23}
24
26 switch (button_event) {
27 case mouse_button_event::up: return "Up";
28 case mouse_button_event::down: return "Down";
29 case mouse_button_event::double_click: return "DoubleClick";
30 default: return "";
31 }
32}
33
35 switch (button_event) {
36 case mouse_button_event::up: return "{mouse_event_up}";
37 case mouse_button_event::down: return "{mouse_event_down}";
38 case mouse_button_event::double_click: return "{mouse_event_double_click}";
39 default: return "{mouse_event_unknown}";
40 }
41}
42
43std::string_view
45 switch (button_id) {
47 switch (button_event) {
48 case mouse_button_event::up: return "LeftButton:Up";
49 case mouse_button_event::down: return "LeftButton:Down";
50 case mouse_button_event::double_click: return "LeftButton:DoubleClick";
51 default: return "";
52 }
54 switch (button_event) {
55 case mouse_button_event::up: return "RightButton:Up";
56 case mouse_button_event::down: return "RightButton:Down";
57 case mouse_button_event::double_click: return "RightButton:DoubleClick";
58 default: return "";
59 }
61 switch (button_event) {
62 case mouse_button_event::up: return "MiddleButton:Up";
63 case mouse_button_event::down: return "MiddleButton:Down";
64 case mouse_button_event::double_click: return "MiddleButton:DoubleClick";
65 default: return "";
66 }
67 default: return "";
68 }
69}
70
71std::optional<std::pair<mouse_button, mouse_button_event>>
72get_mouse_button_and_event_from_codename(std::string_view button_and_event_name) {
73 const auto pos = button_and_event_name.find_first_of(':');
74 if (pos == std::string_view::npos)
75 return {};
76
77 auto button_name = button_and_event_name.substr(0, pos);
78 auto event_name = button_and_event_name.substr(pos + 1);
79
80 mouse_button button_id{};
81 if (button_name == "LeftButton") {
82 button_id = mouse_button::left;
83 } else if (button_name == "MiddleButton") {
84 button_id = mouse_button::middle;
85 } else if (button_name == "RightButton") {
86 button_id = mouse_button::right;
87 } else {
88 return {};
89 }
90
91 mouse_button_event event_id{};
92 if (event_name == "Up") {
93 event_id = mouse_button_event::up;
94 } else if (event_name == "Down") {
95 event_id = mouse_button_event::down;
96 } else if (event_name == "DoubleClick") {
98 } else {
99 return {};
100 }
101
102 return std::make_pair(button_id, event_id);
103}
104
105std::string_view get_key_codename(key key_id) {
106 switch (key_id) {
107 case key::k_escape: return "Escape";
108 case key::k_1: return "1";
109 case key::k_2: return "2";
110 case key::k_3: return "3";
111 case key::k_4: return "4";
112 case key::k_5: return "5";
113 case key::k_6: return "6";
114 case key::k_7: return "7";
115 case key::k_8: return "8";
116 case key::k_9: return "9";
117 case key::k_0: return "0";
118 case key::k_minus: return "-";
119 case key::k_equals: return "=";
120 case key::k_back: return "Backspace";
121 case key::k_tab: return "Tab";
122 case key::k_q: return "Q";
123 case key::k_w: return "W";
124 case key::k_e: return "E";
125 case key::k_r: return "R";
126 case key::k_t: return "T";
127 case key::k_y: return "Y";
128 case key::k_u: return "U";
129 case key::k_i: return "I";
130 case key::k_o: return "O";
131 case key::k_p: return "P";
132 case key::k_lbracket: return "<";
133 case key::k_rbracket: return ">";
134 case key::k_return: return "Enter";
135 case key::k_lcontrol: return "Ctrl";
136 case key::k_a: return "A";
137 case key::k_s: return "S";
138 case key::k_d: return "D";
139 case key::k_f: return "F";
140 case key::k_g: return "G";
141 case key::k_h: return "H";
142 case key::k_j: return "J";
143 case key::k_k: return "K";
144 case key::k_l: return "L";
145 case key::k_semicolon: return ";";
146 case key::k_apostrophe: return "'";
147 case key::k_grave: return "`";
148 case key::k_lshift: return "Shift";
149 case key::k_backslash: return "\\";
150 case key::k_z: return "Z";
151 case key::k_x: return "X";
152 case key::k_c: return "C";
153 case key::k_v: return "V";
154 case key::k_b: return "B";
155 case key::k_n: return "N";
156 case key::k_m: return "M";
157 case key::k_comma: return ",";
158 case key::k_period: return ".";
159 case key::k_slash: return "/";
160 case key::k_rshift: return "Shift (R)";
161 case key::k_multiply: return "*";
162 case key::k_lmenu: return "Alt";
163 case key::k_space: return "Space";
164 case key::k_capital: return "";
165 case key::k_f1: return "F1";
166 case key::k_f2: return "F2";
167 case key::k_f3: return "F3";
168 case key::k_f4: return "F4";
169 case key::k_f5: return "F5";
170 case key::k_f6: return "F6";
171 case key::k_f7: return "F7";
172 case key::k_f8: return "F8";
173 case key::k_f9: return "F9";
174 case key::k_f10: return "F10";
175 case key::k_numlock: return "Num. Lock";
176 case key::k_scroll: return "Scr. Lock";
177 case key::k_numpad_7: return "7 (Num.)";
178 case key::k_numpad_8: return "8 (Num.)";
179 case key::k_numpad_9: return "9 (Num.)";
180 case key::k_subtract: return "- (Num.)";
181 case key::k_numpad_4: return "4 (Num.)";
182 case key::k_numpad_5: return "5 (Num.)";
183 case key::k_numpad_6: return "6 (Num.)";
184 case key::k_add: return "+ (Num.)";
185 case key::k_numpad_1: return "1 (Num.)";
186 case key::k_numpad_2: return "2 (Num.)";
187 case key::k_numpad_3: return "3 (Num.)";
188 case key::k_numpad_0: return "0 (Num.)";
189 case key::k_decimal: return ". (Num.)";
190 case key::k_f11: return "F11";
191 case key::k_f12: return "F12";
192 case key::k_f13: return "F13";
193 case key::k_f14: return "F14";
194 case key::k_f15: return "F15";
195 case key::k_numpadequals: return "= (Num.)";
196 case key::k_prevtrack: return "Prev. Track";
197 case key::k_nexttrack: return "Next Track";
198 case key::k_numpadenter: return "Enter (Num.)";
199 case key::k_rcontrol: return "Ctrl (R)";
200 case key::k_mute: return "Mute";
201 case key::k_calculator: return "Calculator";
202 case key::k_playpause: return "Play";
203 case key::k_mediastop: return "Stop";
204 case key::k_volumedown: return "Vol. Down";
205 case key::k_volumeup: return "Vol. Up";
206 case key::k_webhome: return "Web Home";
207 case key::k_divide: return "/ (Num.)";
208 case key::k_sysrq: return "Prt. Scn.";
209 case key::k_rmenu: return "Alt (R)";
210 case key::k_pause: return "Pause";
211 case key::k_home: return "Home";
212 case key::k_up: return "Up";
213 case key::k_pgup: return "Page Up";
214 case key::k_left: return "Left";
215 case key::k_right: return "Right";
216 case key::k_end: return "End";
217 case key::k_down: return "Down";
218 case key::k_pgdown: return "Page Down";
219 case key::k_insert: return "Insert";
220 case key::k_delete: return "Delete";
221 case key::k_lwin: return "Win (L)";
222 case key::k_rwin: return "Win (R)";
223 case key::k_apps: return "Apps";
224 case key::k_power: return "Power";
225 case key::k_sleep: return "Sleep";
226 case key::k_wake: return "Wake";
227 case key::k_websearch: return "Web Search";
228 case key::k_webfavorites: return "Web Favorites";
229 case key::k_webrefresh: return "Web Refresh";
230 case key::k_webstop: return "Web Stop";
231 case key::k_webforward: return "Web Forward";
232 case key::k_webback: return "Web Back";
233 case key::k_mycomputer: return "My Computer";
234 case key::k_mail: return "Mail";
235 case key::k_mediaselect: return "Media Select";
236 default: return "";
237 }
238}
239
240key get_key_from_codename(std::string_view key_name) {
241 using index_t = std::underlying_type_t<key>;
242
243 for (index_t i = 0; i < static_cast<index_t>(key::k_maxkey); ++i) {
244 if (key_name == get_key_codename(static_cast<key>(i)))
245 return static_cast<key>(i);
246 }
247
248 return key::k_unassigned;
249}
250
251std::string_view get_localizable_key_name(key key_id) {
252 switch (key_id) {
253 case key::k_escape: return "{key_escape}";
254 case key::k_1: return "{key_1}";
255 case key::k_2: return "{key_2}";
256 case key::k_3: return "{key_3}";
257 case key::k_4: return "{key_4}";
258 case key::k_5: return "{key_5}";
259 case key::k_6: return "{key_6}";
260 case key::k_7: return "{key_7}";
261 case key::k_8: return "{key_8}";
262 case key::k_9: return "{key_9}";
263 case key::k_0: return "{key_0}";
264 case key::k_minus: return "{key_minus}";
265 case key::k_equals: return "{key_equals}";
266 case key::k_back: return "{key_backspace}";
267 case key::k_tab: return "{key_tab}";
268 case key::k_q: return "{key_q}";
269 case key::k_w: return "{key_w}";
270 case key::k_e: return "{key_e}";
271 case key::k_r: return "{key_r}";
272 case key::k_t: return "{key_t}";
273 case key::k_y: return "{key_y}";
274 case key::k_u: return "{key_u}";
275 case key::k_i: return "{key_i}";
276 case key::k_o: return "{key_o}";
277 case key::k_p: return "{key_p}";
278 case key::k_lbracket: return "{key_left_angle}";
279 case key::k_rbracket: return "{key_right_angle}";
280 case key::k_return: return "{key_enter}";
281 case key::k_lcontrol: return "{key_left_control}";
282 case key::k_a: return "{key_a}";
283 case key::k_s: return "{key_s}";
284 case key::k_d: return "{key_d}";
285 case key::k_f: return "{key_f}";
286 case key::k_g: return "{key_g}";
287 case key::k_h: return "{key_h}";
288 case key::k_j: return "{key_j}";
289 case key::k_k: return "{key_k}";
290 case key::k_l: return "{key_l}";
291 case key::k_semicolon: return "{key_semicolon}";
292 case key::k_apostrophe: return "{key_apostrophe}";
293 case key::k_grave: return "{key_grave}";
294 case key::k_lshift: return "{key_left_shift}";
295 case key::k_backslash: return "{key_backslash}";
296 case key::k_z: return "{key_z}";
297 case key::k_x: return "{key_x}";
298 case key::k_c: return "{key_p}";
299 case key::k_v: return "{key_v}";
300 case key::k_b: return "{key_b}";
301 case key::k_n: return "{key_n}";
302 case key::k_m: return "{key_m}";
303 case key::k_comma: return "{key_comma}";
304 case key::k_period: return "{key_period}";
305 case key::k_slash: return "{key_slash}";
306 case key::k_rshift: return "{key_right_shift}";
307 case key::k_multiply: return "{key_multiply}";
308 case key::k_lmenu: return "{key_left_alt}";
309 case key::k_space: return "{key_space}";
310 case key::k_capital: return "{key_unknown}";
311 case key::k_f1: return "{key_f1}";
312 case key::k_f2: return "{key_f2}";
313 case key::k_f3: return "{key_f3}";
314 case key::k_f4: return "{key_f4}";
315 case key::k_f5: return "{key_f5}";
316 case key::k_f6: return "{key_f6}";
317 case key::k_f7: return "{key_f7}";
318 case key::k_f8: return "{key_f8}";
319 case key::k_f9: return "{key_f9}";
320 case key::k_f10: return "{key_f10}";
321 case key::k_numlock: return "{key_num_lock}";
322 case key::k_scroll: return "{key_scroll_lock}";
323 case key::k_numpad_7: return "{key_numpad_7}";
324 case key::k_numpad_8: return "{key_numpad_8}";
325 case key::k_numpad_9: return "{key_numpad_9}";
326 case key::k_subtract: return "{key_numpad_minus}";
327 case key::k_numpad_4: return "{key_numpad_4}";
328 case key::k_numpad_5: return "{key_numpad_5}";
329 case key::k_numpad_6: return "{key_numpad_6}";
330 case key::k_add: return "{key_numpad_plus}";
331 case key::k_numpad_1: return "{key_numpad_1}";
332 case key::k_numpad_2: return "{key_numpad_2}";
333 case key::k_numpad_3: return "{key_numpad_3}";
334 case key::k_numpad_0: return "{key_numpad_0}";
335 case key::k_decimal: return "{key_numpad_period}";
336 case key::k_f11: return "{key_f11}";
337 case key::k_f12: return "{key_f12}";
338 case key::k_f13: return "{key_f13}";
339 case key::k_f14: return "{key_f14}";
340 case key::k_f15: return "{key_f15}";
341 case key::k_numpadequals: return "{key_numpad_equals}";
342 case key::k_prevtrack: return "{key_prev_track}";
343 case key::k_nexttrack: return "{key_next_track}";
344 case key::k_numpadenter: return "{key_numpad_enter}";
345 case key::k_rcontrol: return "{key_right_control}";
346 case key::k_mute: return "{key_mute}";
347 case key::k_calculator: return "{key_calculator}";
348 case key::k_playpause: return "{key_play}";
349 case key::k_mediastop: return "{key_stop}";
350 case key::k_volumedown: return "{key_volume_down}";
351 case key::k_volumeup: return "{key_volume_up}";
352 case key::k_webhome: return "{key_web_home}";
353 case key::k_divide: return "{key_numpad_divide}";
354 case key::k_sysrq: return "{key_print_screen}";
355 case key::k_rmenu: return "{key_right_alt}";
356 case key::k_pause: return "{key_pause}";
357 case key::k_home: return "{key_home}";
358 case key::k_up: return "{key_up}";
359 case key::k_pgup: return "{key_page_up}";
360 case key::k_left: return "{key_left}";
361 case key::k_right: return "{key_right}";
362 case key::k_end: return "{key_end}";
363 case key::k_down: return "{key_down}";
364 case key::k_pgdown: return "{key_page_down}";
365 case key::k_insert: return "{key_insert}";
366 case key::k_delete: return "{key_delete}";
367 case key::k_lwin: return "{key_left_windows}";
368 case key::k_rwin: return "{key_right_windows}";
369 case key::k_apps: return "{key_apps}";
370 case key::k_power: return "{key_power}";
371 case key::k_sleep: return "{key_sleep}";
372 case key::k_wake: return "{key_wake}";
373 case key::k_websearch: return "{key_web_search}";
374 case key::k_webfavorites: return "{key_web_favorites}";
375 case key::k_webrefresh: return "{key_web_refresh}";
376 case key::k_webstop: return "{key_web_stop}";
377 case key::k_webforward: return "{key_web_forward}";
378 case key::k_webback: return "{key_web_back}";
379 case key::k_mycomputer: return "{key_my_computer}";
380 case key::k_mail: return "{key_mail}";
381 case key::k_mediaselect: return "{key_media_select}";
382 default: return "{key_unknown}";
383 }
384}
385
386} // namespace lxgui::input
std::string_view get_mouse_button_event_codename(mouse_button_event button_event)
Returns a standard English name for the provided mouse button event.
std::string_view get_localizable_mouse_button_name(mouse_button button_id)
Returns the localizable name of the provided mouse button.
std::optional< std::pair< mouse_button, mouse_button_event > > get_mouse_button_and_event_from_codename(std::string_view button_and_event_name)
Returns a mouse button and a button event ID from a string formatted as "<button>:<event>".
@ k_webfavorites
Web Search.
@ k_tab
Backspace.
@ k_f15
(NEC PC98)
@ k_space
Left Alt.
@ k_pause
Right Alt.
@ k_rwin
Left Windows key.
@ k_apps
Right Windows key.
@ k_mail
My Computer.
@ k_pgup
UpArrow on arrow keypad.
@ k_end
RightArrow on arrow keypad.
@ k_left
PgUp on arrow keypad.
@ k_delete
Insert on arrow keypad.
@ k_sysrq
/ on numeric keypad
@ k_prevtrack
= on numeric keypad (NEC PC98)
@ k_numpadenter
Next Track.
@ k_webrefresh
Web Favorites.
@ k_webstop
Web Refresh.
@ k_volumedown
Media Stop.
@ k_lwin
Delete on arrow keypad.
@ k_sleep
System Power.
@ k_websearch
System Wake.
@ k_webforward
Web Stop.
@ k_lcontrol
Enter on main keyboard.
@ k_insert
PgDn on arrow keypad.
@ k_down
End on arrow keypad.
@ k_mediastop
Play / Pause.
@ k_volumeup
Volume -.
@ k_playpause
Calculator.
@ k_nexttrack
(J3100)
@ k_wake
System Sleep.
@ k_right
LeftArrow on arrow keypad.
@ k_webback
Web Forward.
@ k_power
AppMenu key.
@ k_up
Home on arrow keypad.
@ k_rshift
/ on main keyboard
@ k_f14
(NEC PC98)
@ k_slash
. on main keyboard
@ k_pgdown
DownArrow on arrow keypad.
@ k_f11
< > | on UK/Germany keyboards
@ k_numpadequals
Numpad . on Portugese (Brazilian) keyboards.
@ k_rcontrol
Enter on numeric keypad.
@ k_webhome
Volume +.
@ k_divide
, on numeric keypad (NEC PC98)
@ k_numpad_7
Scroll Lock.
@ k_maxkey
Media Select.
@ k_mycomputer
Web Back.
std::string_view get_localizable_key_name(key key_id)
Returns the localizable name of the provided key.
std::string_view get_mouse_button_codename(mouse_button button_id)
Returns a standard English name for the provided mouse button.
Definition input_keys.cpp:7
std::string_view get_localizable_mouse_button_event_name(mouse_button_event button_event)
Returns the localizable name of the provided mouse button event.
key get_key_from_codename(std::string_view key_name)
Returns the key code from the standard English name of a key.
std::string_view get_mouse_button_and_event_codename(mouse_button button_id, mouse_button_event button_event)
Returns a standard Engilsh name for the provided mouse button and event.
std::string_view get_key_codename(key key_id)
Returns a standard English name for the provided key.