summaryrefslogtreecommitdiff
path: root/src/main/engine/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/engine/ui')
-rw-r--r--src/main/engine/ui/ui.h10
-rw-r--r--src/main/engine/ui/x11/ui.c11
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);
}