diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/ui/ui.h | 3 | ||||
-rw-r--r-- | src/main/ui/x11/ui.c | 26 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/main/ui/ui.h b/src/main/ui/ui.h index 86521aa..fcdd99f 100644 --- a/src/main/ui/ui.h +++ b/src/main/ui/ui.h @@ -23,6 +23,7 @@ void ui_init(int w, int h); void ui_loop(void); void ui_set_title(const char *title); -void ui_set_loop_listener(void (*loop_event)()); +void ui_set_loop_listener(void (*event)()); +void ui_set_mouse_press_listener(void (*event)()); #endif /* __UI_H__ */ diff --git a/src/main/ui/x11/ui.c b/src/main/ui/x11/ui.c index 1c04fd4..fc59e4e 100644 --- a/src/main/ui/x11/ui.c +++ b/src/main/ui/x11/ui.c @@ -32,6 +32,7 @@ static GLXContext gl_context; static int close_window = 0; void (*on_loop_event)(); +void (*on_mouse_press_event)(); void cleanup(void); @@ -66,7 +67,7 @@ ui_get_attributes(Window root, XVisualInfo *vi) Colormap colormap = XCreateColormap(display, root, vi->visual, AllocNone); XSetWindowAttributes swa; swa.colormap = colormap; - swa.event_mask = ExposureMask | KeyPressMask | StructureNotifyMask; + swa.event_mask = ExposureMask | KeyPressMask | StructureNotifyMask | ButtonPressMask | ButtonReleaseMask; return swa; } @@ -127,6 +128,21 @@ ui_on_keypress(XEvent event) close_window = 1; } +static void +ui_on_mouse_press(XEvent event) +{ + if (event.type != ButtonPress) return; + if (on_mouse_press_event != NULL) { + on_mouse_press_event(); + } +} + +static void +ui_on_mouse_release(XEvent event) +{ + if (event.type != ButtonRelease) return; +} + void ui_set_loop_listener(void (*loop_event)()) { @@ -134,6 +150,12 @@ ui_set_loop_listener(void (*loop_event)()) } void +ui_set_mouse_press_listener(void (*mouse_press_event)()) +{ + on_mouse_press_event = mouse_press_event; +} + +void ui_loop(void) { XEvent event; @@ -143,6 +165,8 @@ ui_loop(void) ui_on_expose(event); ui_on_resize(event); ui_on_keypress(event); + ui_on_mouse_press(event); + ui_on_mouse_release(event); } on_loop_event(); |