cepheid

An Aurora 4X clone
Log | Files | Refs | README

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:
Msrc/gui.c | 34+++++++++++++---------------------
Msrc/main.h | 3+--
Msrc/pane.c | 4++--
Msrc/struct.h | 7+++++++
Msrc/ui.c | 19+++++++++----------
Msrc/views/bodies.c | 1-
Msrc/views/main.c | 19++++++++-----------
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)); }