From 205f7d49530e6c32ec0a09045d9cb45dcf9b1752 Mon Sep 17 00:00:00 2001 From: quou Date: Wed, 31 Jul 2024 22:12:48 +1000 Subject: GUI + map editor beginnings --- gui.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 gui.h (limited to 'gui.h') diff --git a/gui.h b/gui.h new file mode 100644 index 0000000..50927f4 --- /dev/null +++ b/gui.h @@ -0,0 +1,70 @@ +#ifndef gui_h +#define gui_h + +#include "rect.h" + +struct App; +struct Arena; +struct GUI; +struct Renderer; + +typedef enum { + gui_el_type_btn, + gui_el_type_scrollable +} GUI_El_Type; + +typedef struct GUI_El { + GUI_El_Type type; + struct GUI_El* next; + Rect r; +} GUI_El; + +typedef struct { + GUI_El el; + char* text; + int hover, active; +} GUI_Btn; + +typedef struct { + int x, y; +} GUI_Scroll_State; + +typedef void (*GUI_Scrollable_Draw_Fn)( + struct GUI*, + struct Renderer*, + const Rect*, + const GUI_Scroll_State* +); + +typedef struct { + GUI_El el; + GUI_Scrollable_Draw_Fn draw; + GUI_Scroll_State* ss; +} GUI_Scrollable; + +typedef struct GUI { + const struct App* app; + struct Arena* a; + GUI_El* first, * prev; + int cursor[2], pad; +} GUI; + +int gui_text_width(const char* text, int len); +int gui_text_height(void); + +void gui_begin(GUI* g, const struct App* app, struct Arena* a); +void gui_end(GUI* g, struct Renderer* r); +Rect gui_viewport(GUI* g); +Rect gui_cut_left(Rect* a, int v); +Rect gui_cut_right(Rect* a, int v); +Rect gui_cut_down(Rect* a, int v); +Rect gui_cut_up(Rect* a, int v); +int gui_btn(GUI* g, Rect r, const char* text); +void gui_scrollable( + GUI* g, + Rect r, + GUI_Scroll_State* state, + GUI_Scrollable_Draw_Fn fn +); + +#endif -- cgit v1.2.3-54-g00ecf