From bbd9355450bc2df3a2c0e37cc900ba00b26255af Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 29 Nov 2021 16:22:01 +0700 Subject: Introduce `Shell` type in `iced_native` Widgets now can invalidate the current layout of the application on demand. --- lazy/src/component.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'lazy') diff --git a/lazy/src/component.rs b/lazy/src/component.rs index 6d57a2a9..aa5b847e 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -4,7 +4,7 @@ use iced_native::mouse; use iced_native::overlay; use iced_native::renderer; use iced_native::{ - Clipboard, Element, Hasher, Length, Point, Rectangle, Widget, + Clipboard, Element, Hasher, Length, Point, Rectangle, Shell, Widget, }; use ouroboros::self_referencing; @@ -91,9 +91,10 @@ where cursor_position: Point, renderer: &Renderer, clipboard: &mut dyn Clipboard, - messages: &mut Vec, + shell: &mut Shell<'_, Message>, ) -> event::Status { let mut local_messages = Vec::new(); + let mut local_shell = Shell::new(&mut local_messages); let event_status = self.state.as_mut().unwrap().with_cache_mut(|cache| { @@ -103,7 +104,7 @@ where cursor_position, renderer, clipboard, - &mut local_messages, + &mut local_shell, ) }); @@ -111,11 +112,12 @@ where let mut component = self.state.take().unwrap().into_heads().component; - messages.extend( - local_messages - .into_iter() - .filter_map(|message| component.update(message)), - ); + for message in local_messages + .into_iter() + .filter_map(|message| component.update(message)) + { + shell.publish(message); + } self.state = Some( StateBuilder { @@ -128,7 +130,7 @@ where .build(), ); - // TODO: Invalidate layout (!) + shell.invalidate_layout(); } event_status -- cgit