From 0ab934c4bb78f248d130b843012cdf30f337d213 Mon Sep 17 00:00:00 2001 From: jacob Date: Wed, 5 Nov 2025 20:49:34 -0600 Subject: [PATCH] ceil final box dimensions --- src/base/base_util.h | 16 +++++++++++++++ src/meta/meta.c | 2 +- src/pp/pp.c | 48 +++++++++++++++++++++++++++++++------------- src/pp/pp_widgets.c | 6 +++--- src/ui/ui_common.c | 10 ++++----- src/ui/ui_common.h | 4 ++-- src/ui/ui_core.c | 8 ++++---- src/ui/ui_core.h | 2 +- 8 files changed, 66 insertions(+), 30 deletions(-) diff --git a/src/base/base_util.h b/src/base/base_util.h index e8fa3c53..dd11a0e6 100644 --- a/src/base/base_util.h +++ b/src/base/base_util.h @@ -59,6 +59,22 @@ Inline u64 HashFnv64(u64 seed, String s) return hash; } +#define HashF(fmt_cstr, ...) HashF_(StringFromCstrNoLimit(fmt_cstr), __VA_ARGS__, FmtEnd) +u64 HashF_(String fmt, ...) +{ + TempArena scratch = BeginScratchNoConflict(); + u64 result = 0; + va_list args; + va_start(args, fmt); + { + String str = FormatStringV(scratch.arena, fmt, args); + result = HashFnv64(Fnv64Basis, str); + } + va_end(args); + EndScratch(scratch); + return result; +} + //////////////////////////////////////////////////////////// //~ Mergesort utils diff --git a/src/meta/meta.c b/src/meta/meta.c index 2bca3dfa..27d526f3 100644 --- a/src/meta/meta.c +++ b/src/meta/meta.c @@ -929,9 +929,9 @@ JobDef(Build, _, __) PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4189")); /* local variable is initialized but not referenced */ PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4200")); /* nonstandard extension used: zero-sized array in struct/union */ PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4702")); /* unreachable code */ + PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4305")); /* 'initializing': truncation from 'double' to 'f32' */ // PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4127")); /* conditional expression is constant */ - // PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4305")); /* 'initializing': truncation from 'double' to 'f32' */ // PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4820")); /* bytes padding added after data member */ // PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4464")); /* relative include path contains '..' */ // PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4061")); /* enumerator is not explicitly handled by a case label */ diff --git a/src/pp/pp.c b/src/pp/pp.c index c9cc1a16..fda9147a 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -785,12 +785,12 @@ void PP_UpdateUser(void) UI_Box *pp_root_box = 0; { - UI_PushCP(UI_BuildRow(Zstr)); + UI_PushCP(UI_BuildRow(0)); { UI_BuildSpacer(UI_FILL(1, 0)); { UI_SetNext(Width, UI_PIX(g->ui_size.x, 1)); - UI_PushCP(UI_BuildColumn(Zstr)); + UI_PushCP(UI_BuildColumn(0)); { UI_BuildSpacer(UI_FILL(1, 0)); { @@ -801,7 +801,7 @@ void PP_UpdateUser(void) } UI_SetNext(ChildLayoutAxis, Axis_Y); UI_SetNext(Height, UI_PIX(g->ui_size.y, 1)); - pp_root_box = UI_BuildBox(Lit("pp root")); + pp_root_box = UI_BuildBox(HashF("pp root")); } UI_BuildSpacer(UI_FILL(1, 0)); } @@ -1984,7 +1984,7 @@ void PP_UpdateUser(void) UI_Push(ChildLayoutAxis, Axis_Y); UI_Push(FloatingPos, g->lister_pos); UI_SetNext(Flags, UI_BoxFlag_Floating); - UI_Box *lister_box = UI_PushCP(UI_BuildBox(Lit("lister"))); + g->lister_key = UI_PushCP(UI_BuildBox(HashF("lister")))->key; { /* Title bar */ UI_PushCP(0); @@ -1995,31 +1995,51 @@ void PP_UpdateUser(void) UI_Push(ChildLayoutAxis, Axis_X); UI_Push(Width, UI_FILL(1, 0)); UI_Push(Height, UI_FNT(2, 0)); - UI_PushCP(UI_BuildBox(Zstr)); + UI_PushCP(UI_BuildBox(0)); { UI_Push(Width, UI_FILL(1, 0)); - // /* Left title box */ - UI_BuildRow(Zstr); + /* Left title box */ + UI_BuildRow(0); /* Title box */ UI_SetNext(ChildAlignment, UI_Alignment_Center); UI_SetNext(Width, UI_FIT(1)); - UI_SetNext(Text, Lit("Titleeee")); + UI_SetNext(Text, Lit("Titleeeeeeeeeeeeeee")); UI_SetNext(Flags, UI_BoxFlag_DrawText); - UI_BuildBox(Zstr); + UI_BuildBox(0); - // /* Right title box */ - UI_BuildBox(Zstr); + /* Right title box */ + UI_BuildRow(0); } UI_PopCP(); } UI_PopCP(); + } + UI_BuildDivider(UI_PIX(1, 0)); + + UI_SetNext(Tint, 0); + UI_SetNext(Rounding, 0); + UI_PushCP(UI_BuildColumn(0)); + { + for (u32 i = 0; i < 10; ++i) + { + UI_SetNext(BorderColor, 0); + UI_SetNext(BackgroundColor, 0); + UI_SetNext(Rounding, UI_RPIX(2)); + UI_SetNext(Width, UI_FILL(1, 0)); + UI_SetNext(Height, UI_FNT(1.5, 0)); + UI_SetNext(Text, Lit("btn")); + UI_SetNext(Flags, UI_BoxFlag_DrawText); + UI_SetNext(ChildAlignment, UI_Alignment_Center); + UI_BuildBox(HashF("btn%F", FmtSint(i))); + } - UI_BuildDivider(UI_PIX(1, 0)); } UI_PopCP(); - g->lister_key = lister_box->key; + + + UI_PopCP(); } UI_PopCP(); } @@ -2037,7 +2057,7 @@ void PP_UpdateUser(void) UI_SetNext(Width, UI_FIT(1)); UI_SetNext(Height, UI_FIT(1)); UI_SetNext(Tint, 0); - UI_PushCP(UI_BuildBox(Lit("dbg"))); + UI_PushCP(UI_BuildBox(HashF("dbg"))); { UI_Push(BackgroundColor, 0); UI_Push(BorderColor, 0); diff --git a/src/pp/pp_widgets.c b/src/pp/pp_widgets.c index c9da1c09..c5261388 100644 --- a/src/pp/pp_widgets.c +++ b/src/pp/pp_widgets.c @@ -54,7 +54,7 @@ UI_Box *PP_BuildDebugConsole(b32 minimized) UI_SetNext(Width, UI_FILL(1, 0)); UI_SetNext(Height, UI_FIT(1)); } - console_box = UI_BuildColumn(Lit("Console box")); + console_box = UI_BuildColumn(HashF("Console box")); UI_PushCP(console_box); { /* Gather display logs */ @@ -117,7 +117,7 @@ UI_Box *PP_BuildDebugConsole(b32 minimized) UI_Push(Rounding, UI_RPIX(0)); UI_Push(Border, 1); UI_Push(ChildAlignment, UI_Alignment_Left); - UI_PushCP(UI_BuildRow(Zstr)); + UI_PushCP(UI_BuildRow(0)); { // UI_SetNext(Height, UI_PIX(100, 0)); UI_BuildSpacer(UI_PIX(10, 0)); @@ -127,7 +127,7 @@ UI_Box *PP_BuildDebugConsole(b32 minimized) UI_Push(Width, UI_FILL(1, 0)); UI_Push(Height, UI_FIT(1)); UI_Push(Flags, UI_BoxFlag_DrawText); - UI_BuildBox(Zstr); + UI_BuildBox(0); } UI_PopCP(); } diff --git a/src/ui/ui_common.c b/src/ui/ui_common.c index a1cbd40d..bec6e695 100644 --- a/src/ui/ui_common.c +++ b/src/ui/ui_common.c @@ -6,7 +6,7 @@ UI_Box *UI_BuildLabel(String text) UI_SetNext(Height, UI_FIT(1)); UI_SetNext(Text, text); UI_SetNext(Flags, UI_BoxFlag_DrawText); - UI_Box *box = UI_BuildBox(Zstr); + UI_Box *box = UI_BuildBox(0); return box; } @@ -39,7 +39,7 @@ UI_Box *UI_BuildSpacer(UI_Size size) UI_Push(Parent, old_parent); UI_Push(AxisSize, UI_FILL(1, 0), .axis = !axis); UI_Push(AxisSize, size, .axis = axis); - box = UI_BuildBox(Zstr); + box = UI_BuildBox(0); } UI_PopStack(); return box; @@ -60,7 +60,7 @@ UI_Box *UI_BuildDivider(UI_Size size) UI_Push(BackgroundColor, old_border_color); UI_Push(AxisSize, UI_FILL(1, 0), .axis = !axis); UI_Push(AxisSize, size, .axis = axis); - box = UI_BuildBox(Zstr); + box = UI_BuildBox(0); } UI_PopStack(); return box; @@ -69,14 +69,14 @@ UI_Box *UI_BuildDivider(UI_Size size) //////////////////////////////////////////////////////////// //~ Layout helpers -UI_Box *UI_BuildColumn(String seed) +UI_Box *UI_BuildColumn(u64 seed) { UI_SetNext(ChildLayoutAxis, Axis_Y); UI_Box *box = UI_BuildBox(seed); return box; } -UI_Box *UI_BuildRow(String seed) +UI_Box *UI_BuildRow(u64 seed) { UI_SetNext(ChildLayoutAxis, Axis_X); UI_Box *box = UI_BuildBox(seed); diff --git a/src/ui/ui_common.h b/src/ui/ui_common.h index c0f3155c..a4dd3829 100644 --- a/src/ui/ui_common.h +++ b/src/ui/ui_common.h @@ -14,5 +14,5 @@ UI_Box *UI_BuildDivider(UI_Size size); //////////////////////////////////////////////////////////// //~ Layout helpers -UI_Box *UI_BuildColumn(String seed); -UI_Box *UI_BuildRow(String seed); +UI_Box *UI_BuildColumn(u64 seed); +UI_Box *UI_BuildRow(u64 seed); diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index 3163cc07..425568c4 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -376,7 +376,7 @@ UI_Style UI_PopStyle(UI_StyleDesc desc) //////////////////////////////////////////////////////////// //~ Box -UI_Box *UI_BuildBox(String seed) +UI_Box *UI_BuildBox(u64 seed) { UI_SharedState *g = &UI_shared_state; @@ -389,12 +389,12 @@ UI_Box *UI_BuildBox(String seed) UI_Box *box = PushStruct(g->build_arena, UI_Box); /* Calculate key */ - if (seed.len > 0) + if (seed != 0) { UI_Key key = ZI; key.hash = RandU64FromSeeds(key.hash, parent->key.hash); key.hash = RandU64FromSeeds(key.hash, tag.hash); - key.hash = HashFnv64(key.hash, seed); + key.hash = RandU64FromSeeds(key.hash, seed); box->key = key; } @@ -1047,7 +1047,7 @@ i64 UI_EndFrame(UI_Frame frame) /* Submit position */ box->p0 = RoundVec2(final_pos); - box->p1 = RoundVec2(AddVec2(final_pos, dims_vec)); + box->p1 = RoundVec2(AddVec2(final_pos, CeilVec2(dims_vec))); box->report.screen_p0 = box->p0; box->report.screen_p1 = box->p1; } diff --git a/src/ui/ui_core.h b/src/ui/ui_core.h index 480ecbe3..15f8ccb1 100644 --- a/src/ui/ui_core.h +++ b/src/ui/ui_core.h @@ -393,7 +393,7 @@ UI_Style UI_PopStyle(UI_StyleDesc desc); //////////////////////////////////////////////////////////// //~ Box -UI_Box *UI_BuildBox(String seed); +UI_Box *UI_BuildBox(u64 seed); void UI_SetBackgroundTexture(UI_Box *box, GPU_Resource *texture, Vec2 uv0, Vec2 uv1); b32 UI_IsPointInBox(UI_Box *box, Vec2 point);