commit 72655e549f6fd17bf592243fa70649051da33ed6
parent ab45f999ca0b0c34caf10f1434b1066470cec2a8
Author: hhvn <dev@hhvn.uk>
Date: Tue, 15 Nov 2022 16:00:19 +0000
Store mouse position and scroll information in struct
Diffstat:
7 files changed, 40 insertions(+), 47 deletions(-)
diff --git a/src/gui.c b/src/gui.c
@@ -4,20 +4,15 @@
static Clickable clickable[CLICKABLE_MAX];
static int clickablei = 0;
-static void gui_click_tabs(Vector mouse,
- MouseButton button, Geom *geom, void *elem);
-static void gui_click_checkbox(Vector mouse,
- MouseButton button, Geom *geom, void *elem);
-static void gui_click_input(Vector mouse,
- MouseButton button, Geom *geom, void *elem);
-static void gui_click_dropdown(Vector mouse,
- MouseButton button, Geom *geom, void *elem);
-static void gui_click_treeview(Vector mouse,
- MouseButton button, Geom *geom, void *elem);
+static void gui_click_tabs(MouseButton button, Geom *geom, void *elem);
+static void gui_click_checkbox(MouseButton button, Geom *geom, void *elem);
+static void gui_click_input(MouseButton button, Geom *geom, void *elem);
+static void gui_click_dropdown(MouseButton button, Geom *geom, void *elem);
+static void gui_click_treeview(MouseButton button, Geom *geom, void *elem);
static void gui_key_input(void *elem, int *fcount);
-static void (*click_handlers[GUI_ELEMS])(Vector mouse,
+static void (*click_handlers[GUI_ELEMS])(
MouseButton button,
Geom *geom, void *elem) = {
[GUI_TAB] = gui_click_tabs,
@@ -50,14 +45,12 @@ gui_click_register(Geom geom, enum GuiElements type, void *elem) {
int
gui_click_handle(void) {
- Vector mouse;
MouseButton button;
Geom *geom;
int i;
int ret = 0;
int keepfocus = 0;
- mouse = GetMousePosition();
/* I wish there was a: int GetMouseButton(void) */
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
button = MOUSE_BUTTON_LEFT;
@@ -69,10 +62,9 @@ gui_click_handle(void) {
button = -1;
for (i = 0; i < clickablei; i++) {
- if (clickable[i].elem && ui_collides(clickable[i].geom, mouse)) {
+ if (clickable[i].elem && ui_collides(clickable[i].geom, mouse.vector)) {
geom = &clickable[i].geom;
- click_handlers[clickable[i].type](mouse,
- button, geom, clickable[i].elem);
+ click_handlers[clickable[i].type](button, geom, clickable[i].elem);
if (clickable[i].elem == focus.p)
keepfocus = 1;
ret = 1;
@@ -150,7 +142,7 @@ gui_tabs(int x, int y, int w, int h, Tabs *tabs) {
}
static void
-gui_click_tabs(Vector mouse, MouseButton button, Geom *geom, void *elem) {
+gui_click_tabs(MouseButton button, Geom *geom, void *elem) {
int ftabw, fw, fn;
int tabw, x, i;
Tabs *tabs = elem;
@@ -196,7 +188,7 @@ gui_checkbox(int x, int y, Checkbox *box) {
}
static void
-gui_click_checkbox(Vector mouse, MouseButton button, Geom *geom, void *elem) {
+gui_click_checkbox(MouseButton button, Geom *geom, void *elem) {
Checkbox *checkbox = elem;
if (button != MOUSE_BUTTON_LEFT)
@@ -238,7 +230,7 @@ gui_dropdown(int x, int y, int w, Dropdown *d) {
}
static void
-gui_click_dropdown(Vector mouse, MouseButton button, Geom *geom, void *elem) {
+gui_click_dropdown(MouseButton button, Geom *geom, void *elem) {
Dropdown *drop = elem;
int i;
@@ -282,7 +274,7 @@ gui_input(int x, int y, int w, Input *in) {
}
static void
-gui_click_input(Vector mouse, MouseButton button, Geom *geom, void *elem) {
+gui_click_input(MouseButton button, Geom *geom, void *elem) {
Input *input = elem;
int i;
@@ -378,7 +370,7 @@ gui_treeview(int x, int y, int w, int h, Treeview *tv) {
}
static void
-gui_click_treeview(Vector mouse, MouseButton button, Geom *geom, void *elem) {
+gui_click_treeview(MouseButton button, Geom *geom, void *elem) {
Treeview *tv = elem;
int depth;
Tree *p;
diff --git a/src/main.h b/src/main.h
@@ -82,7 +82,7 @@ extern void (*view_handlers[UI_VIEW_LAST])(int);
extern void (*view_drawers[UI_VIEW_LAST])(void);
extern Screen screen;
extern Focus focus;
-extern Vector mouse;
+extern Mouse mouse;
extern View_sys view_sys;
extern int charpx;
void ui_init(void);
@@ -94,7 +94,6 @@ void ui_print(int x, int y, Color col, char *format, ...);
void ui_printw(int x, int y, int w, Color col, char *format, ...);
void ui_title(char *fmt, ...);
int ui_textsize(char *text);
-float ui_get_scroll(void);
int ui_checkbox_size(Checkbox *checkbox);
int ui_collides(Geom geom, Vector point);
int ui_onscreen(Vector point);
diff --git a/src/pane.c b/src/pane.c
@@ -17,7 +17,7 @@ pane_begin(Pane *f) {
void
pane_end(void) {
Pane *f = pane;
- Vector m = GetMousePosition();
+ Vector m = mouse.vector;
if (!f) return;
@@ -36,7 +36,7 @@ pane_end(void) {
}
if (m.x >= f->geom->x && m.x <= f->geom->x + f->geom->w &&
m.y >= f->geom->y && m.y <= f->geom->y + f->geom->h)
- pane_scroll(f, ui_get_scroll() * SCROLL_MULT * -1);
+ pane_scroll(f, mouse.scroll * SCROLL_MULT * -1);
EndScissorMode();
}
diff --git a/src/struct.h b/src/struct.h
@@ -153,6 +153,13 @@ typedef struct {
Geom rect; /* for passing to functions */
} Screen;
+typedef struct {
+ Vector vector;
+ Vector delta;
+ int x, y;
+ int scroll;
+} Mouse;
+
#define TABS_MAX 16
typedef struct {
int n;
diff --git a/src/ui.c b/src/ui.c
@@ -28,7 +28,7 @@ void (*view_drawers[UI_VIEW_LAST])(void) = {
Screen screen = { 0 };
Focus focus = { 0 };
-Vector mouse = { 0 };
+Mouse mouse = { 0 };
Tabs view_tabs = {
/* Tactical is the terminology used in Aurora, so I decided to use it
@@ -95,7 +95,14 @@ ui_loop(void) {
ui_update_screen();
ui_keyboard_handle();
gui_click_handle();
- mouse = GetMousePosition();
+
+ mouse.vector = GetMousePosition();
+ mouse.delta = GetMouseDelta();
+ mouse.x = mouse.vector.x;
+ mouse.y = mouse.vector.y;
+ mouse.scroll = GetMouseWheelMove();
+ if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT))
+ mouse.scroll *= 2;
return 1;
}
@@ -156,14 +163,6 @@ ui_textsize(char *text) {
return charpx * strlen(text);
}
-float
-ui_get_scroll(void) {
- float ret = GetMouseWheelMove();
- if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT))
- ret *= 2;
- return ret;
-}
-
int
ui_collides(Geom geom, Vector point) {
switch (geom.type) {
diff --git a/src/views/bodies.c b/src/views/bodies.c
@@ -80,7 +80,6 @@ tree_printer(int x, int y, Treeview *tv, Tree *t) {
void
ui_handle_view_bodies(int nowsel) {
- Vector m = GetMousePosition();
Tree *t;
Body *body;
int pos, i;
diff --git a/src/views/main.c b/src/views/main.c
@@ -69,9 +69,7 @@ pxtokm(Vector vector) {
void
ui_handle_view_main(int nowsel) {
- Vector mouse = GetMousePosition();
- Vector delta = GetMouseDelta();
- float wheel = ui_get_scroll();
+ float wheel = mouse.scroll;
float diff;
Body *furth;
@@ -79,7 +77,7 @@ ui_handle_view_main(int nowsel) {
furth = view_main.sys->furthest_body;
#define SCROLL_DIVISOR 10
- if (!ui_collides(view_main.infobox.geom, mouse)) {
+ if (!ui_collides(view_main.infobox.geom, mouse.vector)) {
if (wheel) {
diff = wheel * (view_main.kmperpx/SCROLL_DIVISOR);
if (diff > 0 || !furth || view_main.kmperpx * GetScreenHeight() <
@@ -92,9 +90,9 @@ ui_handle_view_main(int nowsel) {
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
if (view_main.pan) {
- view_main.kmx -= delta.x * view_main.kmperpx;
- view_main.kmy -= delta.y * view_main.kmperpx;
- } else if (!ui_collides(view_main.infobox.geom, mouse)) {
+ view_main.kmx -= mouse.delta.x * view_main.kmperpx;
+ view_main.kmy -= mouse.delta.y * view_main.kmperpx;
+ } else if (!ui_collides(view_main.infobox.geom, mouse.vector)) {
view_main.pan = 1;
}
} else {
@@ -103,7 +101,7 @@ ui_handle_view_main(int nowsel) {
if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT) && !view_main.ruler.held) {
view_main.ruler.held = 1;
- view_main.ruler.origin = pxtokm(mouse);
+ view_main.ruler.origin = pxtokm(mouse.vector);
} else if (IsMouseButtonUp(MOUSE_BUTTON_RIGHT)) {
view_main.ruler.held = 0;
}
@@ -217,8 +215,7 @@ draw_body(Body *body) {
void
ui_draw_view_main(void) {
- Vector mouse = GetMousePosition();
- Vector mousekm = pxtokm(mouse);
+ Vector mousekm = pxtokm(mouse.vector);
Vector ruler;
Geom geom;
Tree *t;
@@ -248,7 +245,7 @@ ui_draw_view_main(void) {
/* ruler */
if (view_main.ruler.held) {
ruler = kmtopx(view_main.ruler.origin);
- ui_draw_line_v(ruler, mouse, 1, col_info);
+ ui_draw_line_v(ruler, mouse.vector, 1, col_info);
dist = ui_vectordist(view_main.ruler.origin, mousekm);
ui_print(mouse.x + PAD, mouse.y - PAD, col_info, "%s (%s)", strkm(dist), strly(dist));
}