summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-08-25 19:48:15 -0400
committerAndrew Opalach <andrew@akon.city> 2026-08-25 19:48:15 -0400
commitf48520c10ba822e13ef119f626b85fc081f96124 (patch)
tree8672a171b616b82feb74478d29f4205cf06488e9 /src/window.c
parenta35c47d401335e81f25c2c78611dcb7785f703da (diff)
downloadstela-f48520c10ba822e13ef119f626b85fc081f96124.tar.gz
stela-f48520c10ba822e13ef119f626b85fc081f96124.tar.bz2
stela-f48520c10ba822e13ef119f626b85fc081f96124.zip
Raw input + drag and drop on Windows, cleanup
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/window.c b/src/window.c
index f85f4fc..ad5ca4d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4,9 +4,10 @@
#include "window.h"
#include "keys.h"
-static bool nop_pointer_pos_callback(void *userdata, f64 x, f64 y)
+static bool nop_pointer_callback(void *userdata, u8 type, f64 x, f64 y)
{
(void)userdata;
+ (void)type;
(void)x;
(void)y;
return false;
@@ -53,6 +54,14 @@ static bool nop_key_immediate_callback(void *userdata, u8 state, u16 button)
return false;
}
+#ifdef STELA_DRAG_AND_DROP
+static void nop_drag_and_drop_callback(void *userdata, str *path)
+{
+ (void)userdata;
+ (void)path;
+}
+#endif
+
static void window_default_close(struct stl_window *window)
{
window->closed = true;
@@ -60,12 +69,15 @@ static void window_default_close(struct stl_window *window)
void stl_window_init(struct stl_window *window)
{
- window->pointer_pos_callback = nop_pointer_pos_callback;
+ window->pointer_callback = nop_pointer_callback;
window->touch_callback = nop_touch_callback;
window->scroll_callback = nop_scroll_callback;
window->mouse_button_callback = nop_mouse_button_callback;
window->key_callback = nop_key_callback;
window->key_immediate_callback = nop_key_immediate_callback;
+#ifdef STELA_DRAG_AND_DROP
+ window->drag_and_drop_callback = nop_drag_and_drop_callback;
+#endif
window->close = window_default_close;
#ifdef STELA_EVENT_BUFFER
al_ring_buffer_init(&window->events, window->data, STELA_EVENTS_SIZE);
@@ -121,18 +133,19 @@ void stl_window_send_resize_event(struct stl_window *window, u32 width, u32 heig
#endif
}
-void stl_window_send_pointer_pos_event(struct stl_window *window, f64 x, f64 y)
+void stl_window_send_pointer_event(struct stl_window *window, u8 type, f64 x, f64 y)
{
#ifdef STELA_EVENT_BUFFER
GET_EVENT_CHUNK(STELA_EVENT_POINTER_POS);
- ((f64 *)(&ptr[1]))[0] = x;
- ((f64 *)(&ptr[9]))[0] = y;
+ ptr[1] = type;
+ ((f64 *)(&ptr[2]))[0] = x;
+ ((f64 *)(&ptr[10]))[0] = y;
APPEND_EVENT_CHUNK();
#else
#ifdef STELA_PAUSE
window->pending_refresh |=
#endif
- window->pointer_pos_callback(window->userdata, x, y);
+ window->pointer_callback(window->userdata, type, x, y);
#endif
}
@@ -234,6 +247,13 @@ bool stl_window_send_key_immediate_event(struct stl_window *window, u8 state, u1
return window->key_immediate_callback(window->userdata, state, button * (stl_key_to_mod(button) == STELA_MOD_NONE));
}
+#ifdef STELA_DRAG_AND_DROP
+void stl_window_send_drag_and_drop_event(struct stl_window *window, str *path)
+{
+ window->drag_and_drop_callback(window->userdata, path);
+}
+#endif
+
void stl_window_drop_modifiers(struct stl_window *window)
{
u32 *mods = stl_all_modifiers;
@@ -282,12 +302,13 @@ bool stl_window_read_events(struct stl_window *window)
op = *bc;
switch (op) {
case STELA_EVENT_POINTER_POS: {
- f64 x = ((f64 *)(&bc[1]))[0];
- f64 y = ((f64 *)(&bc[9]))[0];
+ u8 type = bc[1];
+ f64 x = ((f64 *)(&bc[2]))[0];
+ f64 y = ((f64 *)(&bc[10]))[0];
#ifdef STELA_PAUSE
window->pending_refresh |=
#endif
- window->pointer_pos_callback(window->userdata, x, y);
+ window->pointer_callback(window->userdata, type, x, y);
break;
}
case STELA_EVENT_TOUCH: {