summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/ui/ui.h3
-rw-r--r--src/main/ui/x11/ui.c26
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();