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. --- native/src/overlay/element.rs | 17 ++++++++--------- native/src/overlay/menu.rs | 8 ++++---- 2 files changed, 12 insertions(+), 13 deletions(-) (limited to 'native/src/overlay') diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs index 24b39ced..70cb417e 100644 --- a/native/src/overlay/element.rs +++ b/native/src/overlay/element.rs @@ -4,7 +4,7 @@ use crate::event::{self, Event}; use crate::layout; use crate::mouse; use crate::renderer; -use crate::{Clipboard, Hasher, Layout, Point, Rectangle, Size, Vector}; +use crate::{Clipboard, Hasher, Layout, Point, Rectangle, Shell, Size, Vector}; /// A generic [`Overlay`]. #[allow(missing_debug_implementations)] @@ -62,7 +62,7 @@ where cursor_position: Point, renderer: &Renderer, clipboard: &mut dyn Clipboard, - messages: &mut Vec, + shell: &mut Shell<'_, Message>, ) -> event::Status { self.overlay.on_event( event, @@ -70,7 +70,7 @@ where cursor_position, renderer, clipboard, - messages, + shell, ) } @@ -136,9 +136,10 @@ where cursor_position: Point, renderer: &Renderer, clipboard: &mut dyn Clipboard, - messages: &mut Vec, + shell: &mut Shell<'_, B>, ) -> event::Status { - let mut original_messages = Vec::new(); + let mut local_messages = Vec::new(); + let mut local_shell = Shell::new(&mut local_messages); let event_status = self.content.on_event( event, @@ -146,12 +147,10 @@ where cursor_position, renderer, clipboard, - &mut original_messages, + &mut local_shell, ); - original_messages - .drain(..) - .for_each(|message| messages.push((self.mapper)(message))); + shell.merge(local_shell, self.mapper); event_status } diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index ee3bee6e..6776a3ee 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -11,7 +11,7 @@ use crate::widget::scrollable::{self, Scrollable}; use crate::widget::Container; use crate::{ Clipboard, Color, Element, Hasher, Layout, Length, Padding, Point, - Rectangle, Size, Vector, Widget, + Rectangle, Shell, Size, Vector, Widget, }; pub use iced_style::menu::Style; @@ -222,7 +222,7 @@ where cursor_position: Point, renderer: &Renderer, clipboard: &mut dyn Clipboard, - messages: &mut Vec, + shell: &mut Shell<'_, Message>, ) -> event::Status { self.container.on_event( event.clone(), @@ -230,7 +230,7 @@ where cursor_position, renderer, clipboard, - messages, + shell, ) } @@ -333,7 +333,7 @@ where cursor_position: Point, renderer: &Renderer, _clipboard: &mut dyn Clipboard, - _messages: &mut Vec, + _shell: &mut Shell<'_, Message>, ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { -- cgit