diff options
Diffstat (limited to 'lazy')
| -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,  | 
