power_play/src/ui/ui_common.c
2025-12-07 13:07:24 -06:00

99 lines
2.4 KiB
C

////////////////////////////////////////////////////////////
//~ Label helpers
UI_Key UI_BuildLabel(String text)
{
UI_Key parent = UI_UseTop(Parent);
GC_FontKey font = UI_UseTop(Font);
f32 font_size = UI_UseTop(FontSize);
Vec4 tint = UI_UseTop(Tint);
UI_Alignment alignment = UI_UseTop(ChildAlignment);
UI_Key key = ZI;
UI_PushCP(UI_NilKey);
{
UI_PushDefaults();
UI_Push(Parent, parent);
UI_SetNext(Tint, tint);
UI_SetNext(Font, font);
UI_SetNext(FontSize, font_size);
UI_SetNext(Width, UI_SHRINK(0, 1));
UI_SetNext(Height, UI_SHRINK(0, 1));
UI_SetNext(Text, text);
UI_SetNext(ChildAlignment, alignment);
UI_SetNext(Flags, UI_BoxFlag_DrawText);
key = UI_BuildBox();
}
UI_PopCP(UI_TopCP());
return key;
}
UI_Key UI_BuildLabelF_(char *fmt_cstr, ...)
{
TempArena scratch = BeginScratchNoConflict();
String str = ZI;
{
va_list va;
va_start(va, fmt_cstr);
str = FormatStringV(scratch.arena, StringFromCstrNoLimit(fmt_cstr), va);
va_end(va);
}
UI_Key key = UI_BuildLabel(str);
EndScratch(scratch);
return key;
}
////////////////////////////////////////////////////////////
//~ Spacing helpers
UI_Key UI_BuildSpacer(UI_Size size, Axis axis)
{
UI_Key parent = UI_UseTop(Parent);
UI_Key key = ZI;
UI_PushCP(UI_NilKey);
{
UI_PushDefaults();
UI_Push(Parent, parent);
UI_Push(Tint, 0);
UI_Push(AxisSize, UI_GROW(1, 0), .axis = !axis);
UI_Push(AxisSize, size, .axis = axis);
key = UI_BuildBox();
}
UI_PopCP(UI_TopCP());
return key;
}
UI_Key UI_BuildDivider(UI_Size size, Vec4 color, Axis axis)
{
UI_Key key = ZI;
UI_Key parent = UI_UseTop(Parent);
Vec4 tint = UI_UseTop(Tint);
UI_PushCP(UI_NilKey);
{
UI_PushDefaults();
UI_Push(Parent, parent);
UI_Push(Tint, tint);
UI_Push(BackgroundColor, color);
UI_Push(AxisSize, UI_GROW(1, 0), .axis = !axis);
UI_Push(AxisSize, size, .axis = axis);
key = UI_BuildBox();
}
UI_PopCP(UI_TopCP());
return key;
}
////////////////////////////////////////////////////////////
//~ Layout helpers
UI_Key UI_BuildColumnEx(UI_Key key)
{
UI_SetNext(ChildLayoutAxis, Axis_Y);
return UI_BuildBoxEx(key);
}
UI_Key UI_BuildRowEx(UI_Key key)
{
UI_SetNext(ChildLayoutAxis, Axis_X);
return UI_BuildBoxEx(key);
}