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