From a4d5b8276882e69bdafdd2e31a6db43e89622aaf Mon Sep 17 00:00:00 2001 From: tarkah Date: Sun, 7 Aug 2022 14:43:54 -0700 Subject: Impl operate for Component widget --- lazy/src/component.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'lazy/src/component.rs') 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, + ) { + struct MapOperation<'a, B> { + operation: &'a mut dyn widget::Operation, + } + + impl<'a, T, B> widget::Operation for MapOperation<'a, B> { + fn container( + &mut self, + id: Option<&widget::Id>, + operate_on_children: &mut dyn FnMut( + &mut dyn widget::Operation, + ), + ) { + 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, -- cgit