1 #ifndef DONUT_EVENTS_INPUT_HPP
2 #define DONUT_EVENTS_INPUT_HPP
12 #define DONUT_ENUM_INPUTS(X) \
13 X(UNKNOWN, "unknown", "Unknown" ) \
14 X(KEY_A, "key_a", "A" ) \
15 X(KEY_B, "key_b", "B" ) \
16 X(KEY_C, "key_c", "C" ) \
17 X(KEY_D, "key_d", "D" ) \
18 X(KEY_E, "key_e", "E" ) \
19 X(KEY_F, "key_f", "F" ) \
20 X(KEY_G, "key_g", "G" ) \
21 X(KEY_H, "key_h", "H" ) \
22 X(KEY_I, "key_i", "I" ) \
23 X(KEY_J, "key_j", "J" ) \
24 X(KEY_K, "key_k", "K" ) \
25 X(KEY_L, "key_l", "L" ) \
26 X(KEY_M, "key_m", "M" ) \
27 X(KEY_N, "key_n", "N" ) \
28 X(KEY_O, "key_o", "O" ) \
29 X(KEY_P, "key_p", "P" ) \
30 X(KEY_Q, "key_q", "Q" ) \
31 X(KEY_R, "key_r", "R" ) \
32 X(KEY_S, "key_s", "S" ) \
33 X(KEY_T, "key_t", "T" ) \
34 X(KEY_U, "key_u", "U" ) \
35 X(KEY_V, "key_v", "V" ) \
36 X(KEY_W, "key_w", "W" ) \
37 X(KEY_X, "key_x", "X" ) \
38 X(KEY_Y, "key_y", "Y" ) \
39 X(KEY_Z, "key_z", "Z" ) \
40 X(KEY_1, "key_1", "1" ) \
41 X(KEY_2, "key_2", "2" ) \
42 X(KEY_3, "key_3", "3" ) \
43 X(KEY_4, "key_4", "4" ) \
44 X(KEY_5, "key_5", "5" ) \
45 X(KEY_6, "key_6", "6" ) \
46 X(KEY_7, "key_7", "7" ) \
47 X(KEY_8, "key_8", "8" ) \
48 X(KEY_9, "key_9", "9" ) \
49 X(KEY_0, "key_0", "0" ) \
50 X(KEY_ESCAPE, "key_escape", "Esc" ) \
51 X(KEY_LCTRL, "key_lctrl", "LCtrl" ) \
52 X(KEY_RCTRL, "key_rctrl", "RCtrl" ) \
53 X(KEY_LSHIFT, "key_lshift", "LShift" ) \
54 X(KEY_RSHIFT, "key_rshift", "RShift" ) \
55 X(KEY_LALT, "key_lalt", "LAlt" ) \
56 X(KEY_RALT, "key_ralt", "RAlt" ) \
57 X(KEY_MENU, "key_menu", "Menu" ) \
58 X(KEY_LEFT_BRACKET, "key_left_bracket", "[" ) \
59 X(KEY_RIGHT_BRACKET, "key_right_bracket", "]" ) \
60 X(KEY_SEMICOLON, "key_semicolon", ";" ) \
61 X(KEY_COMMA, "key_comma", "," ) \
62 X(KEY_PERIOD, "key_period", "." ) \
63 X(KEY_APOSTROPHE, "key_apostrophe", "'" ) \
64 X(KEY_SLASH, "key_slash", "/" ) \
65 X(KEY_BACKSLASH, "key_backslash", "\\" ) \
66 X(KEY_GRAVE, "key_grave", "`" ) \
67 X(KEY_EQUALS, "key_equals", "=" ) \
68 X(KEY_MINUS, "key_minus", "-" ) \
69 X(KEY_SPACE, "key_space", "Space" ) \
70 X(KEY_RETURN, "key_return", "Return" ) \
71 X(KEY_BACKSPACE, "key_backspace", "Backspace" ) \
72 X(KEY_TAB, "key_tab", "Tab" ) \
73 X(KEY_PAGE_UP, "key_page_up", "Pgup" ) \
74 X(KEY_PAGE_DOWN, "key_page_down", "Pgdn" ) \
75 X(KEY_END, "key_end", "End" ) \
76 X(KEY_HOME, "key_home", "Home" ) \
77 X(KEY_INSERT, "key_insert", "Insert" ) \
78 X(KEY_DELETE, "key_delete", "Delete" ) \
79 X(KEY_ARROW_UP, "key_arrow_up", "Up Arrow" ) \
80 X(KEY_ARROW_DOWN, "key_arrow_down", "Down Arrow" ) \
81 X(KEY_ARROW_LEFT, "key_arrow_left", "Left Arrow" ) \
82 X(KEY_ARROW_RIGHT, "key_arrow_right", "Right Arrow" ) \
83 X(KEY_NUMPAD_PLUS, "key_numpad_plus", "Numpad +" ) \
84 X(KEY_NUMPAD_MINUS, "key_numpad_minus", "Numpad -" ) \
85 X(KEY_NUMPAD_MULTIPLY, "key_numpad_multiply", "Numpad *" ) \
86 X(KEY_NUMPAD_DIVIDE, "key_numpad_divide", "Numpad /" ) \
87 X(KEY_NUMPAD_1, "key_numpad_1", "Numpad 1" ) \
88 X(KEY_NUMPAD_2, "key_numpad_2", "Numpad 2" ) \
89 X(KEY_NUMPAD_3, "key_numpad_3", "Numpad 3" ) \
90 X(KEY_NUMPAD_4, "key_numpad_4", "Numpad 4" ) \
91 X(KEY_NUMPAD_5, "key_numpad_5", "Numpad 5" ) \
92 X(KEY_NUMPAD_6, "key_numpad_6", "Numpad 6" ) \
93 X(KEY_NUMPAD_7, "key_numpad_7", "Numpad 7" ) \
94 X(KEY_NUMPAD_8, "key_numpad_8", "Numpad 8" ) \
95 X(KEY_NUMPAD_9, "key_numpad_9", "Numpad 9" ) \
96 X(KEY_NUMPAD_0, "key_numpad_0", "Numpad 0" ) \
97 X(KEY_F1, "key_f1", "F1" ) \
98 X(KEY_F2, "key_f2", "F2" ) \
99 X(KEY_F3, "key_f3", "F3" ) \
100 X(KEY_F4, "key_f4", "F4" ) \
101 X(KEY_F5, "key_f5", "F5" ) \
102 X(KEY_F6, "key_f6", "F6" ) \
103 X(KEY_F7, "key_f7", "F7" ) \
104 X(KEY_F8, "key_f8", "F8" ) \
105 X(KEY_F9, "key_f9", "F9" ) \
106 X(KEY_F10, "key_f10", "F10" ) \
107 X(KEY_F11, "key_f11", "F11" ) \
108 X(KEY_F12, "key_f12", "F12" ) \
109 X(KEY_F13, "key_f13", "F13" ) \
110 X(KEY_F14, "key_f14", "F14" ) \
111 X(KEY_F15, "key_f15", "F15" ) \
112 X(KEY_PRINT_SCREEN, "key_print_screen", "PrtSc" ) \
113 X(KEY_SCROLL_LOCK, "key_scroll_lock", "Scroll Lock" ) \
114 X(KEY_PAUSE, "key_pause", "Pause" ) \
115 X(MOUSE_BUTTON_LEFT, "mouse_button_left", "Left Click" ) \
116 X(MOUSE_BUTTON_RIGHT, "mouse_button_right", "Right Click" ) \
117 X(MOUSE_BUTTON_MIDDLE, "mouse_button_middle", "Middle Mouse Button" ) \
118 X(MOUSE_BUTTON_BACK, "mouse_button_back", "Back Mouse Button" ) \
119 X(MOUSE_BUTTON_FORWARD, "mouse_button_forward", "Forward Mouse Button" ) \
120 X(MOUSE_SCROLL_UP, "mouse_scroll_up", "Scroll Up" ) \
121 X(MOUSE_SCROLL_DOWN, "mouse_scroll_down", "Scroll Down" ) \
122 X(MOUSE_SCROLL_LEFT, "mouse_scroll_left", "Scroll Left" ) \
123 X(MOUSE_SCROLL_RIGHT, "mouse_scroll_right", "Scroll Right" ) \
124 X(MOUSE_MOTION_UP, "mouse_motion_up", "Mouse Up" ) \
125 X(MOUSE_MOTION_DOWN, "mouse_motion_down", "Mouse Down" ) \
126 X(MOUSE_MOTION_LEFT, "mouse_motion_left", "Mouse Left" ) \
127 X(MOUSE_MOTION_RIGHT, "mouse_motion_right", "Mouse Right" ) \
128 X(CONTROLLER_BUTTON_A, "controller_button_a", "A Button" ) \
129 X(CONTROLLER_BUTTON_B, "controller_button_b", "B Button" ) \
130 X(CONTROLLER_BUTTON_X, "controller_button_x", "X Button" ) \
131 X(CONTROLLER_BUTTON_Y, "controller_button_y", "Y Button" ) \
132 X(CONTROLLER_BUTTON_BACK, "controller_button_back", "Back Button" ) \
133 X(CONTROLLER_BUTTON_GUIDE, "controller_button_guide", "Guide Button" ) \
134 X(CONTROLLER_BUTTON_START, "controller_button_start", "Start Button" ) \
135 X(CONTROLLER_BUTTON_LEFT_STICK, "controller_button_left_stick", "Left Stick Button" ) \
136 X(CONTROLLER_BUTTON_RIGHT_STICK, "controller_button_right_stick", "Right Stick Button" ) \
137 X(CONTROLLER_BUTTON_LEFT_SHOULDER, "controller_button_left_shoulder", "Left Shoulder Button" ) \
138 X(CONTROLLER_BUTTON_RIGHT_SHOULDER, "controller_button_right_shoulder", "Right Shoulder Button" ) \
139 X(CONTROLLER_BUTTON_DPAD_UP, "controller_button_dpad_up", "D-Pad Up" ) \
140 X(CONTROLLER_BUTTON_DPAD_DOWN, "controller_button_dpad_down", "D-Pad Down" ) \
141 X(CONTROLLER_BUTTON_DPAD_LEFT, "controller_button_dpad_left", "D-Pad Left" ) \
142 X(CONTROLLER_BUTTON_DPAD_RIGHT, "controller_button_dpad_right", "D-Pad Right" ) \
143 X(CONTROLLER_BUTTON_MISC1, "controller_button_misc1", "Misc1 Button" ) \
144 X(CONTROLLER_BUTTON_PADDLE1, "controller_button_paddle1", "Paddle 1" ) \
145 X(CONTROLLER_BUTTON_PADDLE2, "controller_button_paddle2", "Paddle 2" ) \
146 X(CONTROLLER_BUTTON_PADDLE3, "controller_button_paddle3", "Paddle 3" ) \
147 X(CONTROLLER_BUTTON_PADDLE4, "controller_button_paddle4", "Paddle 4" ) \
148 X(CONTROLLER_BUTTON_TOUCHPAD, "controller_button_touchpad", "Touchpad Button" ) \
149 X(CONTROLLER_AXIS_LEFT_STICK_UP, "controller_axis_left_stick_up", "Left Stick Up" ) \
150 X(CONTROLLER_AXIS_LEFT_STICK_DOWN, "controller_axis_left_stick_down", "Left Stick Down" ) \
151 X(CONTROLLER_AXIS_LEFT_STICK_LEFT, "controller_axis_left_stick_left", "Left Stick Left" ) \
152 X(CONTROLLER_AXIS_LEFT_STICK_RIGHT, "controller_axis_left_stick_right", "Left Stick Right" ) \
153 X(CONTROLLER_AXIS_RIGHT_STICK_UP, "controller_axis_right_stick_up", "Right Stick Up" ) \
154 X(CONTROLLER_AXIS_RIGHT_STICK_DOWN, "controller_axis_right_stick_down", "Right Stick Down" ) \
155 X(CONTROLLER_AXIS_RIGHT_STICK_LEFT, "controller_axis_right_stick_left", "Right Stick Left" ) \
156 X(CONTROLLER_AXIS_RIGHT_STICK_RIGHT, "controller_axis_right_stick_right", "Right Stick Right" ) \
157 X(CONTROLLER_AXIS_LEFT_TRIGGER, "controller_axis_left_trigger", "Left Trigger" ) \
158 X(CONTROLLER_AXIS_RIGHT_TRIGGER, "controller_axis_right_trigger", "Right Trigger" ) \
159 X(TOUCH_FINGER_TAP, "touch_finger_tap", "Touch Finger Tap" ) \
160 X(TOUCH_FINGER_PRESSURE, "touch_finger_pressure", "Touch Finger Pressure" ) \
161 X(TOUCH_FINGER_MOTION_UP, "touch_finger_motion_up", "Touch Finger Up" ) \
162 X(TOUCH_FINGER_MOTION_DOWN, "touch_finger_motion_down", "Touch Finger Down" ) \
163 X(TOUCH_FINGER_MOTION_LEFT, "touch_finger_motion_left", "Touch Finger Left" ) \
164 X(TOUCH_FINGER_MOTION_RIGHT, "touch_finger_motion_right", "Touch Finger Right" )
171 enum class Input : std::uint8_t {
172 #define X(name, id, str) name,
181 std::size_t result = 0;
182 #define X(name, id, str) ++result;
197 return static_cast<std::size_t
>(
static_cast<std::uint8_t
>(input));
214 #define X(name, id, str) \
215 case Input::name: return id;
234 #define X(name, id, str) \
235 case Input::name: return str;
253 [[nodiscard]] constexpr
Input findInput(std::string_view identifier) noexcept {
255 #define X(name, id, str) \
256 if (identifier == id) { \
257 return Input::name; \
265 #undef DONUT_ENUM_INPUTS
constexpr std::string_view getInputIdentifier(Input input) noexcept
Get the identifier string of an Input.
Definition: Input.hpp:362
Input
Unique identifier for a specific control on a physical input device, such as a certain keyboard key,...
Definition: Input.hpp:323
constexpr std::string_view getInputString(Input input) noexcept
Get a short human-readable string description of an Input.
Definition: Input.hpp:382
constexpr std::size_t INPUT_COUNT
Total number of inputs that exist in the Input enumeration.
Definition: Input.hpp:337
constexpr std::size_t getInputIndex(Input input) noexcept
Get the 0-based index of an Input.
Definition: Input.hpp:347
constexpr Input findInput(std::string_view identifier) noexcept
Find the Input corresponding to a given identifier.
Definition: Input.hpp:404