Mercurial > molko
diff 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 |
line wrap: on
line diff
--- a/libmlk-core/mlk/core/event.c Mon Aug 28 20:01:48 2023 +0200 +++ b/libmlk-core/mlk/core/event.c Tue Aug 29 13:34:10 2023 +0200 @@ -248,13 +248,13 @@ } static void -convert_pad(const SDL_Event *event, union mlk_event *ev) +convert_button(const SDL_Event *event, union mlk_event *ev) { - ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_PADDOWN : MLK_EVENT_PADUP; + ev->type = event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN ? MLK_EVENT_BUTTONDOWN : MLK_EVENT_BUTTONUP; for (size_t i = 0; pads[i].value != MLK_GAMEPAD_BUTTON_UNKNOWN; ++i) { if (pads[i].button == event->gbutton.button) { - ev->pad.button = pads[i].value; + ev->button.button = pads[i].value; break; } } @@ -288,6 +288,13 @@ } static void +convert_gamepad(const SDL_Event *event, union mlk_event *ev) +{ + ev->type = SDL_EVENT_GAMEPAD_ADDED ? MLK_EVENT_GAMEPAD_ATTACH : MLK_EVENT_GAMEPAD_DETACH; + ev->gamepad.index = event->gdevice.which; +} + +static void convert_theme(union mlk_event *ev) { ev->type = MLK_EVENT_THEME; @@ -333,11 +340,15 @@ return 1; case SDL_EVENT_GAMEPAD_BUTTON_DOWN: case SDL_EVENT_GAMEPAD_BUTTON_UP: - convert_pad(&event, ev); + convert_button(&event, ev); return 1; case SDL_EVENT_GAMEPAD_AXIS_MOTION: convert_axis(&event, ev); return 1; + case SDL_EVENT_GAMEPAD_ADDED: + case SDL_EVENT_GAMEPAD_REMOVED: + convert_gamepad(&event, ev); + return 1; case SDL_EVENT_SYSTEM_THEME_CHANGED: /* * We only report the event if the user preferrence is