From 6f72ac4650037518847e9f1d03b0b37de72babbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Wed, 20 Aug 2025 23:31:35 +0200 Subject: [PATCH] Remove internal `State` from `responsive` --- widget/src/lazy/responsive.rs | 38 ++++++++++------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/widget/src/lazy/responsive.rs b/widget/src/lazy/responsive.rs index 18451a41..a0b18761 100644 --- a/widget/src/lazy/responsive.rs +++ b/widget/src/lazy/responsive.rs @@ -46,23 +46,18 @@ where } } -struct State { - tree: Tree, -} - impl Widget for Responsive<'_, Message, Theme, Renderer> where Renderer: core::Renderer, { fn tag(&self) -> tree::Tag { - tree::Tag::of::() + struct Marker; + tree::Tag::of::() } - fn state(&self) -> tree::State { - tree::State::new(State { - tree: Tree::empty(), - }) + fn diff(&mut self, _tree: &mut Tree) { + // Diff is deferred to layout } fn size(&self) -> Size { @@ -78,14 +73,13 @@ where renderer: &Renderer, limits: &layout::Limits, ) -> layout::Node { - let state = tree.state.downcast_mut::(); let size = limits.max(); self.content = (self.view)(size); - state.tree.diff(&mut self.content); + tree.diff_children(std::slice::from_mut(&mut self.content)); self.content.as_widget_mut().layout( - &mut state.tree, + &mut tree.children[0], renderer, &limits.loose(), ) @@ -102,10 +96,8 @@ where shell: &mut Shell<'_, Message>, viewport: &Rectangle, ) { - let state = tree.state.downcast_mut::(); - self.content.as_widget_mut().update( - &mut state.tree, + &mut tree.children[0], event, layout, cursor, @@ -126,10 +118,8 @@ where cursor: mouse::Cursor, viewport: &Rectangle, ) { - let state = tree.state.downcast_ref::(); - self.content.as_widget().draw( - &state.tree, + &tree.children[0], renderer, theme, style, @@ -147,10 +137,8 @@ where viewport: &Rectangle, renderer: &Renderer, ) -> mouse::Interaction { - let state = tree.state.downcast_ref::(); - self.content.as_widget().mouse_interaction( - &state.tree, + &tree.children[0], layout, cursor, viewport, @@ -165,10 +153,8 @@ where renderer: &Renderer, operation: &mut dyn widget::Operation, ) { - let state = tree.state.downcast_mut::(); - self.content.as_widget_mut().operate( - &mut state.tree, + &mut tree.children[0], layout, renderer, operation, @@ -183,10 +169,8 @@ where viewport: &Rectangle, translation: Vector, ) -> Option> { - let state = tree.state.downcast_mut::(); - self.content.as_widget_mut().overlay( - &mut state.tree, + &mut tree.children[0], layout, renderer, viewport,