This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch evas-sdl3-rewrite
in repository efl.
View the commit online.
commit e294a3809acb6517283a56b854fef6d0031f77d5
Author: Swagtoy <[email protected]>
AuthorDate: Sat May 16 17:05:54 2026 -0400
ecore_sdl: Move events to functions
A bit consistent with the other ecore event systems, and just cleaner.
---
src/lib/ecore_sdl/ecore_sdl.c | 431 +++++++++++++++++++++++-------------------
1 file changed, 235 insertions(+), 196 deletions(-)
diff --git a/src/lib/ecore_sdl/ecore_sdl.c b/src/lib/ecore_sdl/ecore_sdl.c
index 55e0589fd7..b55501c6c6 100644
--- a/src/lib/ecore_sdl/ecore_sdl.c
+++ b/src/lib/ecore_sdl/ecore_sdl.c
@@ -161,6 +161,224 @@ _ecore_sdl_event_key(SDL_Event *event, double timestamp)
return NULL;
}
+static void
+ecore_sdl_event_window_close_requested(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Sdl_Event_Window *ev;
+
+ ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
+ ev->windowID = event->window.windowID;
+
+ ecore_event_add(ECORE_SDL_EVENT_WINDOW_CLOSE, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_mouse_button_down(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Mouse_Button *ev;
+
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
+ if (!ev) return;
+
+ ev->timestamp = timestamp;
+ ev->window = event->button.windowID;
+ ev->event_window = event->button.windowID;
+ ev->modifiers = 0; /* FIXME: keep modifier around. */
+ ev->buttons = event->button.button;
+ ev->double_click = 0;
+ ev->triple_click = 0;
+
+ /* Must set multi touch device to 0 or it will get ignored */
+ ev->multi.device = 0;
+ ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
+ ev->multi.pressure = ev->multi.angle = 0;
+ ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
+
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_mouse_button_up(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Mouse_Button *ev;
+
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
+ if (!ev) return;
+ ev->timestamp = timestamp;
+ ev->window = event->button.windowID;
+ ev->event_window = event->button.windowID;
+ ev->modifiers = 0; /* FIXME: keep modifier around. */
+ ev->buttons = event->button.button;
+ ev->double_click = 0;
+ ev->triple_click = 0;
+
+ /* Must set multi touch device to 0 or it will get ignored */
+ ev->multi.device = 0;
+ ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
+ ev->multi.pressure = ev->multi.angle = 0;
+ ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
+
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_mouse_wheel(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Mouse_Wheel *ev;
+
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Wheel));
+ if (!ev) return;
+
+ ev->timestamp = timestamp;
+ ev->window = event->wheel.windowID;
+ ev->event_window = event->wheel.windowID;
+ ev->modifiers = 0; /* FIXME: keep modifier around. */
+ ev->direction = 0;
+ ev->z = (event->wheel.integer_x != 0) ? (event->wheel.integer_x) : (-event->wheel.integer_y);
+ ev->direction = (event->wheel.integer_x == 0) ? (0) : (1);
+
+ ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
+}
+
+
+
+static void
+ecore_sdl_event_mouse_motion(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Mouse_Move *ev;
+
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Move));
+ if (!ev) return;
+
+ ev->timestamp = timestamp;
+ ev->window = event->motion.windowID;
+ ev->event_window = event->motion.windowID;
+ ev->modifiers = 0; /* FIXME: keep modifier around. */
+ ev->x = event->motion.x;
+ ev->y = event->motion.y;
+ ev->root.x = ev->x;
+ ev->root.y = ev->y;
+
+ /* Must set multi touch device to 0 or it will get ignored */
+ ev->multi.device = 0;
+ ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
+ ev->multi.pressure = ev->multi.angle = 0;
+ ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
+
+ ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_key_down(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_SDL_Pressed *entry;
+ Ecore_Event_Key *ev;
+
+ entry = (Ecore_SDL_Pressed*) eina_rbtree_inline_lookup(repeat, &event->key.key, sizeof (event->key.key),
+ EINA_RBTREE_CMP_KEY_CB(_ecore_sdl_pressed_node), NULL);
+ if (entry)
+ {
+ ev = _ecore_sdl_event_key(event, timestamp);
+ if (ev) ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
+ }
+
+ ev = _ecore_sdl_event_key(event, timestamp);
+ if (ev) ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
+
+ if (!entry)
+ {
+ entry = malloc(sizeof (Ecore_SDL_Pressed));
+ if (!entry) return;
+
+ entry->key = event->key.key;
+
+ repeat = eina_rbtree_inline_insert(repeat, EINA_RBTREE_GET(entry),
+ EINA_RBTREE_CMP_NODE_CB(_ecore_sdl_pressed_key), NULL);
+ }
+}
+
+static void
+ecore_sdl_event_key_up(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Key *ev;
+ Ecore_SDL_Pressed *entry;
+
+ entry = (Ecore_SDL_Pressed*) eina_rbtree_inline_lookup(repeat, &event->key.key, sizeof (event->key.key),
+ EINA_RBTREE_CMP_KEY_CB(_ecore_sdl_pressed_node), NULL);
+ if (entry)
+ {
+ repeat = eina_rbtree_inline_remove(repeat, EINA_RBTREE_GET(entry),
+ EINA_RBTREE_CMP_NODE_CB(_ecore_sdl_pressed_key), NULL);
+ free(entry);
+ }
+
+ ev = _ecore_sdl_event_key(event, timestamp);
+ if (ev) ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_window_resized(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Sdl_Event_Video_Resize *ev;
+
+ ev = calloc(1, sizeof (Ecore_Sdl_Event_Video_Resize));
+ ev->windowID = event->window.windowID;
+ ev->w = event->window.data1;
+ ev->h = event->window.data2;
+
+ ecore_event_add(ECORE_SDL_EVENT_RESIZE, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_window_exposed(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Sdl_Event_Window *ev;
+
+ ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
+ ev->windowID = event->window.windowID;
+
+ ecore_event_add(ECORE_SDL_EVENT_EXPOSE, ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_window_mouse_enter(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Event_Mouse_IO *ev;
+
+ ev = calloc(1, sizeof (Ecore_Event_Mouse_IO));
+ ev->window = event->window.windowID;
+ ev->event_window = event->window.windowID;
+
+ ecore_event_add(event->type == SDL_EVENT_WINDOW_MOUSE_ENTER ?
+ ECORE_EVENT_MOUSE_IN : ECORE_EVENT_MOUSE_OUT,
+ ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_window_mouse_leave(SDL_Event *event, unsigned int timestamp)
+{
+ ecore_sdl_event_window_mouse_enter(event, timestamp);
+}
+
+static void
+ecore_sdl_event_window_focus_gained(SDL_Event *event, unsigned int timestamp)
+{
+ Ecore_Sdl_Event_Window *ev;
+
+ ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
+ ev->windowID = event->window.windowID;
+
+ ecore_event_add(event->type == SDL_EVENT_WINDOW_FOCUS_GAINED ?
+ ECORE_SDL_EVENT_GOT_FOCUS : ECORE_SDL_EVENT_LOST_FOCUS,
+ ev, NULL, NULL);
+}
+
+static void
+ecore_sdl_event_window_focus_lost(SDL_Event *event, unsigned int timestamp)
+{
+ ecore_sdl_event_window_focus_gained(event, timestamp);
+}
+
/**
* Poll SDL for mouse, keyboard, and window events, and add corresponding events to ecore.
* @ingroup Ecore_SDL_Library_Group
@@ -174,211 +392,32 @@ ecore_sdl_feed_events(void)
while(SDL_PollEvent(&event))
{
timestamp = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff);
+#define EVCASE(sdl_event, func) \
+ case sdl_event: ecore_sdl_event_ ## func(&event, timestamp); return;
switch(event.type)
{
- case SDL_EVENT_MOUSE_MOTION:
- {
- Ecore_Event_Mouse_Move *ev;
+ EVCASE(SDL_EVENT_MOUSE_MOTION, mouse_motion);
+ EVCASE(SDL_EVENT_MOUSE_BUTTON_DOWN, mouse_button_down);
+ EVCASE(SDL_EVENT_MOUSE_WHEEL, mouse_wheel);
+ EVCASE(SDL_EVENT_MOUSE_BUTTON_UP, mouse_button_up);
+ EVCASE(SDL_EVENT_WINDOW_CLOSE_REQUESTED, window_close_requested);
+ EVCASE(SDL_EVENT_KEY_DOWN, key_down);
+ EVCASE(SDL_EVENT_KEY_UP, key_up);
+ EVCASE(SDL_EVENT_WINDOW_RESIZED, window_resized);
+ EVCASE(SDL_EVENT_WINDOW_EXPOSED, window_exposed);
+ EVCASE(SDL_EVENT_WINDOW_MOUSE_ENTER, window_mouse_enter);
+ EVCASE(SDL_EVENT_WINDOW_MOUSE_LEAVE, window_mouse_leave);
+ EVCASE(SDL_EVENT_WINDOW_FOCUS_GAINED, window_focus_gained);
+ EVCASE(SDL_EVENT_WINDOW_FOCUS_LOST, window_focus_lost);
- ev = calloc(1, sizeof(Ecore_Event_Mouse_Move));
- if (!ev) return;
-
- ev->timestamp = timestamp;
- ev->window = event.motion.windowID;
- ev->event_window = event.motion.windowID;
- ev->modifiers = 0; /* FIXME: keep modifier around. */
- ev->x = event.motion.x;
- ev->y = event.motion.y;
- ev->root.x = ev->x;
- ev->root.y = ev->y;
-
- /* Must set multi touch device to 0 or it will get ignored */
- ev->multi.device = 0;
- ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
- ev->multi.pressure = ev->multi.angle = 0;
- ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
-
- ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_MOUSE_BUTTON_DOWN:
- {
- Ecore_Event_Mouse_Button *ev;
-
- ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
- if (!ev) return;
-
- ev->timestamp = timestamp;
- ev->window = event.button.windowID;
- ev->event_window = event.button.windowID;
- ev->modifiers = 0; /* FIXME: keep modifier around. */
- ev->buttons = event.button.button;
- ev->double_click = 0;
- ev->triple_click = 0;
-
- /* Must set multi touch device to 0 or it will get ignored */
- ev->multi.device = 0;
- ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
- ev->multi.pressure = ev->multi.angle = 0;
- ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
-
- ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_MOUSE_WHEEL:
- {
- Ecore_Event_Mouse_Wheel *ev;
-
- ev = calloc(1, sizeof(Ecore_Event_Mouse_Wheel));
- if (!ev) return;
-
- ev->timestamp = timestamp;
- ev->window = event.wheel.windowID;
- ev->event_window = event.wheel.windowID;
- ev->modifiers = 0; /* FIXME: keep modifier around. */
- ev->direction = 0;
- ev->z = (event.wheel.integer_x != 0) ? (event.wheel.integer_x) : (-event.wheel.integer_y);
- ev->direction = (event.wheel.integer_x != 0) ? (0) : (1);
-
- ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_MOUSE_BUTTON_UP:
- {
- Ecore_Event_Mouse_Button *ev;
-
- ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
- if (!ev) return;
- ev->timestamp = timestamp;
- ev->window = event.button.windowID;
- ev->event_window = event.button.windowID;
- ev->modifiers = 0; /* FIXME: keep modifier around. */
- ev->buttons = event.button.button;
- ev->double_click = 0;
- ev->triple_click = 0;
-
- /* Must set multi touch device to 0 or it will get ignored */
- ev->multi.device = 0;
- ev->multi.radius = ev->multi.radius_x = ev->multi.radius_y = 0;
- ev->multi.pressure = ev->multi.angle = 0;
- ev->multi.x = ev->multi.y = ev->multi.root.x = ev->multi.root.y = 0;
-
- ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_WINDOW_CLOSE_REQUESTED:
- {
- Ecore_Sdl_Event_Window *ev;
-
- ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
- ev->windowID = event.window.windowID;
-
- ecore_event_add(ECORE_SDL_EVENT_WINDOW_CLOSE, ev, NULL, NULL);
- break;
- }
- // fallthrough
case SDL_EVENT_QUIT:
+ ecore_sdl_event_window_close_requested(&event, timestamp);
ecore_main_loop_quit();
break;
- case SDL_EVENT_KEY_DOWN:
- {
- Ecore_SDL_Pressed *entry;
- Ecore_Event_Key *ev;
-
- entry = (Ecore_SDL_Pressed*) eina_rbtree_inline_lookup(repeat, &event.key.key, sizeof (event.key.key),
- EINA_RBTREE_CMP_KEY_CB(_ecore_sdl_pressed_node), NULL);
- if (entry)
- {
- ev = _ecore_sdl_event_key(&event, timestamp);
- if (ev) ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
- }
-
- ev = _ecore_sdl_event_key(&event, timestamp);
- if (ev) ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
-
- if (!entry)
- {
- entry = malloc(sizeof (Ecore_SDL_Pressed));
- if (!entry) break;
-
- entry->key = event.key.key;
-
- repeat = eina_rbtree_inline_insert(repeat, EINA_RBTREE_GET(entry),
- EINA_RBTREE_CMP_NODE_CB(_ecore_sdl_pressed_key), NULL);
- }
- break;
- }
- case SDL_EVENT_KEY_UP:
- {
- Ecore_Event_Key *ev;
- Ecore_SDL_Pressed *entry;
-
- entry = (Ecore_SDL_Pressed*) eina_rbtree_inline_lookup(repeat, &event.key.key, sizeof (event.key.key),
- EINA_RBTREE_CMP_KEY_CB(_ecore_sdl_pressed_node), NULL);
- if (entry)
- {
- repeat = eina_rbtree_inline_remove(repeat, EINA_RBTREE_GET(entry),
- EINA_RBTREE_CMP_NODE_CB(_ecore_sdl_pressed_key), NULL);
- free(entry);
- }
-
- ev = _ecore_sdl_event_key(&event, timestamp);
- if (ev) ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
- break;
- }
-
- case SDL_EVENT_WINDOW_RESIZED:
- {
- Ecore_Sdl_Event_Video_Resize *ev;
-
- ev = calloc(1, sizeof (Ecore_Sdl_Event_Video_Resize));
- ev->windowID = event.window.windowID;
- ev->w = event.window.data1;
- ev->h = event.window.data2;
-
- ecore_event_add(ECORE_SDL_EVENT_RESIZE, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_WINDOW_EXPOSED:
- {
- Ecore_Sdl_Event_Window *ev;
-
- ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
- ev->windowID = event.window.windowID;
-
- ecore_event_add(ECORE_SDL_EVENT_EXPOSE, ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_WINDOW_MOUSE_ENTER:
- case SDL_EVENT_WINDOW_MOUSE_LEAVE:
- {
- Ecore_Event_Mouse_IO *ev;
-
- ev = calloc(1, sizeof (Ecore_Event_Mouse_IO));
- ev->window = event.window.windowID;
- ev->event_window = event.window.windowID;
-
- ecore_event_add(event.type == SDL_EVENT_WINDOW_MOUSE_ENTER ?
- ECORE_EVENT_MOUSE_IN : ECORE_EVENT_MOUSE_OUT,
- ev, NULL, NULL);
- break;
- }
- case SDL_EVENT_WINDOW_FOCUS_GAINED:
- case SDL_EVENT_WINDOW_FOCUS_LOST:
- {
- Ecore_Sdl_Event_Window *ev;
-
- ev = calloc(1, sizeof (Ecore_Sdl_Event_Window));
- ev->windowID = event.window.windowID;
-
- ecore_event_add(event.type == SDL_EVENT_WINDOW_FOCUS_GAINED ?
- ECORE_SDL_EVENT_GOT_FOCUS : ECORE_SDL_EVENT_LOST_FOCUS,
- ev, NULL, NULL);
- break;
- }
default:
break;
}
+#undef EVCASE
}
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.