diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/ui.h | 124 |
1 files changed, 116 insertions, 8 deletions
diff --git a/include/ui.h b/include/ui.h index 43bb2e7..8570552 100644 --- a/include/ui.h +++ b/include/ui.h | |||
| @@ -36,6 +36,9 @@ typedef struct uiPoint { | |||
| 36 | int y; | 36 | int y; |
| 37 | } uiPoint; | 37 | } uiPoint; |
| 38 | 38 | ||
| 39 | /// Widget ID. | ||
| 40 | typedef int uiWidgetId; | ||
| 41 | |||
| 39 | /// Widget type. | 42 | /// Widget type. |
| 40 | typedef enum uiWidgetType { | 43 | typedef enum uiWidgetType { |
| 41 | uiTypeButton, | 44 | uiTypeButton, |
| @@ -52,7 +55,7 @@ typedef struct uiTable uiTable; | |||
| 52 | typedef struct uiWidget uiWidget; | 55 | typedef struct uiWidget uiWidget; |
| 53 | 56 | ||
| 54 | /// Widget pointer. | 57 | /// Widget pointer. |
| 55 | typedef struct uiWidgetPtr { | 58 | typedef struct uiPtr { |
| 56 | uiWidgetType type; | 59 | uiWidgetType type; |
| 57 | union { | 60 | union { |
| 58 | uiButton* button; | 61 | uiButton* button; |
| @@ -61,7 +64,77 @@ typedef struct uiWidgetPtr { | |||
| 61 | uiTable* table; | 64 | uiTable* table; |
| 62 | uiWidget* widget; | 65 | uiWidget* widget; |
| 63 | }; | 66 | }; |
| 64 | } uiWidgetPtr; | 67 | } uiPtr; |
| 68 | |||
| 69 | /// Mouse button. | ||
| 70 | typedef enum uiMouseButton { | ||
| 71 | uiLMB, | ||
| 72 | uiRMB, | ||
| 73 | uiMouseButtonMax, | ||
| 74 | } uiMouseButton; | ||
| 75 | |||
| 76 | /// Mouse button state. | ||
| 77 | typedef enum uiMouseButtonState { | ||
| 78 | uiMouseUp, | ||
| 79 | uiMouseDown, | ||
| 80 | } uiMouseButtonState; | ||
| 81 | |||
| 82 | /// Mouse button event. | ||
| 83 | typedef struct uiMouseButtonEvent { | ||
| 84 | uiMouseButton button; | ||
| 85 | uiMouseButtonState state; | ||
| 86 | uiPoint mouse_position; | ||
| 87 | } uiMouseButtonEvent; | ||
| 88 | |||
| 89 | /// Mouse click event. | ||
| 90 | typedef struct uiMouseClickEvent { | ||
| 91 | uiMouseButton button; | ||
| 92 | uiPoint mouse_position; | ||
| 93 | } uiMouseClickEvent; | ||
| 94 | |||
| 95 | /// Mouse scroll event. | ||
| 96 | typedef struct uiMouseScrollEvent { | ||
| 97 | uiPoint mouse_position; | ||
| 98 | int scroll_offset; /// Positive = down; negative = up. | ||
| 99 | } uiMouseScrollEvent; | ||
| 100 | |||
| 101 | /// Input event type. | ||
| 102 | typedef enum uiInputEventType { | ||
| 103 | uiEventMouseButton, | ||
| 104 | uiEventMouseClick, | ||
| 105 | uiEventMouseScroll, | ||
| 106 | } uiInputEventType; | ||
| 107 | |||
| 108 | /// Input event. | ||
| 109 | typedef struct uiInputEvent { | ||
| 110 | uiInputEventType type; | ||
| 111 | union { | ||
| 112 | uiMouseButtonEvent mouse_button; | ||
| 113 | uiMouseClickEvent mouse_click; | ||
| 114 | uiMouseScrollEvent mouse_scroll; | ||
| 115 | }; | ||
| 116 | } uiInputEvent; | ||
| 117 | |||
| 118 | /// Table click event. | ||
| 119 | typedef struct uiTableClickEvent { | ||
| 120 | int col; | ||
| 121 | int row; | ||
| 122 | } uiTableClickEvent; | ||
| 123 | |||
| 124 | /// UI event type. | ||
| 125 | typedef enum uiWidgetEventType { | ||
| 126 | uiWidgetEventClick, | ||
| 127 | } uiWidgetEventType; | ||
| 128 | |||
| 129 | /// UI event. | ||
| 130 | /// These are events from the UI widgets back to the client application. | ||
| 131 | typedef struct uiWidgetEvent { | ||
| 132 | uiWidgetEventType type; | ||
| 133 | uiPtr widget; | ||
| 134 | union { | ||
| 135 | uiTableClickEvent table_click; | ||
| 136 | }; | ||
| 137 | } uiWidgetEvent; | ||
| 65 | 138 | ||
| 66 | // ----------------------------------------------------------------------------- | 139 | // ----------------------------------------------------------------------------- |
| 67 | // Library. | 140 | // Library. |
| @@ -75,14 +148,24 @@ bool uiInit(void); | |||
| 75 | void uiShutdown(void); | 148 | void uiShutdown(void); |
| 76 | 149 | ||
| 77 | // ----------------------------------------------------------------------------- | 150 | // ----------------------------------------------------------------------------- |
| 151 | // Widget pointers. | ||
| 152 | |||
| 153 | uiPtr uiMakeButtonPtr(uiButton*); | ||
| 154 | uiPtr uiMakeFramePtr(uiFrame*); | ||
| 155 | uiPtr uiMakeLabelPtr(uiLabel*); | ||
| 156 | uiPtr uiMakeTablePtr(uiTable*); | ||
| 157 | |||
| 158 | uiButton* uiGetButtonPtr(uiPtr ptr); | ||
| 159 | uiFrame* uiGetFramePtr(uiPtr ptr); | ||
| 160 | uiLabel* uiGetLabelPtr(uiPtr ptr); | ||
| 161 | uiTable* uiGetTablePtr(uiPtr ptr); | ||
| 162 | |||
| 163 | // ----------------------------------------------------------------------------- | ||
| 78 | // Widget. | 164 | // Widget. |
| 79 | 165 | ||
| 80 | uiWidgetPtr uiMakeButtonPtr(uiButton*); | 166 | uiWidgetType uiWidgetGetType(const uiWidget*); |
| 81 | uiWidgetPtr uiMakeFramePtr(uiFrame*); | ||
| 82 | uiWidgetPtr uiMakeLabelPtr(uiLabel*); | ||
| 83 | uiWidgetPtr uiMakeTablePtr(uiTable*); | ||
| 84 | 167 | ||
| 85 | void uiWidgetSetParent(uiWidgetPtr child, uiWidgetPtr parent); | 168 | void uiWidgetSetParent(uiPtr child, uiPtr parent); |
| 86 | 169 | ||
| 87 | // ----------------------------------------------------------------------------- | 170 | // ----------------------------------------------------------------------------- |
| 88 | // Button. | 171 | // Button. |
| @@ -111,17 +194,24 @@ uiSize uiGetFrameSize(const uiFrame*); | |||
| 111 | /// Create a label. | 194 | /// Create a label. |
| 112 | uiLabel* uiMakeLabel(const char* text); | 195 | uiLabel* uiMakeLabel(const char* text); |
| 113 | 196 | ||
| 197 | /// Return the label's text. | ||
| 198 | const char* uiLabelGetText(const uiLabel*); | ||
| 199 | |||
| 114 | // ----------------------------------------------------------------------------- | 200 | // ----------------------------------------------------------------------------- |
| 115 | // Table. | 201 | // Table. |
| 116 | 202 | ||
| 117 | /// Create a table. | 203 | /// Create a table. |
| 118 | uiTable* uiMakeTable(int rows, int cols, const char** header); | 204 | uiTable* uiMakeTable(int rows, int cols, const char** header); |
| 119 | 205 | ||
| 206 | /// Clear the table. | ||
| 207 | /// This clears the contents, but not the header. | ||
| 208 | void uiTableClear(uiTable*); | ||
| 209 | |||
| 120 | /// Add a row. | 210 | /// Add a row. |
| 121 | void uiTableAddRow(uiTable*, const char** row); | 211 | void uiTableAddRow(uiTable*, const char** row); |
| 122 | 212 | ||
| 123 | /// Set the table's cell. | 213 | /// Set the table's cell. |
| 124 | void uiTableSet(uiTable*, int row, int col, uiWidgetPtr widget); | 214 | void uiTableSet(uiTable*, int row, int col, uiPtr widget); |
| 125 | 215 | ||
| 126 | /// Get the table's cell. | 216 | /// Get the table's cell. |
| 127 | const uiWidget* uiTableGet(const uiTable*, int row, int col); | 217 | const uiWidget* uiTableGet(const uiTable*, int row, int col); |
| @@ -134,3 +224,21 @@ uiWidget* uiTableGetMut(uiTable*, int row, int col); | |||
| 134 | 224 | ||
| 135 | /// Render the frame. | 225 | /// Render the frame. |
| 136 | void uiRender(const uiFrame*, uiSurface*); | 226 | void uiRender(const uiFrame*, uiSurface*); |
| 227 | |||
| 228 | // ----------------------------------------------------------------------------- | ||
| 229 | // UI Events. | ||
| 230 | |||
| 231 | /// Get the widget events. | ||
| 232 | /// Return the number of events in the returned array. | ||
| 233 | /// | ||
| 234 | /// This function clears the events recorded by the UI library since the last | ||
| 235 | /// input event. Subsequent calls to this function, with no further user input, | ||
| 236 | /// therefore report zero widget events. | ||
| 237 | int uiGetEvents(uiWidgetEvent const**); | ||
| 238 | |||
| 239 | // ----------------------------------------------------------------------------- | ||
| 240 | // User input. | ||
| 241 | |||
| 242 | /// Send an input event to the UI. | ||
| 243 | /// Return true if the UI requires a redraw. | ||
| 244 | bool uiSendEvent(uiFrame*, const uiInputEvent*); | ||
