From f8bfdaf892b0050b92ab731d79ea31ea8beeefb2 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 7 Sep 2025 16:15:26 +1000 Subject: [PATCH] fix how percentage layouts are calculated --- src/editor/editor.d | 41 ++++++++++++++++++++++++++++++----------- src/editor/ui.d | 22 +++++++--------------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/editor/editor.d b/src/editor/editor.d index 553a62d..5aa8cd6 100644 --- a/src/editor/editor.d +++ b/src/editor/editor.d @@ -182,23 +182,42 @@ Cycle(Editor* ed, Inputs* inputs) 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)); - 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_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(); + } 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(); - 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(); BeginFrame(&ed.rd); diff --git a/src/editor/ui.d b/src/editor/ui.d index e5bfd90..5ea5c67 100644 --- a/src/editor/ui.d +++ b/src/editor/ui.d @@ -46,6 +46,7 @@ struct UIContext HashTable!(UIHash, UIItem*) items; Arena arena; Renderer* rd; + Inputs* inputs; UIBuffer buffer; @@ -193,10 +194,11 @@ SetLayoutAxis(Axis2D axis) } void -BeginBuild() +BeginBuild(Inputs* inputs) { UIContext* ctx = GetCtx(); + ctx.inputs = inputs; ctx.buffer.count = 0; ctx.root = Root(); @@ -247,26 +249,16 @@ CalcPercentageSizes(UIItem* item) { if (!Nil(item)) { - CalcPercentageSizes(item.first); - CalcPercentageSizes(item.next); - static foreach(axis; A2D.min .. A2D.max) { if (item.size_info[axis].type == ST.Percentage) { - UIItem* parent; - 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; + item.size.v[axis] = item.parent.size.v[axis] * item.size_info[axis].value; } } + + CalcPercentageSizes(item.first); + CalcPercentageSizes(item.next); } }