From f48520c10ba822e13ef119f626b85fc081f96124 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 25 Aug 2026 19:48:15 -0400 Subject: Raw input + drag and drop on Windows, cleanup Signed-off-by: Andrew Opalach --- src/window.h | 61 +++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 23 deletions(-) (limited to 'src/window.h') diff --git a/src/window.h b/src/window.h index 16b8f2e..66d4f38 100644 --- a/src/window.h +++ b/src/window.h @@ -36,6 +36,18 @@ #include "egl_common.h" #endif +// Drag window by clicking anywhere with MOUSE2. +#define STELA_MOUSE2_DRAG + +#ifdef STELA_WINDOW_WIN32 +#define STELA_DRAG_AND_DROP +#endif + +#define STELA_EVENT_SIZE 24u +#ifndef STELA_EVENTS_SIZE +#define STELA_EVENTS_SIZE (STELA_EVENT_SIZE * 64u) +#endif + #ifndef STELA_MIN_WIDTH #define STELA_MIN_WIDTH 16u #endif @@ -48,21 +60,6 @@ #define STELA_ICON_AT_RUNTIME #endif -// Drag window by clicking anywhere with MOUSE2. -#define STELA_MOUSE2_DRAG - -enum { - STELA_WINDOW_VSYNC = 1, - STELA_WINDOW_WALLPAPER = 1 << 1 -}; - -enum { - STELA_CURSOR_NORMAL = 0, - STELA_CURSOR_MOVE, - STELA_CURSOR_CROSSHAIR, - STELA_CURSOR_HIDDEN -}; - #define STELA_MAX_MONITOR_NAME 255u struct stl_monitor { @@ -73,10 +70,10 @@ struct stl_monitor { char name[STELA_MAX_MONITOR_NAME]; }; -#define STELA_EVENT_SIZE 24u -#ifndef STELA_EVENTS_SIZE -#define STELA_EVENTS_SIZE (STELA_EVENT_SIZE * 64u) -#endif +enum { + STELA_WINDOW_VSYNC = 1, + STELA_WINDOW_WALLPAPER = 1 << 1 +}; struct stl_window { u32 width; @@ -126,7 +123,7 @@ struct stl_window { void (*output_discovered_callback)(void *, struct stl_monitor *); void (*render_callback)(void *); void (*resize_callback)(void *, u32, u32); - bool (*pointer_pos_callback)(void *, f64, f64); + bool (*pointer_callback)(void *, u8, f64, f64); bool (*touch_callback)(void *, s32, u8, f64, f64); bool (*scroll_callback)(void *, f64); bool (*mouse_button_callback)(void *, u8, u8); @@ -136,6 +133,9 @@ struct stl_window { // - Return value decides if the event should "pass through" or not. // True = Consume, False = Passthrough. bool (*key_immediate_callback)(void *, u8, u16); +#ifdef STELA_DRAG_AND_DROP + void (*drag_and_drop_callback)(void *, str *); +#endif void (*should_close_callback)(void *); void *userdata; bool closed; @@ -184,6 +184,11 @@ static u8 stl_all_mouse_buttons[] = { AL_IGNORE_WARNING_END +enum { + STELA_POINTER_POS = 0, + STELA_POINTER_MOVE, +}; + enum { STELA_TOUCH_HOVER = 0, STELA_TOUCH_BEGAN, @@ -192,7 +197,14 @@ enum { STELA_TOUCH_CANCELLED }; -extern s32 stl_platform_main(u32 argc, str *argv); +enum { + STELA_CURSOR_NORMAL = 0, + STELA_CURSOR_MOVE, + STELA_CURSOR_CROSSHAIR, + STELA_CURSOR_HIDDEN +}; + +extern s32 stl_platform_main(u32 argc, str *argv, void *extra); f64 stl_scale_scroll(f64 v, f64 factor); void stl_set_output_discovered_callback(void (*output_discovered)(void *, struct stl_monitor *), void *userdata); @@ -209,15 +221,18 @@ void stl_global_close(void); struct stl_window *stl_window_create(void); void stl_window_send_render_event(struct stl_window *window); void stl_window_send_resize_event(struct stl_window *window, u32 width, u32 height); -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); void stl_window_send_touch_event(struct stl_window *window, s32 index, u8 phase, f64 x, f64 y); void stl_window_send_scroll_event(struct stl_window *window, f64 y); void stl_window_send_mouse_button_event(struct stl_window *window, u8 state, u8 button); void stl_window_drop_mouse_buttons(struct stl_window *window); void stl_window_send_key_event(struct stl_window *window, u8 state, u16 button); bool stl_window_send_key_immediate_event(struct stl_window *window, u8 state, u16 button); -void stl_window_drop_modifiers(struct stl_window *window); +#ifdef STELA_DRAG_AND_DROP +void stl_window_send_drag_and_drop_event(struct stl_window *window, str *path); +#endif void stl_window_send_should_close_event(struct stl_window *window); +void stl_window_drop_modifiers(struct stl_window *window); #ifdef STELA_EVENT_BUFFER bool stl_window_read_events(struct stl_window *window); #endif -- cgit v1.2.3-101-g0448