From 0910ffd41a5a9481ef5c36f996a9c04ae1c1aa60 Mon Sep 17 00:00:00 2001 From: Harry Jeffery Date: Fri, 12 Jul 2019 00:13:00 +0100 Subject: Create initial imv_window --- src/window.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/window.h (limited to 'src/window.h') diff --git a/src/window.h b/src/window.h new file mode 100644 index 0000000..0973049 --- /dev/null +++ b/src/window.h @@ -0,0 +1,63 @@ +#ifndef IMV_WINDOW_H +#define IMV_WINDOW_H + +#include + +struct imv_window; + +enum imv_event_type { + IMV_EVENT_CLOSE, + IMV_EVENT_RESIZE, + IMV_EVENT_KEYBOARD, + IMV_EVENT_MOUSE_MOTION, + IMV_EVENT_MOUSE_BUTTON, + IMV_EVENT_CUSTOM +}; + +struct imv_event { + enum imv_event_type type; + union { + struct { + int width; + int height; + int buffer_width; + int buffer_height; + } resize; + struct { + int scancode; + bool pressed; + } keyboard; + struct { + int x, y, dx, dy; + } mouse_motion; + struct { + int button; + bool pressed; + } mouse_button; + void *custom; + } data; +}; + +struct imv_window *imv_window_create(int w, int h, const char *title); + +void imv_window_free(struct imv_window *window); + +void imv_window_get_size(struct imv_window *window, int *w, int *h); + +void imv_window_get_framebuffer_size(struct imv_window *window, int *w, int *h); + +void imv_window_set_title(struct imv_window *window, const char *title); + +void imv_window_present(struct imv_window *window); + +void imv_window_resize(struct imv_window *window, int w, int h); + +void imv_window_wait_for_event(struct imv_window *window, double timeout); + +void imv_window_push_event(struct imv_window *window, struct imv_event *e); + +typedef void (*imv_event_handler)(void *data, const struct imv_event *e); + +void imv_window_pump_events(struct imv_window *window, imv_event_handler handler, void *data); + +#endif -- cgit v1.2.3