diff options
author | 2022-07-28 03:53:47 +0200 | |
---|---|---|
committer | 2022-07-28 03:53:47 +0200 | |
commit | 52f84e51e90db1c324310565f2aff8b7e6987cba (patch) | |
tree | 721ef64dd91e0aca0e490971c8e1ee44ca912957 /native/src/element.rs | |
parent | 80688689aa4b15bc23824df899974a9094a77b07 (diff) | |
download | iced-52f84e51e90db1c324310565f2aff8b7e6987cba.tar.gz iced-52f84e51e90db1c324310565f2aff8b7e6987cba.tar.bz2 iced-52f84e51e90db1c324310565f2aff8b7e6987cba.zip |
Implement `Widget::operate` for `TextInput`
Diffstat (limited to 'native/src/element.rs')
-rw-r--r-- | native/src/element.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index cc74035e..01b71aa4 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -3,6 +3,7 @@ use crate::layout; use crate::mouse; use crate::overlay; use crate::renderer; +use crate::widget; use crate::widget::tree::{self, Tree}; use crate::{Clipboard, Layout, Length, Point, Rectangle, Shell, Widget}; @@ -248,6 +249,42 @@ where self.widget.layout(renderer, limits) } + fn operate( + &self, + tree: &mut Tree, + layout: Layout<'_>, + operation: &mut dyn widget::Operation<B>, + ) { + 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::state::Focusable, + id: Option<&widget::Id>, + ) { + self.operation.focusable(state, id); + } + } + + self.widget + .operate(tree, layout, &mut MapOperation { operation }); + } + fn on_event( &mut self, tree: &mut Tree, |