#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