minor improvements

This commit is contained in:
Krzosa Karol
2025-01-18 12:19:22 +01:00
parent 9a70640a6e
commit b90656508b
5 changed files with 36 additions and 40 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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},

View File

@@ -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);
}