2.7 KiB
@table(Name, Type, BoxName)
UIStyleStacks:
{
{ Parent ui_box * Parent }
{ Width ui_size SemanticSize[Axis2_X] }
{ Height ui_size SemanticSize[Axis2_Y] }
{ FixedX r32 FixedP.E[Axis2_X] }
{ FixedY r32 FixedP.E[Axis2_Y] }
{ TextColor v4 TextColor }
{ BackgroundColor v4 BackgroundColor }
{ BorderColor v4 BorderColor }
{ BorderThickness r32 BorderThickness }
{ LayoutAxis axis2 LayoutAxis }
{ CornerRadius r32 CornerRadius }
{ Font font_id Font }
{ FontSize r32 FontSize }
{ OffsetX r32 Offset.x }
{ OffsetY r32 Offset.y }
}
@table_gen
{
struct ui_style_stacks;
{;
@expand(UIStyleStacks s) $(s.Type) $(s.Name)Stack[64]; s32 $(s.Name)StackUsed; b32 AutoPop$(s.Name);;
};;
}
@c @table_gen
{
@expand(UIStyleStacks s) inline void UI_Push$(s.Name)($(s.Type) Element) $(=>50) { ui *UI = UI_GetState(); Assert(UI->Stacks.$(s.Name)StackUsed $(=>125) + 1 < ArrayCount(UI->Stacks.$(s.Name)Stack)); $(=>180) UI->Stacks.$(s.Name)Stack[UI->Stacks.$(s.Name)StackUsed++] $(=>260) = Element; };
@expand(UIStyleStacks s) inline void UI_Pop$(s.Name)(void) $(=>50) { ui *UI = UI_GetState(); Assert(UI->Stacks.$(s.Name)StackUsed $(=>125) > 0); $(=>180) --UI->Stacks.$(s.Name)StackUsed; $(=>271) };
@expand(UIStyleStacks s) inline void UI_SetNext$(s.Name)($(s.Type) Element) { ui *UI = UI_GetState(); UI_Push$(s.Name)(Element); UI->Stacks.AutoPop$(s.Name) = true; };
@expand(UIStyleStacks s) inline $(s.Type) UI_First$(s.Name)(void) { ui *UI = UI_GetState(); return(UI->Stacks.$(s.Name)Stack[0]); };
@expand(UIStyleStacks s) inline $(s.Type) UI_Top$(s.Name)(void) { ui *UI = UI_GetState(); return(UI->Stacks.$(s.Name)Stack[UI->Stacks.$(s.Name)StackUsed - 1]); };
@expand(UIStyleStacks s) #define UI_$(s.Name)(Element) DeferLoop(UI_Push$(s.Name)(Element), UI_Pop$(s.Name)())
}
@c @table_gen
{
static void UI_ApplyStyles(ui_box *Box);
{;
ui *UI = UI_GetState();;
@expand(UIStyleStacks s) Assert(UI->Stacks.$(s.Name)StackUsed > 0); $(=>50) Box->$(s.BoxName) $(=>75) = UI->Stacks.$(s.Name)Stack[UI->Stacks.$(s.Name)StackUsed - 1]; $(=>160) if(UI->Stacks.AutoPop$(s.Name)) $(=>200) { UI_Pop$(s.Name)(); $(=>230) UI->Stacks.AutoPop$(s.Name) = false; $(=>260) }
};
}