diff --git a/src/core/core_string.h b/src/core/core_string.h index ebe23ae..1c68119 100644 --- a/src/core/core_string.h +++ b/src/core/core_string.h @@ -75,6 +75,9 @@ fn f64 f64_from_s8(s8_t string); #define s8_invalid s8_lit("") #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) diff --git a/src/ui/ui.c b/src/ui/ui.c index ab20865..468ebf3 100644 --- a/src/ui/ui.c +++ b/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); diff --git a/src/wasm_app/main.c b/src/wasm_app/main.c index 1f8ccea..1829757 100644 --- a/src/wasm_app/main.c +++ b/src/wasm_app/main.c @@ -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); diff --git a/src/wasm_app/wasm_app.gen.c b/src/wasm_app/wasm_app.gen.c index 7335349..000b8d6 100644 --- a/src/wasm_app/wasm_app.gen.c +++ b/src/wasm_app/wasm_app.gen.c @@ -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}, diff --git a/src/wasm_app/wasm_app.meta.c b/src/wasm_app/wasm_app.meta.c index f835531..51e7d67 100644 --- a/src/wasm_app/wasm_app.meta.c +++ b/src/wasm_app/wasm_app.meta.c @@ -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); }