summaryrefslogtreecommitdiff
path: root/src/main/engine/ui
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2025-05-20 20:23:59 +0200
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2025-05-20 20:25:31 +0200
commit693d830f69b9a4ce6f956f4a688f41180156473e (patch)
treec15764d1e95291b32ca9af41daf4dd41290544a7 /src/main/engine/ui
parent618402caa489751d61643e6839607fd1546ad635 (diff)
downloadtris-693d830f69b9a4ce6f956f4a688f41180156473e.tar.gz
tris-693d830f69b9a4ce6f956f4a688f41180156473e.zip
Add logic to get coordinates of the mouse button click
Diffstat (limited to 'src/main/engine/ui')
-rw-r--r--src/main/engine/ui/types.h4
-rw-r--r--src/main/engine/ui/ui.h2
-rw-r--r--src/main/engine/ui/x11/ui.c22
3 files changed, 24 insertions, 4 deletions
diff --git a/src/main/engine/ui/types.h b/src/main/engine/ui/types.h
index 23943a2..6a9fedb 100644
--- a/src/main/engine/ui/types.h
+++ b/src/main/engine/ui/types.h
@@ -30,4 +30,8 @@ typedef struct UIEventResize {
int height;
} UIEventResize;
+typedef struct UIMouseButtonPressed {
+ int x, y;
+} UIMouseButtonPressed;
+
#endif /* __TYPES_H__ */
diff --git a/src/main/engine/ui/ui.h b/src/main/engine/ui/ui.h
index 3d32c1a..432d158 100644
--- a/src/main/engine/ui/ui.h
+++ b/src/main/engine/ui/ui.h
@@ -28,7 +28,7 @@ void ui_set_title(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)());
+void ui_set_mouse_press_listener(void (*event)(UIMouseButtonPressed *));
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 7a325ce..cd35edf 100644
--- a/src/main/engine/ui/x11/ui.c
+++ b/src/main/engine/ui/x11/ui.c
@@ -35,7 +35,7 @@ static int close_window = 0;
void (*on_loop_event)();
void (*on_expose_event)();
void (*on_resize_event)(UIEventResize *);
-void (*on_mouse_press_event)();
+void (*on_mouse_press_event)(UIMouseButtonPressed *);
void (*on_generic_event)(int);
void cleanup(void);
@@ -156,11 +156,27 @@ ui_on_keypress(XEvent event)
}
static void
+ui_get_mouse_position(Display *display, Window window, int *x, int *y) {
+ Window root_return, child_return;
+ int root_x, root_y;
+ unsigned int mask_return;
+
+ XQueryPointer(display, window, &root_return, &child_return,
+ &root_x, &root_y, x, y, &mask_return);
+}
+
+static void
ui_on_mouse_press(XEvent event)
{
if (event.type != ButtonPress) return;
if (on_mouse_press_event != NULL) {
- on_mouse_press_event();
+ UIMouseButtonPressed *mbp = malloc(sizeof(UIMouseButtonPressed));
+ if (mbp == NULL) {
+ log_error("Error allocating UIMouseButtonPressed");
+ exit(EXIT_FAILURE);
+ }
+ ui_get_mouse_position(display, window, &mbp->x, &mbp->y);
+ on_mouse_press_event(mbp);
}
}
@@ -197,7 +213,7 @@ ui_set_resize_listener(void (*resize_event)(UIEventResize *))
}
void
-ui_set_mouse_press_listener(void (*mouse_press_event)())
+ui_set_mouse_press_listener(void (*mouse_press_event)(UIMouseButtonPressed *))
{
on_mouse_press_event = mouse_press_event;
}