Mercurial > molko
comparison libmlk-core/mlk/core/event.c @ 613:f76cada0bbb2
misc: switch to SDL3
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 20 Aug 2023 11:14:58 +0200 |
parents | 95792046d3d2 |
children | 281608524dd1 |
comparison
equal
deleted
inserted
replaced
612:297fa28cac90 | 613:f76cada0bbb2 |
---|---|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
17 */ | 17 */ |
18 | |
19 #include <string.h> | |
18 | 20 |
19 #include <SDL.h> | 21 #include <SDL.h> |
20 | 22 |
21 #include "event.h" | 23 #include "event.h" |
22 | 24 |
178 /* Maintain with enum mlk_gamepad_button in gamepad.h */ | 180 /* Maintain with enum mlk_gamepad_button in gamepad.h */ |
179 static const struct { | 181 static const struct { |
180 int button; | 182 int button; |
181 enum mlk_gamepad_button value; | 183 enum mlk_gamepad_button value; |
182 } pads[] = { | 184 } pads[] = { |
183 { SDL_CONTROLLER_BUTTON_A, MLK_GAMEPAD_BUTTON_A }, | 185 { SDL_GAMEPAD_BUTTON_A, MLK_GAMEPAD_BUTTON_A }, |
184 { SDL_CONTROLLER_BUTTON_B, MLK_GAMEPAD_BUTTON_B }, | 186 { SDL_GAMEPAD_BUTTON_B, MLK_GAMEPAD_BUTTON_B }, |
185 { SDL_CONTROLLER_BUTTON_X, MLK_GAMEPAD_BUTTON_X }, | 187 { SDL_GAMEPAD_BUTTON_X, MLK_GAMEPAD_BUTTON_X }, |
186 { SDL_CONTROLLER_BUTTON_Y, MLK_GAMEPAD_BUTTON_Y }, | 188 { SDL_GAMEPAD_BUTTON_Y, MLK_GAMEPAD_BUTTON_Y }, |
187 { SDL_CONTROLLER_BUTTON_BACK, MLK_GAMEPAD_BUTTON_BACK }, | 189 { SDL_GAMEPAD_BUTTON_BACK, MLK_GAMEPAD_BUTTON_BACK }, |
188 { SDL_CONTROLLER_BUTTON_GUIDE, MLK_GAMEPAD_BUTTON_LOGO }, | 190 { SDL_GAMEPAD_BUTTON_GUIDE, MLK_GAMEPAD_BUTTON_LOGO }, |
189 { SDL_CONTROLLER_BUTTON_START, MLK_GAMEPAD_BUTTON_START }, | 191 { SDL_GAMEPAD_BUTTON_START, MLK_GAMEPAD_BUTTON_START }, |
190 { SDL_CONTROLLER_BUTTON_LEFTSTICK, MLK_GAMEPAD_BUTTON_LTHUMB }, | 192 { SDL_GAMEPAD_BUTTON_LEFT_STICK, MLK_GAMEPAD_BUTTON_LTHUMB }, |
191 { SDL_CONTROLLER_BUTTON_RIGHTSTICK, MLK_GAMEPAD_BUTTON_RTHUMB }, | 193 { SDL_GAMEPAD_BUTTON_RIGHT_STICK, MLK_GAMEPAD_BUTTON_RTHUMB }, |
192 { SDL_CONTROLLER_BUTTON_LEFTSHOULDER, MLK_GAMEPAD_BUTTON_LSHOULDER }, | 194 { SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, MLK_GAMEPAD_BUTTON_LSHOULDER }, |
193 { SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, MLK_GAMEPAD_BUTTON_RSHOULDER }, | 195 { SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, MLK_GAMEPAD_BUTTON_RSHOULDER }, |
194 { SDL_CONTROLLER_BUTTON_DPAD_UP, MLK_GAMEPAD_BUTTON_UP }, | 196 { SDL_GAMEPAD_BUTTON_DPAD_UP, MLK_GAMEPAD_BUTTON_UP }, |
195 { SDL_CONTROLLER_BUTTON_DPAD_DOWN, MLK_GAMEPAD_BUTTON_DOWN }, | 197 { SDL_GAMEPAD_BUTTON_DPAD_DOWN, MLK_GAMEPAD_BUTTON_DOWN }, |
196 { SDL_CONTROLLER_BUTTON_DPAD_LEFT, MLK_GAMEPAD_BUTTON_LEFT }, | 198 { SDL_GAMEPAD_BUTTON_DPAD_LEFT, MLK_GAMEPAD_BUTTON_LEFT }, |
197 { SDL_CONTROLLER_BUTTON_DPAD_RIGHT, MLK_GAMEPAD_BUTTON_RIGHT }, | 199 { SDL_GAMEPAD_BUTTON_DPAD_RIGHT, MLK_GAMEPAD_BUTTON_RIGHT }, |
198 { -1, MLK_GAMEPAD_BUTTON_UNKNOWN } | 200 { -1, MLK_GAMEPAD_BUTTON_UNKNOWN } |
199 }; | 201 }; |
200 | 202 |
201 static void | 203 static void |
202 convert_key(const SDL_Event *event, union mlk_event *ev) | 204 convert_key(const SDL_Event *event, union mlk_event *ev) |
203 { | 205 { |
204 ev->type = event->type == SDL_KEYDOWN ? MLK_EVENT_KEYDOWN : MLK_EVENT_KEYUP; | 206 ev->type = event->type == SDL_EVENT_KEY_DOWN ? MLK_EVENT_KEYDOWN : MLK_EVENT_KEYUP; |
205 ev->key.key = MLK_KEY_UNKNOWN; | 207 ev->key.key = MLK_KEY_UNKNOWN; |
206 | 208 |
207 for (size_t i = 0; keymap[i].key != 0; ++i) { | 209 for (size_t i = 0; keymap[i].key != 0; ++i) { |
208 if (keymap[i].key == event->key.keysym.sym) { | 210 if (keymap[i].key == event->key.keysym.sym) { |
209 ev->key.key = keymap[i].value; | 211 ev->key.key = keymap[i].value; |
229 } | 231 } |
230 | 232 |
231 static void | 233 static void |
232 convert_click(const SDL_Event *event, union mlk_event *ev) | 234 convert_click(const SDL_Event *event, union mlk_event *ev) |
233 { | 235 { |
234 ev->type = event->type == SDL_MOUSEBUTTONDOWN ? MLK_EVENT_CLICKDOWN : MLK_EVENT_CLICKUP; | 236 ev->type = event->type == SDL_EVENT_MOUSE_BUTTON_DOWN ? MLK_EVENT_CLICKDOWN : MLK_EVENT_CLICKUP; |
235 ev->click.button = MLK_MOUSE_BUTTON_NONE; | 237 ev->click.button = MLK_MOUSE_BUTTON_NONE; |
236 ev->click.x = event->button.x; | 238 ev->click.x = event->button.x; |
237 ev->click.y = event->button.y; | 239 ev->click.y = event->button.y; |
238 ev->click.clicks = event->button.clicks; | 240 ev->click.clicks = event->button.clicks; |
239 | 241 |
246 } | 248 } |
247 | 249 |
248 static void | 250 static void |
249 convert_pad(const SDL_Event *event, union mlk_event *ev) | 251 convert_pad(const SDL_Event *event, union mlk_event *ev) |
250 { | 252 { |
251 ev->type = event->type == SDL_CONTROLLERBUTTONDOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP; | 253 ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP; |
252 | 254 |
253 for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) { | 255 for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) { |
254 if (pads[i].button == event->cbutton.button) { | 256 if (pads[i].button == event->gbutton.button) { |
255 ev->pad.button = pads[i].value; | 257 ev->pad.button = pads[i].value; |
256 break; | 258 break; |
257 } | 259 } |
258 } | 260 } |
259 } | 261 } |
260 | 262 |
261 static const struct { | 263 static const struct { |
262 int axis; | 264 int axis; |
263 enum mlk_gamepad_axis value; | 265 enum mlk_gamepad_axis value; |
264 } axises[] = { | 266 } axises[] = { |
265 { SDL_CONTROLLER_AXIS_LEFTX, MLK_GAMEPAD_AXIS_LX }, | 267 { SDL_GAMEPAD_AXIS_LEFTX, MLK_GAMEPAD_AXIS_LX }, |
266 { SDL_CONTROLLER_AXIS_LEFTY, MLK_GAMEPAD_AXIS_LY }, | 268 { SDL_GAMEPAD_AXIS_LEFTY, MLK_GAMEPAD_AXIS_LY }, |
267 { SDL_CONTROLLER_AXIS_RIGHTX, MLK_GAMEPAD_AXIS_RX }, | 269 { SDL_GAMEPAD_AXIS_RIGHTX, MLK_GAMEPAD_AXIS_RX }, |
268 { SDL_CONTROLLER_AXIS_RIGHTY, MLK_GAMEPAD_AXIS_RY }, | 270 { SDL_GAMEPAD_AXIS_RIGHTY, MLK_GAMEPAD_AXIS_RY }, |
269 { SDL_CONTROLLER_AXIS_TRIGGERLEFT, MLK_GAMEPAD_AXIS_LTRIGGER }, | 271 { SDL_GAMEPAD_AXIS_LEFT_TRIGGER, MLK_GAMEPAD_AXIS_LTRIGGER }, |
270 { SDL_CONTROLLER_AXIS_TRIGGERRIGHT, MLK_GAMEPAD_AXIS_RTRIGGER }, | 272 { SDL_GAMEPAD_AXIS_RIGHT_TRIGGER, MLK_GAMEPAD_AXIS_RTRIGGER }, |
271 { -1, MLK_GAMEPAD_AXIS_UNKNOWN } | 273 { -1, MLK_GAMEPAD_AXIS_UNKNOWN } |
272 }; | 274 }; |
273 | 275 |
274 static void | 276 static void |
275 convert_axis(const SDL_Event *event, union mlk_event *ev) | 277 convert_axis(const SDL_Event *event, union mlk_event *ev) |
276 { | 278 { |
277 ev->type = MLK_EVENT_AXIS; | 279 ev->type = MLK_EVENT_AXIS; |
278 ev->axis.value = event->caxis.value; | 280 ev->axis.value = event->gaxis.value; |
279 | 281 |
280 for (size_t i = 0; axises[i].value != MLK_GAMEPAD_AXIS_UNKNOWN; ++i) { | 282 for (size_t i = 0; axises[i].value != MLK_GAMEPAD_AXIS_UNKNOWN; ++i) { |
281 if (axises[i].axis == event->caxis.axis) { | 283 if (axises[i].axis == event->gaxis.axis) { |
282 ev->axis.axis = axises[i].value; | 284 ev->axis.axis = axises[i].value; |
283 break; | 285 break; |
284 } | 286 } |
285 } | 287 } |
286 } | 288 } |
296 * Loop until we find an event we want to report, we skip unneeded | 298 * Loop until we find an event we want to report, we skip unneeded |
297 * ones. | 299 * ones. |
298 */ | 300 */ |
299 while (SDL_PollEvent(&event)) { | 301 while (SDL_PollEvent(&event)) { |
300 switch (event.type) { | 302 switch (event.type) { |
301 case SDL_QUIT: | 303 case SDL_EVENT_QUIT: |
302 ev->type = MLK_EVENT_QUIT; | 304 ev->type = MLK_EVENT_QUIT; |
303 return 1; | 305 return 1; |
304 case SDL_KEYDOWN: | 306 case SDL_EVENT_KEY_DOWN: |
305 case SDL_KEYUP: | 307 case SDL_EVENT_KEY_UP: |
306 convert_key(&event, ev); | 308 convert_key(&event, ev); |
307 return 1; | 309 return 1; |
308 case SDL_MOUSEMOTION: | 310 case SDL_EVENT_MOUSE_MOTION: |
309 convert_mouse(&event, ev); | 311 convert_mouse(&event, ev); |
310 return 1; | 312 return 1; |
311 case SDL_MOUSEBUTTONDOWN: | 313 case SDL_EVENT_MOUSE_BUTTON_DOWN: |
312 case SDL_MOUSEBUTTONUP: | 314 case SDL_EVENT_MOUSE_BUTTON_UP: |
313 convert_click(&event, ev); | 315 convert_click(&event, ev); |
314 return 1; | 316 return 1; |
315 case SDL_CONTROLLERBUTTONDOWN: | 317 case SDL_EVENT_GAMEPAD_BUTTON_DOWN: |
316 case SDL_CONTROLLERBUTTONUP: | 318 case SDL_EVENT_GAMEPAD_BUTTON_UP: |
317 convert_pad(&event, ev); | 319 convert_pad(&event, ev); |
318 return 1; | 320 return 1; |
319 case SDL_CONTROLLERAXISMOTION: | 321 case SDL_EVENT_GAMEPAD_AXIS_MOTION: |
320 convert_axis(&event, ev); | 322 convert_axis(&event, ev); |
321 return 1; | 323 return 1; |
322 default: | 324 default: |
323 continue; | 325 continue; |
324 } | 326 } |