summaryrefslogtreecommitdiff
path: root/gui.h
diff options
context:
space:
mode:
Diffstat (limited to 'gui.h')
-rw-r--r--gui.h70
1 files changed, 70 insertions, 0 deletions
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