summaryrefslogtreecommitdiffstats
path: root/native/src/overlay
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-11-29 16:22:01 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-11-29 16:22:01 +0700
commitbbd9355450bc2df3a2c0e37cc900ba00b26255af (patch)
treea6cf758c934638e3dd9586781dfb62e1cf028572 /native/src/overlay
parentf7792d89d64c39cdde9da030bec80fb6f461a0e3 (diff)
downloadiced-bbd9355450bc2df3a2c0e37cc900ba00b26255af.tar.gz
iced-bbd9355450bc2df3a2c0e37cc900ba00b26255af.tar.bz2
iced-bbd9355450bc2df3a2c0e37cc900ba00b26255af.zip
Introduce `Shell` type in `iced_native`
Widgets now can invalidate the current layout of the application on demand.
Diffstat (limited to 'native/src/overlay')
-rw-r--r--native/src/overlay/element.rs17
-rw-r--r--native/src/overlay/menu.rs8
2 files changed, 12 insertions, 13 deletions
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<Message>,
+ 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<B>,
+ 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<Message>,
+ 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<Message>,
+ _shell: &mut Shell<'_, Message>,
) -> event::Status {
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => {