lxgui
input_keys.cpp
1 #include "lxgui/input_keys.hpp"
2 
3 #include "lxgui/utils_string.hpp"
4 
5 namespace lxgui::input {
6 
7 std::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 
16 std::string_view get_localizable_mouse_button_name(mouse_button button_id) {
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 
25 std::string_view get_mouse_button_event_codename(mouse_button_event button_event) {
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 
43 std::string_view
45  switch (button_id) {
46  case mouse_button::left:
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 
71 std::optional<std::pair<mouse_button, mouse_button_event>>
72 get_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 
105 std::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 
240 key 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 
251 std::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.
Definition: input_keys.cpp:25
std::string_view get_localizable_mouse_button_name(mouse_button button_id)
Returns the localizable name of the provided mouse button.
Definition: input_keys.cpp:16
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>".
Definition: input_keys.cpp:72
@ 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.
Definition: input_keys.cpp:251
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.
Definition: input_keys.cpp:34
key get_key_from_codename(std::string_view key_name)
Returns the key code from the standard English name of a key.
Definition: input_keys.cpp:240
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.
Definition: input_keys.cpp:44
std::string_view get_key_codename(key key_id)
Returns a standard English name for the provided key.
Definition: input_keys.cpp:105