diff options
Diffstat (limited to 'src/main/engine/ui')
-rw-r--r-- | src/main/engine/ui/ui.h | 10 | ||||
-rw-r--r-- | src/main/engine/ui/x11/ui.c | 11 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/main/engine/ui/ui.h b/src/main/engine/ui/ui.h index e1c4283..53040ed 100644 --- a/src/main/engine/ui/ui.h +++ b/src/main/engine/ui/ui.h @@ -22,11 +22,17 @@ #include "types.h" +typedef struct LoopEvent { + void (*on_loop_event)(void *data); + void *data; +} LoopEvent; + typedef struct UI { int width; int height; void *extra; int close_window; + LoopEvent *loop_event; } UI; UI *ui_new(int w, int h); @@ -34,8 +40,8 @@ void ui_loop(UI *ui); void ui_set_title(UI *ui, const char *title); void ui_set_expose_listener(void (*expose_event)()); void ui_set_resize_listener(void (*resize_event)(UIEventResize *)); -void ui_set_loop_listener(void (*event)()); -void ui_set_mouse_press_listener(void (*event)(UIMouseButtonPressed *)); +void ui_set_loop_listener(UI *ui, void (*event)(void *data), void *data); +void ui_set_mouse_press_listener(void (*event)(UIMouseButtonPressed *), void *data); void ui_set_generic_listener(void (*generic_event)(int type)); #endif /* __UI_H__ */ diff --git a/src/main/engine/ui/x11/ui.c b/src/main/engine/ui/x11/ui.c index fc7e0b7..07db3a6 100644 --- a/src/main/engine/ui/x11/ui.c +++ b/src/main/engine/ui/x11/ui.c @@ -35,7 +35,6 @@ typedef struct { int close_window; } X11UI; -void (*on_loop_event)(); void (*on_expose_event)(); void (*on_resize_event)(UIEventResize *); void (*on_mouse_press_event)(UIMouseButtonPressed *); @@ -253,9 +252,11 @@ ui_on_generic_event(XEvent event) } void -ui_set_loop_listener(void (*loop_event)()) +ui_set_loop_listener(UI *ui, void (*loop_event)(void *data), void *data) { - on_loop_event = loop_event; + ui->loop_event = malloc(sizeof(LoopEvent)); + ui->loop_event->on_loop_event = loop_event; + ui->loop_event->data = data; } void @@ -271,7 +272,7 @@ ui_set_resize_listener(void (*resize_event)(UIEventResize *)) } void -ui_set_mouse_press_listener(void (*mouse_press_event)(UIMouseButtonPressed *)) +ui_set_mouse_press_listener(void (*mouse_press_event)(UIMouseButtonPressed *), void *data) { on_mouse_press_event = mouse_press_event; } @@ -301,7 +302,7 @@ ui_loop(UI *ui) ui_on_mouse_release(event); } - on_loop_event(); + ui->loop_event->on_loop_event(ui->loop_event->data); glXSwapBuffers(display, window); } |