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
|
/* Headers. */
#include <stdio.h>
#include <stdlib.h>
#include "microui.h"
#include "renderer.h"
#include "widget.h"
#include "ui.h"
/* Constants. */
static const char TITLE[] = "volute";
enum window {
WIN_OPTS = MU_OPT_NOINTERACT | MU_OPT_NOTITLE | MU_OPT_AUTOSIZE | MU_OPT_NOFRAME,
};
static const mu_Color BLACK = {0, 0, 0, 255};
static const mu_Color WHITE = {255, 255, 255, 255};
static const mu_Color LIGHT_GRAY = {222, 222, 222, 255};
static const mu_Color DARK_GRAY = {128, 128, 128, 255};
static const mu_Color COLOR_TEXT = BLACK;
static const mu_Color COLOR_BORDER = BLACK;
static const mu_Color COLOR_WINDOWBG = WHITE;
static const mu_Color COLOR_TITLEBG = LIGHT_GRAY;
static const mu_Color COLOR_TITLETEXT = COLOR_TEXT;
static const mu_Color COLOR_PANELBG = COLOR_WINDOWBG;
static const mu_Color COLOR_BUTTON = WHITE;
static const mu_Color COLOR_BUTTONHOVER = LIGHT_GRAY;
static const mu_Color COLOR_BUTTONFOCUS = DARK_GRAY;
static const mu_Color COLOR_BASE = WHITE;
static const mu_Color COLOR_BASEHOVER = COLOR_BASE;
static const mu_Color COLOR_BASEFOCUS = COLOR_BASE;
static const mu_Color COLOR_SCROLLBASE = WHITE;
static const mu_Color COLOR_SCROLLTHUMB = WHITE;
/* Function declarations. */
static void set_style(mu_Context *ctx);
static void main_loop(mu_Context *ctx, UI *ui);
static void process_frame(mu_Context *ctx, UI *ui);
static void main_window(mu_Context *ctx, UI *ui);
/* Function Definitions. */
int
main(void) {
/* Init microui. */
static mu_Context ctx;
mu_init(&ctx);
r_init(&ctx, TITLE);
set_style(&ctx);
/* Init data structures. */
static UI ui;
init_ui(&ui);
main_loop(&ctx, &ui);
return 0;
}
static void
set_style(mu_Context *ctx) {
ctx->style->colors[MU_COLOR_TEXT] = COLOR_TEXT;
ctx->style->colors[MU_COLOR_BORDER] = COLOR_BORDER;
ctx->style->colors[MU_COLOR_WINDOWBG] = COLOR_WINDOWBG;
ctx->style->colors[MU_COLOR_TITLEBG] = COLOR_TITLEBG;
ctx->style->colors[MU_COLOR_TITLETEXT] = COLOR_TITLETEXT;
ctx->style->colors[MU_COLOR_PANELBG] = COLOR_PANELBG;
ctx->style->colors[MU_COLOR_BUTTON] = COLOR_BUTTON;
ctx->style->colors[MU_COLOR_BUTTONHOVER] = COLOR_BUTTONHOVER;
ctx->style->colors[MU_COLOR_BUTTONFOCUS] = COLOR_BUTTONFOCUS;
ctx->style->colors[MU_COLOR_BASE] = COLOR_BASE;
ctx->style->colors[MU_COLOR_BASEHOVER] = COLOR_BASEHOVER;
ctx->style->colors[MU_COLOR_BASEFOCUS] = COLOR_BASEFOCUS;
ctx->style->colors[MU_COLOR_SCROLLBASE] = COLOR_SCROLLBASE;
ctx->style->colors[MU_COLOR_SCROLLTHUMB] = COLOR_SCROLLTHUMB;
}
static void
main_loop(mu_Context *ctx, UI *ui) {
for (;;) {
r_input(ctx);
process_frame(ctx, ui);
r_render(ctx);
}
}
static void
process_frame(mu_Context *ctx, UI *ui) {
mu_begin(ctx);
main_window(ctx, ui);
mu_end(ctx);
}
static void
main_window(mu_Context *ctx, UI *ui) {
int w, h;
r_get_window_size(&w, &h);
if (!mu_begin_window_ex(ctx, TITLE, mu_rect(0, 0, w, h), WIN_OPTS)) {
exit(EXIT_FAILURE);
}
/* TODO */
mu_layout_row(ctx, 3, (int[]) {128, 30, 20}, 0);
static double value = 0.0;
if (w_field(ctx, &ui->displacement) & MU_RES_CHANGE) {
/* TODO */
value = ui->displacement.value;
}
if (w_select(ctx, &ui->displacement_unit) & MU_RES_CHANGE) {
/* TODO */
}
mu_layout_begin_column(ctx);
mu_button(ctx, "foo bar");
mu_layout_end_column(ctx);
mu_end_window(ctx);
}
|