diff options
author | 3gg <3gg@shellblade.net> | 2024-05-04 16:44:28 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2024-05-04 16:52:53 -0700 |
commit | af641426fad35cd857c1f14bda523db3d85a70cd (patch) | |
tree | 8a219b03aef0c80cac56cd6b88571a7a6988b35b /include |
Initial commit.
Diffstat (limited to 'include')
-rw-r--r-- | include/ui.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/include/ui.h b/include/ui.h new file mode 100644 index 0000000..43bb2e7 --- /dev/null +++ b/include/ui.h | |||
@@ -0,0 +1,136 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include <stdbool.h> | ||
4 | #include <stdint.h> | ||
5 | |||
6 | typedef uint8_t uiChannel; | ||
7 | |||
8 | typedef struct uiPixel { | ||
9 | uiChannel r, g, b, a; | ||
10 | } uiPixel; | ||
11 | |||
12 | typedef struct uiSize { | ||
13 | int width; | ||
14 | int height; | ||
15 | } uiSize; | ||
16 | |||
17 | /// A UI surface to which widgets are rendered. | ||
18 | typedef struct uiSurface { | ||
19 | int width; | ||
20 | int height; | ||
21 | uiPixel* pixels; | ||
22 | } uiSurface; | ||
23 | |||
24 | /// Rectangle. | ||
25 | /// (x,y) is the top-left corner. | ||
26 | typedef struct uiRect { | ||
27 | int x; | ||
28 | int y; | ||
29 | int width; | ||
30 | int height; | ||
31 | } uiRect; | ||
32 | |||
33 | /// Point. | ||
34 | typedef struct uiPoint { | ||
35 | int x; | ||
36 | int y; | ||
37 | } uiPoint; | ||
38 | |||
39 | /// Widget type. | ||
40 | typedef enum uiWidgetType { | ||
41 | uiTypeButton, | ||
42 | uiTypeFrame, | ||
43 | uiTypeLabel, | ||
44 | uiTypeTable, | ||
45 | uiTypeMax, | ||
46 | } uiWidgetType; | ||
47 | |||
48 | typedef struct uiButton uiButton; | ||
49 | typedef struct uiFrame uiFrame; | ||
50 | typedef struct uiLabel uiLabel; | ||
51 | typedef struct uiTable uiTable; | ||
52 | typedef struct uiWidget uiWidget; | ||
53 | |||
54 | /// Widget pointer. | ||
55 | typedef struct uiWidgetPtr { | ||
56 | uiWidgetType type; | ||
57 | union { | ||
58 | uiButton* button; | ||
59 | uiFrame* frame; | ||
60 | uiLabel* label; | ||
61 | uiTable* table; | ||
62 | uiWidget* widget; | ||
63 | }; | ||
64 | } uiWidgetPtr; | ||
65 | |||
66 | // ----------------------------------------------------------------------------- | ||
67 | // Library. | ||
68 | |||
69 | /// Initialize the UI library. | ||
70 | /// This should be called once during application startup. | ||
71 | bool uiInit(void); | ||
72 | |||
73 | /// Shutdown the UI library. | ||
74 | /// This should be called once during application shutdown. | ||
75 | void uiShutdown(void); | ||
76 | |||
77 | // ----------------------------------------------------------------------------- | ||
78 | // Widget. | ||
79 | |||
80 | uiWidgetPtr uiMakeButtonPtr(uiButton*); | ||
81 | uiWidgetPtr uiMakeFramePtr(uiFrame*); | ||
82 | uiWidgetPtr uiMakeLabelPtr(uiLabel*); | ||
83 | uiWidgetPtr uiMakeTablePtr(uiTable*); | ||
84 | |||
85 | void uiWidgetSetParent(uiWidgetPtr child, uiWidgetPtr parent); | ||
86 | |||
87 | // ----------------------------------------------------------------------------- | ||
88 | // Button. | ||
89 | |||
90 | /// Create a button. | ||
91 | uiButton* uiMakeButton(const char* text); | ||
92 | |||
93 | // ----------------------------------------------------------------------------- | ||
94 | // Frame. | ||
95 | |||
96 | /// Create a frame. | ||
97 | uiFrame* uiMakeFrame(void); | ||
98 | |||
99 | /// Destroy the frame. | ||
100 | void uiDestroyFrame(uiFrame**); | ||
101 | |||
102 | /// Resize the frame. | ||
103 | void uiResizeFrame(uiFrame*, int width, int height); | ||
104 | |||
105 | /// Get the frame's dimensions. | ||
106 | uiSize uiGetFrameSize(const uiFrame*); | ||
107 | |||
108 | // ----------------------------------------------------------------------------- | ||
109 | // Label. | ||
110 | |||
111 | /// Create a label. | ||
112 | uiLabel* uiMakeLabel(const char* text); | ||
113 | |||
114 | // ----------------------------------------------------------------------------- | ||
115 | // Table. | ||
116 | |||
117 | /// Create a table. | ||
118 | uiTable* uiMakeTable(int rows, int cols, const char** header); | ||
119 | |||
120 | /// Add a row. | ||
121 | void uiTableAddRow(uiTable*, const char** row); | ||
122 | |||
123 | /// Set the table's cell. | ||
124 | void uiTableSet(uiTable*, int row, int col, uiWidgetPtr widget); | ||
125 | |||
126 | /// Get the table's cell. | ||
127 | const uiWidget* uiTableGet(const uiTable*, int row, int col); | ||
128 | |||
129 | /// Get the table's cell. | ||
130 | uiWidget* uiTableGetMut(uiTable*, int row, int col); | ||
131 | |||
132 | // ----------------------------------------------------------------------------- | ||
133 | // Rendering. | ||
134 | |||
135 | /// Render the frame. | ||
136 | void uiRender(const uiFrame*, uiSurface*); | ||