From 0e9c1ab192279d1a3a88815080e043f434aa380e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 22 Dec 2022 14:29:24 +0100 Subject: [PATCH 1/2] Add `Renderer` argument to `operate` --- examples/modal/src/main.rs | 4 ++++ lazy/src/component.rs | 2 ++ lazy/src/lazy.rs | 2 ++ native/src/element.rs | 14 +++++++++++--- native/src/overlay.rs | 1 + native/src/overlay/element.rs | 6 ++++-- native/src/user_interface.rs | 2 ++ native/src/widget.rs | 1 + native/src/widget/button.rs | 2 ++ native/src/widget/column.rs | 5 ++++- native/src/widget/container.rs | 2 ++ native/src/widget/pane_grid.rs | 3 ++- native/src/widget/pane_grid/content.rs | 3 +++ native/src/widget/pane_grid/title_bar.rs | 3 +++ native/src/widget/row.rs | 5 ++++- native/src/widget/scrollable.rs | 2 ++ native/src/widget/text_input.rs | 1 + 17 files changed, 50 insertions(+), 8 deletions(-) diff --git a/examples/modal/src/main.rs b/examples/modal/src/main.rs index 2f20795c0a..5afafd0df2 100644 --- a/examples/modal/src/main.rs +++ b/examples/modal/src/main.rs @@ -325,11 +325,13 @@ mod modal { &self, state: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { self.base.as_widget().operate( &mut state.children[0], layout, + renderer, operation, ); } @@ -436,11 +438,13 @@ mod modal { fn operate( &mut self, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { self.content.as_widget().operate( self.tree, layout.children().next().unwrap(), + renderer, operation, ); } diff --git a/lazy/src/component.rs b/lazy/src/component.rs index 3d7b8758bc..ad15d69d17 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -234,6 +234,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { struct MapOperation<'a, B> { @@ -274,6 +275,7 @@ where element.as_widget().operate( &mut tree.children[0], layout, + renderer, &mut MapOperation { operation }, ); }); diff --git a/lazy/src/lazy.rs b/lazy/src/lazy.rs index 2611dd1092..ec35e8f076 100644 --- a/lazy/src/lazy.rs +++ b/lazy/src/lazy.rs @@ -130,12 +130,14 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { self.with_element(|element| { element.as_widget().operate( &mut tree.children[0], layout, + renderer, operation, ); }); diff --git a/native/src/element.rs b/native/src/element.rs index 2f1adeff59..2409b1c976 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -290,6 +290,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { struct MapOperation<'a, B> { @@ -334,8 +335,12 @@ where } } - self.widget - .operate(tree, layout, &mut MapOperation { operation }); + self.widget.operate( + tree, + layout, + renderer, + &mut MapOperation { operation }, + ); } fn on_event( @@ -473,9 +478,12 @@ where &self, state: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { - self.element.widget.operate(state, layout, operation) + self.element + .widget + .operate(state, layout, renderer, operation) } fn on_event( diff --git a/native/src/overlay.rs b/native/src/overlay.rs index 0b05b058e1..22f8b6ec80 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -46,6 +46,7 @@ where fn operate( &mut self, _layout: Layout<'_>, + _renderer: &Renderer, _operation: &mut dyn widget::Operation, ) { } diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs index 4f5ef32ac7..498e9ae361 100644 --- a/native/src/overlay/element.rs +++ b/native/src/overlay/element.rs @@ -108,9 +108,10 @@ where pub fn operate( &mut self, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { - self.overlay.operate(layout, operation); + self.overlay.operate(layout, renderer, operation); } } @@ -144,6 +145,7 @@ where fn operate( &mut self, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { struct MapOperation<'a, B> { @@ -189,7 +191,7 @@ where } self.content - .operate(layout, &mut MapOperation { operation }); + .operate(layout, renderer, &mut MapOperation { operation }); } fn on_event( diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 376ce568f8..2b43829d91 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -493,6 +493,7 @@ where self.root.as_widget().operate( &mut self.state, Layout::new(&self.base), + renderer, operation, ); @@ -507,6 +508,7 @@ where overlay.operate( Layout::new(self.overlay.as_ref().unwrap()), + renderer, operation, ); } diff --git a/native/src/widget.rs b/native/src/widget.rs index efe26fc78e..f714e28a0e 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -175,6 +175,7 @@ where &self, _state: &mut Tree, _layout: Layout<'_>, + _renderer: &Renderer, _operation: &mut dyn Operation, ) { } diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index bbd9451ce3..b4276317f6 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -169,12 +169,14 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn Operation, ) { operation.container(None, &mut |operation| { self.content.as_widget().operate( &mut tree.children[0], layout.children().next().unwrap(), + renderer, operation, ); }); diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 8030778bff..f2ef132a8d 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -147,6 +147,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn Operation, ) { operation.container(None, &mut |operation| { @@ -155,7 +156,9 @@ where .zip(&mut tree.children) .zip(layout.children()) .for_each(|((child, state), layout)| { - child.as_widget().operate(state, layout, operation); + child + .as_widget() + .operate(state, layout, renderer, operation); }) }); } diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 16d0cb61bd..cdf1c85925 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -169,12 +169,14 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn Operation, ) { operation.container(None, &mut |operation| { self.content.as_widget().operate( &mut tree.children[0], layout.children().next().unwrap(), + renderer, operation, ); }); diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 61597921c9..f8dbab7461 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -294,6 +294,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { operation.container(None, &mut |operation| { @@ -302,7 +303,7 @@ where .zip(&mut tree.children) .zip(layout.children()) .for_each(|(((_pane, content), state), layout)| { - content.operate(state, layout, operation); + content.operate(state, layout, renderer, operation); }) }); } diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 5f269d1f60..c9b0df078f 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -187,6 +187,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { let body_layout = if let Some(title_bar) = &self.title_bar { @@ -195,6 +196,7 @@ where title_bar.operate( &mut tree.children[1], children.next().unwrap(), + renderer, operation, ); @@ -206,6 +208,7 @@ where self.body.as_widget().operate( &mut tree.children[0], body_layout, + renderer, operation, ); } diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 28e4670f4f..ea0969aa97 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -261,6 +261,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn widget::Operation, ) { let mut children = layout.children(); @@ -282,6 +283,7 @@ where controls.as_widget().operate( &mut tree.children[1], controls_layout, + renderer, operation, ) }; @@ -290,6 +292,7 @@ where self.content.as_widget().operate( &mut tree.children[0], title_layout, + renderer, operation, ) } diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index c689ac13f2..108e98e4a5 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -134,6 +134,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn Operation, ) { operation.container(None, &mut |operation| { @@ -142,7 +143,9 @@ where .zip(&mut tree.children) .zip(layout.children()) .for_each(|((child, state), layout)| { - child.as_widget().operate(state, layout, operation); + child + .as_widget() + .operate(state, layout, renderer, operation); }) }); } diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 1af0a6ab44..20780f899a 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -164,6 +164,7 @@ where &self, tree: &mut Tree, layout: Layout<'_>, + renderer: &Renderer, operation: &mut dyn Operation, ) { let state = tree.state.downcast_mut::(); @@ -174,6 +175,7 @@ where self.content.as_widget().operate( &mut tree.children[0], layout.children().next().unwrap(), + renderer, operation, ); }); diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 9391d1dd8f..05b47ff912 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -228,6 +228,7 @@ where &self, tree: &mut Tree, _layout: Layout<'_>, + _renderer: &Renderer, operation: &mut dyn Operation, ) { let state = tree.state.downcast_mut::(); From 5f2ec138d7b6793f781aab16ec59e0224ac4edef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 22 Dec 2022 14:32:25 +0100 Subject: [PATCH 2/2] Implement `Widget::operate` for `Responsive` --- lazy/src/responsive.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lazy/src/responsive.rs b/lazy/src/responsive.rs index 5e1b5dff1c..945c935aef 100644 --- a/lazy/src/responsive.rs +++ b/lazy/src/responsive.rs @@ -3,8 +3,8 @@ use iced_native::layout::{self, Layout}; use iced_native::mouse; use iced_native::overlay; use iced_native::renderer; -use iced_native::widget::horizontal_space; use iced_native::widget::tree::{self, Tree}; +use iced_native::widget::{self, horizontal_space}; use iced_native::{ Clipboard, Element, Length, Point, Rectangle, Shell, Size, Widget, }; @@ -142,6 +142,29 @@ where layout::Node::new(limits.max()) } + fn operate( + &self, + tree: &mut Tree, + layout: Layout<'_>, + renderer: &Renderer, + operation: &mut dyn widget::Operation, + ) { + let state = tree.state.downcast_mut::(); + let mut content = self.content.borrow_mut(); + + content.resolve( + &mut state.tree.borrow_mut(), + renderer, + layout, + &self.view, + |tree, renderer, layout, element| { + element + .as_widget() + .operate(tree, layout, renderer, operation); + }, + ); + } + fn on_event( &mut self, tree: &mut Tree,