diff options
-rw-r--r-- | lazy/src/component.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lazy/src/component.rs b/lazy/src/component.rs index ea4d7311..8987b993 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -4,6 +4,7 @@ use iced_native::layout::{self, Layout}; use iced_native::mouse; use iced_native::overlay; use iced_native::renderer; +use iced_native::widget; use iced_native::widget::tree::{self, Tree}; use iced_native::{ Clipboard, Element, Length, Point, Rectangle, Shell, Size, Widget, @@ -229,6 +230,47 @@ where event_status } + fn operate( + &self, + tree: &mut Tree, + layout: Layout<'_>, + operation: &mut dyn widget::Operation<Message>, + ) { + struct MapOperation<'a, B> { + operation: &'a mut dyn widget::Operation<B>, + } + + impl<'a, T, B> widget::Operation<T> for MapOperation<'a, B> { + fn container( + &mut self, + id: Option<&widget::Id>, + operate_on_children: &mut dyn FnMut( + &mut dyn widget::Operation<T>, + ), + ) { + self.operation.container(id, &mut |operation| { + operate_on_children(&mut MapOperation { operation }); + }); + } + + fn focusable( + &mut self, + state: &mut dyn widget::operation::Focusable, + id: Option<&widget::Id>, + ) { + self.operation.focusable(state, id); + } + } + + self.with_element(|element| { + element.as_widget().operate( + &mut tree.children[0], + layout, + &mut MapOperation { operation }, + ); + }); + } + fn draw( &self, tree: &Tree, |