Mercurial > molko
comparison libmlk-core/mlk/core/event.c @ 634:3930234ab1f5
examples: add basic gamepad
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 29 Aug 2023 13:34:10 +0200 |
parents | 281608524dd1 |
children |
comparison
equal
deleted
inserted
replaced
633:6271599928d4 | 634:3930234ab1f5 |
---|---|
246 } | 246 } |
247 } | 247 } |
248 } | 248 } |
249 | 249 |
250 static void | 250 static void |
251 convert_pad(const SDL_Event *event, union mlk_event *ev) | 251 convert_button(const SDL_Event *event, union mlk_event *ev) |
252 { | 252 { |
253 ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP; | 253 ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_BUTTONDOWN : MLK_EVENT_BUTTONUP; |
254 | 254 |
255 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) { |
256 if (pads[i].button == event->gbutton.button) { | 256 if (pads[i].button == event->gbutton.button) { |
257 ev->pad.button = pads[i].value; | 257 ev->button.button = pads[i].value; |
258 break; | 258 break; |
259 } | 259 } |
260 } | 260 } |
261 } | 261 } |
262 | 262 |
286 } | 286 } |
287 } | 287 } |
288 } | 288 } |
289 | 289 |
290 static void | 290 static void |
291 convert_gamepad(const SDL_Event *event, union mlk_event *ev) | |
292 { | |
293 ev->type = SDL_EVENT_GAMEPAD_ADDED ? MLK_EVENT_GAMEPAD_ATTACH : MLK_EVENT_GAMEPAD_DETACH; | |
294 ev->gamepad.index = event->gdevice.which; | |
295 } | |
296 | |
297 static void | |
291 convert_theme(union mlk_event *ev) | 298 convert_theme(union mlk_event *ev) |
292 { | 299 { |
293 ev->type = MLK_EVENT_THEME; | 300 ev->type = MLK_EVENT_THEME; |
294 | 301 |
295 switch (SDL_GetSystemTheme()) { | 302 switch (SDL_GetSystemTheme()) { |
331 case SDL_EVENT_MOUSE_BUTTON_UP: | 338 case SDL_EVENT_MOUSE_BUTTON_UP: |
332 convert_click(&event, ev); | 339 convert_click(&event, ev); |
333 return 1; | 340 return 1; |
334 case SDL_EVENT_GAMEPAD_BUTTON_DOWN: | 341 case SDL_EVENT_GAMEPAD_BUTTON_DOWN: |
335 case SDL_EVENT_GAMEPAD_BUTTON_UP: | 342 case SDL_EVENT_GAMEPAD_BUTTON_UP: |
336 convert_pad(&event, ev); | 343 convert_button(&event, ev); |
337 return 1; | 344 return 1; |
338 case SDL_EVENT_GAMEPAD_AXIS_MOTION: | 345 case SDL_EVENT_GAMEPAD_AXIS_MOTION: |
339 convert_axis(&event, ev); | 346 convert_axis(&event, ev); |
347 return 1; | |
348 case SDL_EVENT_GAMEPAD_ADDED: | |
349 case SDL_EVENT_GAMEPAD_REMOVED: | |
350 convert_gamepad(&event, ev); | |
340 return 1; | 351 return 1; |
341 case SDL_EVENT_SYSTEM_THEME_CHANGED: | 352 case SDL_EVENT_SYSTEM_THEME_CHANGED: |
342 /* | 353 /* |
343 * We only report the event if the user preferrence is | 354 * We only report the event if the user preferrence is |
344 * set to auto because we don't need it otherwise. | 355 * set to auto because we don't need it otherwise. |