summaryrefslogtreecommitdiff
path: root/include/ui.h
blob: 43bb2e7f27457885993120c4000d9055352a164e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#pragma once

#include <stdbool.h>
#include <stdint.h>

typedef uint8_t uiChannel;

typedef struct uiPixel {
  uiChannel r, g, b, a;
} uiPixel;

typedef struct uiSize {
  int width;
  int height;
} uiSize;

/// A UI surface to which widgets are rendered.
typedef struct uiSurface {
  int      width;
  int      height;
  uiPixel* pixels;
} uiSurface;

/// Rectangle.
/// (x,y) is the top-left corner.
typedef struct uiRect {
  int x;
  int y;
  int width;
  int height;
} uiRect;

/// Point.
typedef struct uiPoint {
  int x;
  int y;
} uiPoint;

/// Widget type.
typedef enum uiWidgetType {
  uiTypeButton,
  uiTypeFrame,
  uiTypeLabel,
  uiTypeTable,
  uiTypeMax,
} uiWidgetType;

typedef struct uiButton uiButton;
typedef struct uiFrame  uiFrame;
typedef struct uiLabel  uiLabel;
typedef struct uiTable  uiTable;
typedef struct uiWidget uiWidget;

/// Widget pointer.
typedef struct uiWidgetPtr {
  uiWidgetType type;
  union {
    uiButton* button;
    uiFrame*  frame;
    uiLabel*  label;
    uiTable*  table;
    uiWidget* widget;
  };
} uiWidgetPtr;

// -----------------------------------------------------------------------------
// Library.

/// Initialize the UI library.
/// This should be called once during application startup.
bool uiInit(void);

/// Shutdown the UI library.
/// This should be called once during application shutdown.
void uiShutdown(void);

// -----------------------------------------------------------------------------
// Widget.

uiWidgetPtr uiMakeButtonPtr(uiButton*);
uiWidgetPtr uiMakeFramePtr(uiFrame*);
uiWidgetPtr uiMakeLabelPtr(uiLabel*);
uiWidgetPtr uiMakeTablePtr(uiTable*);

void uiWidgetSetParent(uiWidgetPtr child, uiWidgetPtr parent);

// -----------------------------------------------------------------------------
// Button.

/// Create a button.
uiButton* uiMakeButton(const char* text);

// -----------------------------------------------------------------------------
// Frame.

/// Create a frame.
uiFrame* uiMakeFrame(void);

/// Destroy the frame.
void uiDestroyFrame(uiFrame**);

/// Resize the frame.
void uiResizeFrame(uiFrame*, int width, int height);

/// Get the frame's dimensions.
uiSize uiGetFrameSize(const uiFrame*);

// -----------------------------------------------------------------------------
// Label.

/// Create a label.
uiLabel* uiMakeLabel(const char* text);

// -----------------------------------------------------------------------------
// Table.

/// Create a table.
uiTable* uiMakeTable(int rows, int cols, const char** header);

/// Add a row.
void uiTableAddRow(uiTable*, const char** row);

/// Set the table's cell.
void uiTableSet(uiTable*, int row, int col, uiWidgetPtr widget);

/// Get the table's cell.
const uiWidget* uiTableGet(const uiTable*, int row, int col);

/// Get the table's cell.
uiWidget* uiTableGetMut(uiTable*, int row, int col);

// -----------------------------------------------------------------------------
// Rendering.

/// Render the frame.
void uiRender(const uiFrame*, uiSurface*);