begin prototype, transcript browser

This commit is contained in:
Krzosa Karol
2025-07-27 10:18:54 +02:00
parent c8a4d19a72
commit 6724814440
19 changed files with 165 additions and 263 deletions

View File

@@ -19,8 +19,7 @@
#include "src/app/app.meta.c"
#include "src/ui/ui.meta.c"
#include "src/render/render.meta.c"
#include "src/wasm_app/wasm_app.meta.c"
#include "src/text_editor/text_editor.meta.c"
#include "src/prototype/prototype.meta.c"
#include "src/testing/testing.meta.c"
void build_testing_target(void) {
@@ -69,26 +68,12 @@ void build_win32_app_base_target(void) {
if (ok != 0) exit(ok);
}
void build_text_editor_dll_target(void) {
if (!cache_code_modified(s8("../src/text_editor/text_editor_main.c"), s8("app.dll"))) {
return;
}
int ok = os_systemf(
"cl ../src/text_editor/text_editor_main.c -Fe:app.dll -Fd:app.pdb"
" -I ../src /DAPP_IS_DLL"
" /Zi /FC /nologo /Oi"
" /WX /W3 /wd4200 /diagnostics:column"
" /link /incremental:no /DEBUG:FULL /DLL"
);
if (ok != 0) exit(ok);
}
void build_prototype_dll_target(void) {
if (!cache_code_modified(s8("../src/wasm_app/main.c"), s8("app.dll"))) {
if (!cache_code_modified(s8("../src/prototype/main.c"), s8("app.dll"))) {
return;
}
int ok = os_systemf(
"cl ../src/wasm_app/main.c -Fe:app.dll -Fd:app.pdb"
"cl ../src/prototype/main.c -Fe:app.dll -Fd:app.pdb"
" -I ../src /DAPP_IS_DLL"
" /Zi /FC /nologo /Oi"
" /WX /W3 /wd4200 /diagnostics:column"
@@ -99,13 +84,13 @@ void build_prototype_dll_target(void) {
void build_prototype_wasm_target(void) {
b32 html_code_modified = cache_code_modified(s8("../src/app/app_wasm.html"), s8("../package/index.html"));
b32 wasm_code_modified = cache_code_modified(s8("../src/wasm_app/main.c"), s8("main.wasm"));
b32 wasm_code_modified = cache_code_modified(s8("../src/prototype/main.c"), s8("main.wasm"));
if (html_code_modified) {
os_copy("../src/app/app_wasm.html", "../package/index.html", os_copy_overwrite);
}
if (wasm_code_modified) {
int ok = os_systemf(
"clang ../src/wasm_app/main.c -o main.wasm"
"clang ../src/prototype/main.c -o main.wasm"
" -Oz -g -I../src"
" -Wall -Wno-missing-braces -Wno-single-bit-bitfield-constant-conversion -Wno-unsequenced -Wno-initializer-overrides"
" -fdiagnostics-absolute-paths -fdiagnostics-format=msvc"
@@ -118,12 +103,12 @@ void build_prototype_wasm_target(void) {
}
void build_prototype_standalone_target(void) {
if (!cache_code_modified(s8("../src/wasm_app/main.c"), s8("standalone_app.exe"))) {
if (!cache_code_modified(s8("../src/prototype/main.c"), s8("standalone_app.exe"))) {
return;
}
int ok = os_systemf(
"cl ../src/wasm_app/main.c -Fe:standalone_app.exe -Fd:standalone_app.pdb"
"cl ../src/prototype/main.c -Fe:standalone_app.exe -Fd:standalone_app.pdb"
" -I ../src"
" /Zi /FC /nologo /Oi"
" /WX /W3 /wd4200 /diagnostics:column"
@@ -159,15 +144,13 @@ int main(int argc, char **argv) {
generate_math_code(tcx->temp);
generate_ui_code(tcx->temp);
generate_app_code(tcx->temp);
generate_wasm_app_code(tcx->temp);
generate_prototype_code(tcx->temp);
generate_render_code(tcx->temp);
generate_testing_code(tcx->temp);
generate_text_editor_code(tcx->temp);
b32 run_win32_app_base_target = true;
b32 run_testing_target = true;
b32 run_text_editor_dll_target = true;
b32 run_prototype_dll_target = false;
b32 run_prototype_dll_target = true;
b32 run_prototype_wasm_target = false;
b32 run_prototype_standalone_target = false;
b32 run_server = false;
@@ -192,10 +175,6 @@ int main(int argc, char **argv) {
build_win32_app_base_target();
}
if (run_text_editor_dll_target) {
build_text_editor_dll_target();
}
if (run_prototype_wasm_target) {
build_prototype_wasm_target();
}

5
init.project.lua Normal file
View File

@@ -0,0 +1,5 @@
function CC(cmd)
Cmd { working_dir = GetProjectPath(), destination = "console", cmd = cmd }
end

View File

@@ -463,7 +463,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int n
w32_library_t lib = {0};
lib.dll_name = s8("app.dll");
lib.update_fn_name = s8("app_update");
tcx->data[tcx_slot_app] = w32_load_opengl_fn;
tcx->app_ctx = w32_load_opengl_fn;
// Set VSync
if (wglSwapIntervalEXT) {

View File

@@ -7,6 +7,7 @@ gb_thread thread_ctx_t global_thread_context = {
.log_proc = default_log_proc,
}
};
gb_thread thread_ctx_t *tcx;
fn void core_init(void) {
tcx = &global_thread_context;

View File

@@ -9,14 +9,12 @@ struct thread_ctx_t {
// and which functions have state
ma_arena_t perm;
void *data[32];
logger_t log;
};
void *app_ctx;
void *rn_ctx;
void *ui_ctx;
void *te_ctx;
enum {
tcx_slot_rn,
tcx_slot_ui,
tcx_slot_app,
logger_t log;
};
typedef enum {
@@ -36,5 +34,6 @@ fn alo_t malo(ma_arena_t *arena);
fn alo_t malot(ma_temp_t temp);
fn void dealloc(alo_t alo, void *ptr);
fn void *alloc_size(alo_t alo, size_t size);
fn int tcx_alloc_id(void);
gb_thread thread_ctx_t *tcx;
extern gb_thread thread_ctx_t *tcx;

View File

@@ -2884,7 +2884,7 @@ OS_API OS_Result os_write_file(S8_String path, S8_String string) {
OS_API int os_systemf(const char *string, ...) {
MA_Temp scratch = MA_GetScratch();
S8_FORMAT(scratch.arena, string, result);
IO_Printf("%.*s\n", S8_Expand(result));
// IO_Printf("%.*s\n", S8_Expand(result));
int error_code = system(result.str);
MA_ReleaseScratch(scratch);
return error_code;

View File

@@ -9,12 +9,13 @@
#include "render/render.c"
#include "ui/ui.c"
#include "wasm_app.gen.c"
#include "transcript_browser.c"
#include "prototype.gen.c"
fn_export b32 app_update(thread_ctx_t *thread_ctx, app_frame_t *frame) {
tcx = thread_ctx;
if (frame->first_event->kind == app_event_kind_init) {
run_all_tests();
// run_all_tests();
mt_tweak_f32(font_size, 30, 4, 200);
mt_tweak_f32(_font_size, 30, 30, 30);
@@ -36,6 +37,7 @@ fn_export b32 app_update(thread_ctx_t *thread_ctx, app_frame_t *frame) {
_font_size = font_size;
rn_reload_font(font_size, frame->dpr);
}
ui_demo_update(frame, tweak_table, lengthof(tweak_table));
// ui_demo_update(frame, tweak_table, lengthof(tweak_table));
transcript_browser_update(frame, tweak_table, lengthof(tweak_table));
return true;
}

View File

@@ -1,4 +1,4 @@
// automatically generated using: C:\dev\wasm\src/wasm_app/wasm_app.meta.c
// automatically generated using: C:\dev\wasm\src/prototype/prototype.meta.c
gb f32 font_size = 30;
gb f32 _font_size = 30;
gb_read_only mt_tweak_t tweak_table[] = {
@@ -12,4 +12,5 @@ void run_all_tests(void) {
test_intern_table();
test_array();
ui_test_text_replace();
buffer16_test();
}// run_all_tests()

View File

@@ -1,7 +1,7 @@
void generate_wasm_app_code(ma_arena_t *arena) {
void generate_prototype_code(ma_arena_t *arena) {
sb8_t *include_paths = sb8(arena);
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8("../src")));
mt_files_t files = mt_lex_files(arena, s8("../src/wasm_app/main.c"), include_paths);
mt_files_t files = mt_lex_files(arena, s8("../src/prototype/main.c"), include_paths);
typedef struct cg_tweak_t cg_tweak_t;
struct cg_tweak_t {

View File

@@ -0,0 +1,94 @@
fn void transcript_browser_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_count) {
ui_begin_frame(frame);
rn_begin_frame(frame);
s8_t cmds[] = {
s8("show data tab"),
s8("show log tab"),
s8("show menus tab"),
s8("show menus tab2"),
s8("show menus tab3"),
s8("show menus tab4"),
s8("show menus tab5"),
s8("show menus tab6"),
s8("show menus tab8"),
s8("show menus tab7"),
s8("show menus tab9"),
s8("show menus tab0"),
s8("show menus tab11"),
s8("show menus tab22"),
s8("show menus tab33"),
s8("show menus tab44"),
s8("show menus tab55"),
s8("show menus tab66"),
};
for (app_event_t *ev = frame->first_event; ev; ev = ev->next) {
ui_begin_build(UILOC, ev, window_rect_from_frame(frame));
locl b8 set_focus;
locl char buff[128];
locl ui_text_input_t text_input;
ui_signal_t text_input_sig;
text_input.str = buff;
text_input.cap = lengthof(buff);
ui_box_t *top_box = ui_box(.null_id = true, .rect = r2f32_cut_top(ui_top_rectp(), ui_em(1.0f)), .flags = {.draw_rect = true, .clip_rect = true});
ui_set_text_align(ui_text_align_left)
ui_set_lop(ui_lop_cut_top)
ui_set_top(top_box) {
text_input_sig = ui_text_input(&text_input, .sim_even_if_no_focus = true, .keyboard_nav = false);
}
ma_temp_t scratch = ma_begin_scratch();
s8_t needle = s8_make(text_input.str, text_input.len);
fuzzy_pair_t *pairs = s8_fuzzy_rate_array(scratch.arena, needle, cmds, lengthof(cmds));
if (text_input_sig.text_changed) {
set_focus = true;
}
ui_box_t *lister = ui_box(.null_id = true, .rect = r2f32_cut_top(ui_top_rectp(), ui_max), .flags = {.draw_rect = true, .clip_rect = true});
locl f32 verti_scroller_value;
ui_scroller_t scroller = ui_begin_scroller(UILOC, (ui_scroller_params_t){
.parent = lister,
.verti = {
.enabled = true,
.value = &verti_scroller_value,
.item_pixels = ui_em(1),
.item_count = (i32)lengthof(cmds),
},
});
ui_set_top(lister)
ui_set_string_pos_offset(ui_dm(1)) {
ui_cut_top_scroller_offset(scroller);
for (i32 i = scroller.verti.istart; i < scroller.verti.iend; i += 1) {
s8_t text = cmds[pairs[i].index];
ui_box_t *box = ui_box(.string = text, .flags = { .draw_rect = true, .draw_text = true, .keyboard_nav = true });
ui_signal_from_box(box);
if (set_focus) {
ui->focus = box->id;
set_focus = false;
}
}
}
if (text_input_sig.text_commit) {
fuzzy_pair_t *pair = &pairs[0];
// ui_g_panel = (i32)pair->index + 1;
ui_text_clear(&text_input);
set_focus = true;
}
ui_end_scroller(scroller);
ui_end_build();
ma_end_scratch(scratch);
}
rn_begin(white_color);
ui_draw();
rn_end();
ui_end_frame();
}

View File

@@ -56,14 +56,14 @@ fn void rn_reload_font(f32 font_size, f32 dpr) {
}
fn void rn_reload(void) {
if (!gladLoadGLLoader((GLADloadproc)tcx->data[tcx_slot_app])) {
if (!gladLoadGLLoader((GLADloadproc)tcx->app_ctx)) {
fatalf("couldn't load opengl!");
}
}
fn void rn_init(ma_arena_t *perm, f32 font_size, f32 dpr) {
tcx->data[tcx_slot_rn] = ma_push_type(perm, rn_state_t);
rn = tcx->data[tcx_slot_rn];
tcx->rn_ctx = ma_push_type(perm, rn_state_t);
rn = tcx->rn_ctx;
rn_reload();
@@ -140,7 +140,7 @@ fn void rn_init(ma_arena_t *perm, f32 font_size, f32 dpr) {
}
void rn_begin_frame(app_frame_t *frame) {
rn = tcx->data[tcx_slot_rn];
rn = tcx->rn_ctx;
rn->frame = frame;
}

View File

@@ -1,15 +0,0 @@
// automatically generated using: C:\dev\wasm\src/text_editor/text_editor.meta.c
gb f32 font_size = 30;
gb f32 _font_size = 30;
gb_read_only mt_tweak_t tweak_table[] = {
{type(f32), s8_const("font_size"), &font_size, 4, 200},
{type(f32), s8_const("_font_size"), &_font_size, 30, 30},
};
void run_all_tests(void) {
test_string16();
test_hash_table();
test_intern_table();
test_array();
buffer16_test();
}// run_all_tests()

View File

@@ -1,122 +0,0 @@
void generate_text_editor_code(ma_arena_t *arena) {
sb8_t *include_paths = sb8(arena);
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8("../src")));
mt_files_t files = mt_lex_files(arena, s8("../src/text_editor/text_editor_main.c"), include_paths);
typedef struct cg_tweak_t cg_tweak_t;
struct cg_tweak_t {
cg_tweak_t *next;
type_t *type;
s8_t name;
s8_t value;
s8_t min, max;
};
cg_tweak_t *first_tweak = NULL;
cg_tweak_t *last_tweak = NULL;
sb8_t *tests = sb8_serial_begin(arena);
sb8_t *sb_embeds = sb8_serial_begin(arena);
sb8_printf(sb_embeds, "// automatically generated using: " __FILE__ "\n");
for (mt_file_t *it = files.first; it; it = it->next) {
parser_t *par = parser_make(arena, it->tokens.data);
for (;par->at->kind != lex_kind_eof;) {
b32 matched = false;
if (par->at->inside_macro == false && parser_matchi(par, s8("fn_test"))) {
parser_expecti(par, s8("void"));
lex_t *ident = parser_match(par, lex_kind_ident);
sb8_append(tests, ident->string);
matched = true;
}
if (par->at->inside_macro == false && parser_matchi(par, s8("mt_embed_file"))) {
parser_expect(par, lex_kind_open_paren);
lex_t *var_name = parser_expect(par, lex_kind_ident);
parser_expect(par, lex_kind_comma);
lex_t *path = parser_expect(par, lex_kind_string);
parser_expect(par, lex_kind_close_paren);
s8_t relpath = s8_printf(arena, "../%S", path->string);
s8_t content = OS_ReadFile(&Perm, relpath);
sb8_printf(sb_embeds, "gb_read_only ");
mt_serial_to_cbyte_array_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;
}
if (par->at->inside_macro == false && parser_matchi(par, s8("mt_tweak_b32"))) {
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
tweak->type = type(b32);
tweak->min = tweak->max = s8("0");
parser_expect(par, lex_kind_open_paren);
tweak->name = parser_expect(par, lex_kind_ident)->string;
parser_expect(par, lex_kind_comma);
tweak->value = parser_next(par)->string;
parser_expect(par, lex_kind_close_paren);
SLLQ_APPEND(first_tweak, last_tweak, tweak);
matched = true;
}
if (par->at->inside_macro == false && parser_matchi(par, s8("mt_tweak_f32"))) {
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
tweak->type = type(f32);
parser_expect(par, lex_kind_open_paren);
tweak->name = parser_expect(par, lex_kind_ident)->string;
parser_expect(par, lex_kind_comma);
tweak->value = parser_next(par)->string;
parser_expect(par, lex_kind_comma);
tweak->min = parser_next(par)->string;
parser_expect(par, lex_kind_comma);
tweak->max = parser_next(par)->string;
parser_expect(par, lex_kind_close_paren);
SLLQ_APPEND(first_tweak, last_tweak, tweak);
matched = true;
}
if (par->at->inside_macro == false && parser_matchi(par, s8("mt_tweak_color"))) {
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
tweak->type = type(v4f32_t);
tweak->min = s8("0.0f");
tweak->max = s8("1.0f");
parser_expect(par, lex_kind_open_paren);
tweak->name = parser_expect(par, lex_kind_ident)->string;
parser_expect(par, lex_kind_comma);
tweak->value = parser_next(par)->string;
while (par->at->kind != lex_kind_close_paren && par->at->kind != lex_kind_eof) parser_next(par);
lex_t *end = parser_expect(par, lex_kind_close_paren);
tweak->value.len = (i64)(end->str - tweak->value.str);
SLLQ_APPEND(first_tweak, last_tweak, tweak);
matched = true;
}
if (!matched) {
parser_next(par);
}
}
}
if (first_tweak != NULL) {
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, "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(\"%S\"), &%S, %S, %S},\n", it->type->name, it->name, it->name, it->min, it->max);
}
sb8_printf(sb_embeds, "\n};\n");
}
sb8_printf(sb_embeds, "void run_all_tests(void) {\n");
for (sb8_node_t *it = tests->first; it; it = it->next) {
sb8_printf(sb_embeds, " %S();\n", it->string);
}
sb8_printf(sb_embeds, "}// run_all_tests()\n");
s8_t embeds = sb8_serial_end(arena, sb_embeds);
os_write_file(mt_cpath(arena), embeds);
}

View File

@@ -1,58 +0,0 @@
#include "core/core.h"
#include "os/os.h"
#include "app/app.h"
#include "profiler/profiler.h"
#include "buffer16.h"
// #include "ui/ui.h"
#include "core/core.c"
#include "os/os.c"
#include "app/app.c"
#include "profiler/profiler.c"
#include "render/render.c"
#include "buffer16.c"
// #include "ui/ui.c"
#include "text_editor.gen.c"
/*todo:
* OK Create a complete string16 library
* OK (Win32) Win32 SDL_GetPrefPath, create configuration directory, get path
* Array
*
*
*
* Win32 upload icon
**/
fn_export b32 app_update(thread_ctx_t *thread_ctx, app_frame_t *frame) {
tcx = thread_ctx;
if (frame->first_event->kind == app_event_kind_init) {
run_all_tests();
mt_tweak_f32(font_size, 30, 4, 200);
mt_tweak_f32(_font_size, 30, 30, 30);
rn_init(&tcx->perm, font_size, frame->dpr);
return true;
} else if (frame->first_event->kind == app_event_kind_reload) {
rn_reload();
return true;
} else if (frame->first_event->kind == app_event_kind_unload) {
return true;
}
if (!f32_are_equal(font_size, _font_size)) {
_font_size = font_size;
rn_reload_font(font_size, frame->dpr);
}
rn_begin_frame(frame);
rn_begin(white_color);
rn_end();
return true;
}

View File

@@ -2,6 +2,9 @@
gb i64 buffer_raw_ids;
fn void buffer16_dealloc_history_entries(buffer16_t *buffer, array_history16_t *entries);
fn void buffer16_dealloc_history_array(buffer16_t *buffer, array_history16_t *entries);
fn void buffer16_multi_cursor_apply_edits(buffer16_t *buffer, array_edit16_t edits);
///////////////////////////////
// caret helpers

View File

@@ -62,6 +62,20 @@ struct buffer16_t {
alo_t alo;
};
typedef struct view_id_t view_id_t;
struct view_id_t { i64 e; };
typedef struct view_t view_t;
struct view_t {
view_id_t id;
buffer16_id_t active_buffer;
v2i32_t scroll;
array_caret_t carets;
caret_t main_caret_on_begin_frame;
b32 update_scroll;
};
const b32 dont_kill_selection = false;
const b32 kill_selection = true;
@@ -111,19 +125,12 @@ fn void buffer16_raw_replace_text(buffer16_t *buffer, r1i64_t range, s
// buffer multicursor + history
fn void buffer16_init(alo_t alo, buffer16_t *buffer, s8_t name, i64 size);
fn void buffer16_deinit(buffer16_t *buffer);
fn void buffer16_add_edit(array_edit16_t *edits, r1i64_t range, s16_t string);
fn array_edit16_t buffer16_begin_edit(alo_t alo, buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_add_edit(array_edit16_t *edits, r1i64_t range, s16_t string);
fn void buffer16_end_edit(buffer16_t *buffer, array_edit16_t *edits, array_caret_t *carets, b32 kill_selection);
fn void buffer16_merge_carets(buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_adjust_carets(array_edit16_t *edits, array_caret_t *carets);
fn void buffer16_pre_begin_edit_save_caret_history(buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_redo_edit(buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_undo_edit(buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_save_history_before_merge_cursor(buffer16_t *buffer, array_history16_t *stack, array_caret_t *carets);
fn void buffer16_save_history_before_apply_edits(buffer16_t *buffer, array_history16_t *stack, array_edit16_t *edits);
fn void buffer16_pre_begin_edit_save_caret_history(buffer16_t *buffer, array_caret_t *carets);
fn void buffer16_dealloc_history_entries(buffer16_t *buffer, array_history16_t *entries);
fn void buffer16_dealloc_history_array(buffer16_t *buffer, array_history16_t *entries);
fn void buffer16_multi_cursor_apply_edits(buffer16_t *buffer, array_edit16_t edits);

View File

@@ -1,4 +1,5 @@
#include "ui.gen.c"
#include "buffer16.c"
fn ui_caret_t ui_caret_clamp(ui_caret_t c, i32 min, i32 max) {
return (ui_caret_t){CLAMP(c.e[0],min,max), CLAMP(c.e[1],min,max), c.ifront};
@@ -517,15 +518,15 @@ fn_test void ui_test_text_replace(void) {
assert(s8_are_equal(ti.string, s8("qaer")));
}
#define ui_text_input(...) ui__text_input(UILOC, __VA_ARGS__)
fn ui_signal_t ui__text_input(ui_code_loc_t loc, ui_text_input_t *ti, b32 sim_even_if_no_focus) {
ui_box_t *box = ui_box(.loc = loc, .string = s8("text_input"), .flags = { .draw_border = true, .draw_rect = true, .draw_text = true, .keyboard_nav = true });
#define ui_text_input(ti, ...) ui__text_input(UILOC, ti, (ui_box_flags_t){ .draw_border = true, .draw_rect = true, .draw_text = true, .keyboard_nav = true, __VA_ARGS__ })
fn ui_signal_t ui__text_input(ui_code_loc_t loc, ui_text_input_t *ti, ui_box_flags_t flags) {
ui_box_t *box = ui_box(.loc = loc, .string = s8("text_input"), .flags = flags);
box->text_input = ti;
box->custom_draw = ui_text_input_draw;
ui_signal_t signal = ui_signal_from_box(box);
b32 sim = sim_even_if_no_focus || ui_is_focused_box(box);
b32 sim = flags.sim_even_if_no_focus || ui_is_focused_box(box);
if (sim) {
app_event_t *ev = ui->event;
i32 sel_size = r1i32_size(ti->caret.range);
@@ -1198,7 +1199,7 @@ fn void ui_draw(void) {
}
fn void ui_begin_frame(app_frame_t *frame) {
ui = tcx->data[tcx_slot_ui];
ui = tcx->ui_ctx;
ui->frame = frame;
}
@@ -1234,8 +1235,8 @@ fn void ui_reload(void) {
}
fn void ui_init(ma_arena_t *arena) {
tcx->data[tcx_slot_ui] = ma_push_type(arena, ui_t);
ui = tcx->data[tcx_slot_ui];
tcx->ui_ctx = ma_push_type(arena, ui_t);
ui = tcx->ui_ctx;
ui->box_arena = ma_push_arena(arena, mib(1));
ui_reload();
}
@@ -1288,7 +1289,7 @@ fn void ui_demo_everything_lister(void) {
locl ui_text_input_t text_input;
text_input.str = buff;
text_input.cap = lengthof(buff);
ui_signal_t ti_sig = ui_text_input(&text_input, true);
ui_signal_t ti_sig = ui_text_input(&text_input, .sim_even_if_no_focus = true);
if (lister_just_opened) text_input.len = 0;
ma_temp_t scratch = ma_begin_scratch();

View File

@@ -1,3 +1,5 @@
#include "buffer16.h"
typedef struct ui_code_loc_t ui_code_loc_t;
struct ui_code_loc_t {
char *file;
@@ -22,6 +24,8 @@ struct ui_box_flags_t {
b8 children_sum_x: 1;
b8 children_sum_y: 1;
b8 keyboard_nav: 1;
b8 sim_even_if_no_focus: 1;
};
typedef enum {
@@ -101,6 +105,7 @@ struct ui_box_t {
b32 expanded;
ui_text_input_t *text_input;
view_id_t view;
};
typedef struct ui_signal_t ui_signal_t;