summaryrefslogtreecommitdiff
path: root/src/window.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.h')
-rw-r--r--src/window.h61
1 files changed, 38 insertions, 23 deletions
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;
@@ -185,6 +185,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,
STELA_TOUCH_MOVED,
@@ -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