summaryrefslogtreecommitdiffstats
path: root/lazy
diff options
context:
space:
mode:
authorLibravatar tarkah <cforsstrom18@gmail.com>2022-08-07 14:43:54 -0700
committerLibravatar tarkah <cforsstrom18@gmail.com>2022-08-07 14:46:28 -0700
commita4d5b8276882e69bdafdd2e31a6db43e89622aaf (patch)
tree114d58d1430b154bbd1d0c217be90fe569c926af /lazy
parent8550550027bbe8123df5503fe616af8689a87360 (diff)
downloadiced-a4d5b8276882e69bdafdd2e31a6db43e89622aaf.tar.gz
iced-a4d5b8276882e69bdafdd2e31a6db43e89622aaf.tar.bz2
iced-a4d5b8276882e69bdafdd2e31a6db43e89622aaf.zip
Impl operate for Component widget
Diffstat (limited to 'lazy')
-rw-r--r--lazy/src/component.rs42
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,