fix how percentage layouts are calculated

This commit is contained in:
Matthew 2025-09-07 16:15:26 +10:00
parent 97d9996160
commit f8bfdaf892
2 changed files with 37 additions and 26 deletions

View File

@ -182,23 +182,42 @@ Cycle(Editor* ed, Inputs* inputs)
BeginBuild(); BeginBuild();
Panel("##panel_1", 1.0, 0.33, A2D.X, Vec4(0.2, 0.5, 0.8, 1.0)); Panel("##panel_1", 1.0, 0.3, A2D.X, Vec4(0.2, 0.5, 0.8, 1.0));
{
Panel("##sub_panel_1", 0.125, 1.0, A2D.X, Vec4(0.2, 0.4, 0.5, 1.0));
EndPanel();
Panel("##sub_panel_1", 0.125, 1.0, A2D.X, Vec4(0.2, 0.4, 0.5, 1.0)); Panel("##sub_panel_2", 0.675, 1.0, A2D.X, Vec4(0.9, 0.6, 0.5, 1.0));
EndPanel(); EndPanel();
Panel("##sub_panel_2", 0.675, 1.0, A2D.X, Vec4(0.9, 0.6, 0.5, 1.0));
EndPanel();
Panel("##sub_panel_3", 0.2, 1.0, A2D.X, Vec4(1.0, 0.4, 0.5, 1.0));
EndPanel();
Panel("##sub_panel_3", 0.2, 1.0, A2D.X, Vec4(1.0, 0.4, 0.5, 1.0));
EndPanel();
}
EndPanel(); EndPanel();
Panel("##panel_2", 1.0, 0.33, A2D.X, Vec4(0.5, 0.2, 0.45, 1.0)); Panel("##panel_2", 1.0, 0.3, A2D.X, Vec4(0.5, 0.2, 0.45, 1.0));
{
}
EndPanel(); EndPanel();
Panel("##panel_3", 1.0, 0.33, A2D.X, Vec4(0.3, 0.7, 0.6, 1.0)); Panel("##panel_3", 1.0, 0.4, A2D.X, Vec4(0.3, 0.7, 0.6, 1.0));
{
Panel("##sub_panel_6", 0.25, 1.0, A2D.Y, Vec4(0.33, 0.4, 0.8, 1.0));
{
Panel("##sub_sub_panel_1", 1.0, 0.4, A2D.X, Vec4(1.0, 0.0, 0.0, 1.0));
EndPanel();
Panel("##sub_sub_panel_2", 1.0, 0.6, A2D.X, Vec4(1.0, 1.0, 0.0, 1.0));
EndPanel();
}
EndPanel();
Panel("##sub_panel_7", 0.55, 1.0, A2D.X, Vec4(0.9, 0.2, 0.3, 1.0));
EndPanel();
Panel("##sub_panel_8", 0.2, 1.0, A2D.X, Vec4(0.2, 0.76, 0.5, 1.0));
EndPanel();
}
EndPanel(); EndPanel();
BeginFrame(&ed.rd); BeginFrame(&ed.rd);

View File

@ -46,6 +46,7 @@ struct UIContext
HashTable!(UIHash, UIItem*) items; HashTable!(UIHash, UIItem*) items;
Arena arena; Arena arena;
Renderer* rd; Renderer* rd;
Inputs* inputs;
UIBuffer buffer; UIBuffer buffer;
@ -193,10 +194,11 @@ SetLayoutAxis(Axis2D axis)
} }
void void
BeginBuild() BeginBuild(Inputs* inputs)
{ {
UIContext* ctx = GetCtx(); UIContext* ctx = GetCtx();
ctx.inputs = inputs;
ctx.buffer.count = 0; ctx.buffer.count = 0;
ctx.root = Root(); ctx.root = Root();
@ -247,26 +249,16 @@ CalcPercentageSizes(UIItem* item)
{ {
if (!Nil(item)) if (!Nil(item))
{ {
CalcPercentageSizes(item.first);
CalcPercentageSizes(item.next);
static foreach(axis; A2D.min .. A2D.max) static foreach(axis; A2D.min .. A2D.max)
{ {
if (item.size_info[axis].type == ST.Percentage) if (item.size_info[axis].type == ST.Percentage)
{ {
UIItem* parent; item.size.v[axis] = item.parent.size.v[axis] * item.size_info[axis].value;
for(UIItem* p = item.parent; !Nil(p); p = p.parent)
{
if (p.size_info[axis].type == ST.Pixels)
{
parent = p;
break;
}
}
item.size.v[axis] = parent.size_info[axis].value * item.size_info[axis].value;
} }
} }
CalcPercentageSizes(item.first);
CalcPercentageSizes(item.next);
} }
} }