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.