diff --git a/frontend/src/app/render_wasm/shape.cljs b/frontend/src/app/render_wasm/shape.cljs index fbb45cd4a3..e182094bca 100644 --- a/frontend/src/app/render_wasm/shape.cljs +++ b/frontend/src/app/render_wasm/shape.cljs @@ -291,7 +291,8 @@ (api/set-grid-layout-data shape) (ctl/flex-layout? shape) - (api/set-flex-layout shape))) + (api/set-flex-layout shape)) + (api/set-layout-child shape)) ;; Property not in WASM nil)))) diff --git a/render-wasm/src/shapes/modifiers/flex_layout.rs b/render-wasm/src/shapes/modifiers/flex_layout.rs index d3ed26b1db..249a7dc247 100644 --- a/render-wasm/src/shapes/modifiers/flex_layout.rs +++ b/render-wasm/src/shapes/modifiers/flex_layout.rs @@ -53,15 +53,6 @@ struct LayoutAxis { is_auto_across: bool, } -impl LayoutAxis { - fn main_space(&self) -> f32 { - self.main_size - self.padding_main_start - self.padding_main_end - } - fn across_space(&self) -> f32 { - self.across_size - self.padding_across_start - self.padding_across_end - } -} - impl LayoutAxis { fn new( shape: &Shape, @@ -101,6 +92,13 @@ impl LayoutAxis { } } } + + fn main_space(&self) -> f32 { + self.main_size - self.padding_main_start - self.padding_main_end + } + fn across_space(&self) -> f32 { + self.across_size - self.padding_across_start - self.padding_across_end + } } #[derive(Debug, Copy, Clone)] @@ -624,6 +622,9 @@ pub fn reflow_flex_layout( } result.push_back(Modifier::transform_propagate(child.id, transform)); + if child.has_layout() { + result.push_back(Modifier::reflow(child.id)); + } shape_anchor = next_anchor( layout_data, diff --git a/render-wasm/src/shapes/modifiers/grid_layout.rs b/render-wasm/src/shapes/modifiers/grid_layout.rs index 083d89d0f6..3fe8e8f6bf 100644 --- a/render-wasm/src/shapes/modifiers/grid_layout.rs +++ b/render-wasm/src/shapes/modifiers/grid_layout.rs @@ -792,6 +792,9 @@ pub fn reflow_grid_layout( } result.push_back(Modifier::transform_propagate(child.id, transform)); + if child.has_layout() { + result.push_back(Modifier::reflow(child.id)); + } } if shape.is_layout_horizontal_auto() || shape.is_layout_vertical_auto() { diff --git a/render-wasm/src/wasm/layouts.rs b/render-wasm/src/wasm/layouts.rs index a97812b519..4e97222ca3 100644 --- a/render-wasm/src/wasm/layouts.rs +++ b/render-wasm/src/wasm/layouts.rs @@ -59,18 +59,19 @@ pub extern "C" fn set_layout_child_data( is_absolute: bool, z_index: i32, ) { - let h_sizing = RawSizing::from(h_sizing); - let v_sizing = RawSizing::from(v_sizing); - let max_h = if has_max_h { Some(max_h) } else { None }; - let min_h = if has_min_h { Some(min_h) } else { None }; - let max_w = if has_max_w { Some(max_w) } else { None }; - let min_w = if has_min_w { Some(min_w) } else { None }; - - let raw_align_self = align::RawAlignSelf::from(align_self); - - let align_self = raw_align_self.try_into().ok(); - with_current_shape_mut!(state, |shape: &mut Shape| { + let h_sizing = RawSizing::from(h_sizing); + let v_sizing = RawSizing::from(v_sizing); + + let max_h = if has_max_h { Some(max_h) } else { None }; + let min_h = if has_min_h { Some(min_h) } else { None }; + let max_w = if has_max_w { Some(max_w) } else { None }; + let min_w = if has_min_w { Some(min_w) } else { None }; + + let raw_align_self = align::RawAlignSelf::from(align_self); + + let align_self = raw_align_self.try_into().ok(); + shape.set_flex_layout_child_data( margin_top, margin_right,