From a2350f10f5107ae10d441096cdbb71480fa22411 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 1 Nov 2025 13:30:41 +0100 Subject: [PATCH] Dynamic flex size --- examples/tour.rs | 1 - src/elements/flex.rs | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/tour.rs b/examples/tour.rs index ffeed5b..bae1f6f 100644 --- a/examples/tour.rs +++ b/examples/tour.rs @@ -70,7 +70,6 @@ pub fn app(screen: Arc) -> Rsx { Input { } } - @Transform::new().margin(0, 1); FlexRow { "Password" diff --git a/src/elements/flex.rs b/src/elements/flex.rs index f15e881..d82f601 100644 --- a/src/elements/flex.rs +++ b/src/elements/flex.rs @@ -68,6 +68,7 @@ impl Element for FlexRow { let mut scope = crate::render_scope::RenderScope::new(); scope.set_parent_transform(transform.clone()); + transform.height = 0; let mut v = 0; let mut renderer = RowRenderer(&mut transform, self.gap, &mut v); for widget in &self.children { @@ -127,6 +128,7 @@ impl Element for FlexCol { let mut scope = crate::render_scope::RenderScope::new(); scope.set_parent_transform(transform.clone()); + transform.width = 0; let mut v = 0; let mut renderer = ColumnRenderer(&mut transform, self.gap, &mut v); for widget in &self.children { @@ -158,7 +160,7 @@ impl ElementRenderer for RowRenderer<'_> { fn before_draw(&mut self, scope: &mut crate::prelude::RenderScope, _widget: &Arc) { let t = scope.get_transform_mut(); self.0.width = self.0.width.max(*self.2 + t.width + (t.px * 2)); - self.0.height = self.0.height.max(t.height + (t.py * 2)); + // self.0.height = self.0.height.max(t.height + (t.py * 2)); t.x += self.0.x; t.y += self.0.y + *self.2; @@ -166,13 +168,15 @@ impl ElementRenderer for RowRenderer<'_> { t.px += self.0.px; t.py += self.0.py; + + self.0.height += t.height + (t.py * 2) + self.1; } } impl ElementRenderer for ColumnRenderer<'_> { fn before_draw(&mut self, scope: &mut crate::prelude::RenderScope, _widget: &Arc) { let t = scope.get_transform_mut(); - self.0.width = self.0.width.max(*self.2 + t.width + (t.px * 2)); + // self.0.width = self.0.width.max(*self.2 + t.width + (t.px * 2)); self.0.height = self.0.height.max(t.height + (t.py * 2)); t.x += self.0.x + *self.2; @@ -181,5 +185,7 @@ impl ElementRenderer for ColumnRenderer<'_> { t.px += self.0.px; t.py += self.0.py; + + self.0.width += t.width + (t.px * 2) + self.1; } }