minor improvements
This commit is contained in:
@@ -75,6 +75,9 @@ fn f64 f64_from_s8(s8_t string);
|
||||
#define s8_invalid s8_lit("<INVALID>")
|
||||
#define s8_lit(string) (s8_t){(char *)string, sizeof(string) - 1}
|
||||
#define s8_const_lit(string) { string, sizeof(string) - 1 }
|
||||
#define s8_struct(DATA) (s8_t){.str = (char *)&(DATA), .len = sizeof(DATA)}
|
||||
#define s8_array(DATA) (s8_t){.str = (char *)(DATA), .len = lengthof(DATA)}
|
||||
#define s8_array_lit(DATA) {.str = (char *)(DATA), .len = lengthof(DATA)}
|
||||
fn s8_t s8_from_range(char *begin, char *end);
|
||||
fn s8_t s8_from_char(char *string);
|
||||
fn s8_t s8_copy(ma_arena_t *ma, s8_t string);
|
||||
@@ -156,8 +159,6 @@ void *sbin_read_data(stream_t *stream, i64 size);
|
||||
//
|
||||
// other
|
||||
#define s8_fmtspec(string) (int)(string).len, (string).str
|
||||
#define s8_struct(DATA) (s8_t){.str = (char *)&(DATA), .len = sizeof(DATA)}
|
||||
#define s8_array(DATA) (s8_t){.str = (char *)(DATA), .len = lengthof(DATA)}
|
||||
#define S8_CODE(...) s8_lit(#__VA_ARGS__)
|
||||
#define S8_FILE s8_lit(__FILE__)
|
||||
#define S8_FILE_AND_LINE s8_lit(FILE_AND_LINE)
|
||||
|
||||
52
src/ui/ui.c
52
src/ui/ui.c
@@ -181,14 +181,6 @@ fn ui_signal_t ui__button(ui_code_loc_t loc, char *str, ...) {
|
||||
return signal;
|
||||
}
|
||||
|
||||
#define ui_list_button(...) ui__list_button(UILOC, __VA_ARGS__)
|
||||
fn ui_signal_t ui__list_button(ui_code_loc_t loc, char *str, ...) {
|
||||
S8_FMT(tcx.temp, str, string);
|
||||
ui_box_t *box = ui_build_box_from_string(loc, (ui_box_flags_t){ .draw_text = true }, string);
|
||||
ui_signal_t signal = ui_signal_from_box(box);
|
||||
return signal;
|
||||
}
|
||||
|
||||
#define ui_label(...) ui__label(UILOC, __VA_ARGS__)
|
||||
fn ui_box_t *ui__label(ui_code_loc_t loc, char *str, ...) {
|
||||
S8_FMT(tcx.temp, str, string);
|
||||
@@ -267,7 +259,7 @@ fn void ui__draw_box(app_frame_t *frame, ui_box_t *box) {
|
||||
}
|
||||
if (ui_is_active_box(box)) {
|
||||
rect_color = accent1_color_global;
|
||||
text_color = accent1_color_global;
|
||||
text_color = white_color_global;
|
||||
}
|
||||
|
||||
if (box->flags.draw_rect) {
|
||||
@@ -320,7 +312,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
switch(type->kind) {
|
||||
case type_kind_i8: {
|
||||
i8 *n = (i8 *)p;
|
||||
if (ui_list_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (i8)delta;
|
||||
}
|
||||
@@ -328,7 +320,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_i16: {
|
||||
i16 *n = (i16 *)p;
|
||||
if (ui_list_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (i16)delta;
|
||||
}
|
||||
@@ -336,7 +328,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_i32: {
|
||||
i32 *n = (i32 *)p;
|
||||
if (ui_list_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (i32)delta;
|
||||
}
|
||||
@@ -344,7 +336,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_i64: {
|
||||
i64 *n = (i64 *)p;
|
||||
if (ui_list_button("%S: %lld##slider%S", name, (long long)*n, name).dragging) {
|
||||
if (ui_button("%S: %lld##slider%S", name, (long long)*n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (i64)delta;
|
||||
}
|
||||
@@ -352,7 +344,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_u8: {
|
||||
u8 *n = (u8 *)p;
|
||||
if (ui_list_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (u8)delta;
|
||||
}
|
||||
@@ -360,7 +352,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_u16: {
|
||||
u16 *n = (u16 *)p;
|
||||
if (ui_list_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (u16)delta;
|
||||
}
|
||||
@@ -368,7 +360,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_u32: {
|
||||
u32 *n = (u32 *)p;
|
||||
if (ui_list_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %u##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (u32)delta;
|
||||
}
|
||||
@@ -376,7 +368,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_u64: {
|
||||
u64 *n = (u64 *)p;
|
||||
if (ui_list_button("%S: %llu##slider%S", name, (unsigned long long)*n, name).dragging) {
|
||||
if (ui_button("%S: %llu##slider%S", name, (unsigned long long)*n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (u64)delta;
|
||||
}
|
||||
@@ -384,35 +376,35 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_b8: {
|
||||
b8 *n = (b8 *)p;
|
||||
if (ui_list_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
if (ui_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
*n = !*n;
|
||||
}
|
||||
return;
|
||||
} break;
|
||||
case type_kind_b16: {
|
||||
b16 *n = (b16 *)p;
|
||||
if (ui_list_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
if (ui_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
*n = !*n;
|
||||
}
|
||||
return;
|
||||
} break;
|
||||
case type_kind_b32: {
|
||||
b32 *n = (b32 *)p;
|
||||
if (ui_list_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
if (ui_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
*n = !*n;
|
||||
}
|
||||
return;
|
||||
} break;
|
||||
case type_kind_b64: {
|
||||
b64 *n = (b64 *)p;
|
||||
if (ui_list_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
if (ui_button("%S: %s", name, *n ? "true" : "false").clicked) {
|
||||
*n = !*n;
|
||||
}
|
||||
return;
|
||||
} break;
|
||||
case type_kind_f32: {
|
||||
f32 *n = (f32 *)p;
|
||||
if (ui_list_button("%S: %f##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %f##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += delta;
|
||||
}
|
||||
@@ -420,7 +412,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_f64: {
|
||||
f64 *n = (f64 *)p;
|
||||
if (ui_list_button("%S: %f##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %f##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += delta;
|
||||
}
|
||||
@@ -428,7 +420,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_isize: {
|
||||
isize *n = (isize *)p;
|
||||
if (ui_list_button("%S: %lld##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %lld##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (isize)delta;
|
||||
}
|
||||
@@ -436,7 +428,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_usize: {
|
||||
usize *n = (usize *)p;
|
||||
if (ui_list_button("%S: %llu##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %llu##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (usize)delta;
|
||||
}
|
||||
@@ -444,7 +436,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_int: {
|
||||
int *n = (int *)p;
|
||||
if (ui_list_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %d##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (int)delta;
|
||||
}
|
||||
@@ -452,7 +444,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
} break;
|
||||
case type_kind_char: {
|
||||
char *n = (char *)p;
|
||||
if (ui_list_button("%S: %c##slider%S", name, *n, name).dragging) {
|
||||
if (ui_button("%S: %c##slider%S", name, *n, name).dragging) {
|
||||
f32 delta = ui->event->mouse_delta.x;
|
||||
n[0] += (char)delta;
|
||||
}
|
||||
@@ -468,7 +460,7 @@ fn void ui_serial_subtype(void *p, type_t *type, s8_t name) {
|
||||
if (type->kind == type_kind_enum) {
|
||||
i64 value = ti_enum_read_value(p, type);
|
||||
s8_t string_value = ti_enum_value_to_name(value, type);
|
||||
if (ui_list_button("%S: %S = %S", name, type->name, string_value).clicked) {
|
||||
if (ui_button("%S: %S = %S", name, type->name, string_value).clicked) {
|
||||
i64 new_value = ti_enum_next_value(p, value, type);
|
||||
ti_enum_write_value(p, new_value, type);
|
||||
}
|
||||
@@ -527,12 +519,12 @@ fn void ui_demo_update(app_frame_t *frame) {
|
||||
|
||||
if (tweak->type->kind == type_kind_b32) {
|
||||
b32 *n = (b32 *)tweak->ptr;
|
||||
if (ui_list_button("%S: %s##slider%S", tweak->name, *n ? "true" : "false", tweak->name).clicked) {
|
||||
if (ui_button("%S: %s##slider%S", tweak->name, *n ? "true" : "false", tweak->name).clicked) {
|
||||
*n = !*n;
|
||||
}
|
||||
} else if (tweak->type->kind == type_kind_f32) {
|
||||
f32 *n = (f32 *)tweak->ptr;
|
||||
ui_signal_t signal = ui_list_button("%S: %f##slider%S", tweak->name, *n, tweak->name);
|
||||
ui_signal_t signal = ui_button("%S: %f##slider%S", tweak->name, *n, tweak->name);
|
||||
if (signal.dragging) {
|
||||
f32 size = tweak->max - tweak->min;
|
||||
v2f32_t string_size = rn_measure_string(rn_state.main_font, signal.box->string);
|
||||
|
||||
@@ -24,24 +24,23 @@
|
||||
#include "render/font.c"
|
||||
#include "render/render_opengl.c"
|
||||
#include "wasm_app.gen.c"
|
||||
|
||||
#include "ui/ui_iter.c"
|
||||
#include "ui/ui.c"
|
||||
|
||||
fn void app_init(f32 dpr) {
|
||||
ma_arena_t *perm = &tcx._perm;
|
||||
mt_embed_file(font_liberation_mono, "package/liberation-mono.ttf");
|
||||
mt_embed_file(font_data, "package/liberation-mono.ttf");
|
||||
mt_tweak_f32(font_size, 50, 4, 200);
|
||||
mt_tweak_f32(_font_size, 50, 50, 50);
|
||||
|
||||
rn_init(perm, s8_array(font_liberation_mono), font_size * dpr);
|
||||
rn_init(perm, font_data, font_size * dpr);
|
||||
ui_demo_init(perm);
|
||||
}
|
||||
|
||||
fn b32 app_update(app_frame_t *frame) {
|
||||
if (!f32_are_equal(font_size, _font_size)) {
|
||||
_font_size = font_size;
|
||||
rn_reload_font(s8_array(font_liberation_mono), font_size);
|
||||
rn_reload_font(font_data, font_size);
|
||||
debugf("reloading font");
|
||||
}
|
||||
ui_demo_update(frame);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
u8 font_liberation_mono[] = {
|
||||
gb_read_only u8 font_data_data[] = {
|
||||
0,1,0,0,0,16,1,0,0,4,0,0,70,70,84,77,81,159,21,185,0,1,166,108,0,0,0,28,71,68,69,70,2,208,0,36,0,1,166,68,0,0,0,40,79,83,47,50,249,32,119,56,0,0,1,136,0,0,0,96,99,109,97,112,
|
||||
86,141,58,69,0,0,7,52,0,0,6,214,99,118,116,32,77,22,94,181,0,0,25,128,0,0,2,60,102,112,103,109,115,211,35,176,0,0,14,12,0,0,7,5,103,97,115,112,0,24,0,9,0,1,166,52,0,0,0,16,103,108,121,102,
|
||||
110,248,53,199,0,0,33,0,0,1,104,60,104,101,97,100,249,30,158,54,0,0,1,12,0,0,0,54,104,104,101,97,11,89,2,89,0,0,1,68,0,0,0,36,104,109,116,120,185,156,200,204,0,0,1,232,0,0,5,74,108,111,99,97,
|
||||
@@ -1691,9 +1691,10 @@ u8 font_liberation_mono[] = {
|
||||
255,255,0,3,0,1,0,0,0,14,0,0,0,24,0,32,0,0,0,2,0,1,0,1,2,160,0,1,0,4,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,201,137,111,49,0,0,0,0,189,118,137,36,
|
||||
0,0,0,0,202,159,29,99,
|
||||
};
|
||||
gb_read_only s8_t font_data = s8_array_lit(font_data_data);
|
||||
gb f32 font_size = 50;
|
||||
gb f32 _font_size = 50;
|
||||
mt_tweak_t tweak_table[] = {
|
||||
gb_read_only mt_tweak_t tweak_table[] = {
|
||||
{type(f32), s8_const_lit("font_size"), &font_size, 4, 200},
|
||||
{type(f32), s8_const_lit("_font_size"), &_font_size, 50, 50},
|
||||
|
||||
|
||||
@@ -29,7 +29,10 @@ void mt_wasm_app(ma_arena_t *arena) {
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
s8_t relpath = s8_printf(arena, "../%S", path->string);
|
||||
s8_t content = OS_ReadFile(&Perm, relpath);
|
||||
cg_byte_array_from_data_ex(sb_embeds, content, var_name->string);
|
||||
|
||||
sb8_printf(sb_embeds, "gb_read_only ");
|
||||
cg_byte_array_from_data_ex(sb_embeds, content, s8_printf(arena, "%S_data", var_name->string));
|
||||
sb8_printf(sb_embeds, "gb_read_only s8_t %S = s8_array_lit(%S_data);\n", var_name->string, var_name->string);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
@@ -71,7 +74,7 @@ void mt_wasm_app(ma_arena_t *arena) {
|
||||
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||
sb8_printf(sb_embeds, "gb %S %S = %S;\n", it->type->name, it->name, it->value);
|
||||
}
|
||||
sb8_printf(sb_embeds, "mt_tweak_t tweak_table[] = {\n");
|
||||
sb8_printf(sb_embeds, "gb_read_only mt_tweak_t tweak_table[] = {\n");
|
||||
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||
sb8_printf(sb_embeds, "{type(%S), s8_const_lit(\"%S\"), &%S, %S, %S},\n", it->type->name, it->name, it->name, it->min, it->max);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user