summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2022-11-18 12:09:18 -0800
committerLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2022-11-29 12:50:57 -0800
commit9a601c095420d3eba23df470becc112b928f9f62 (patch)
tree9b589ef8efe8ca6d1193b3735b41f9a4c3397bce /native
parent23da5a32515a2eaf567d35d1b81e4b8400a27219 (diff)
downloadiced-9a601c095420d3eba23df470becc112b928f9f62.tar.gz
iced-9a601c095420d3eba23df470becc112b928f9f62.tar.bz2
iced-9a601c095420d3eba23df470becc112b928f9f62.zip
Get widget operations working w/ overlay
Diffstat (limited to 'native')
-rw-r--r--native/src/overlay.rs2
-rw-r--r--native/src/overlay/element.rs4
-rw-r--r--native/src/user_interface.rs19
3 files changed, 15 insertions, 10 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs
index bcb1a2ee..0b05b058 100644
--- a/native/src/overlay.rs
+++ b/native/src/overlay.rs
@@ -44,7 +44,7 @@ where
/// Applies a [`widget::Operation`] to the [`Overlay`].
fn operate(
- &self,
+ &mut self,
_layout: Layout<'_>,
_operation: &mut dyn widget::Operation<Message>,
) {
diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs
index 09eee86d..4f5ef32a 100644
--- a/native/src/overlay/element.rs
+++ b/native/src/overlay/element.rs
@@ -106,7 +106,7 @@ where
/// Applies a [`widget::Operation`] to the [`Element`].
pub fn operate(
- &self,
+ &mut self,
layout: Layout<'_>,
operation: &mut dyn widget::Operation<Message>,
) {
@@ -142,7 +142,7 @@ where
}
fn operate(
- &self,
+ &mut self,
layout: Layout<'_>,
operation: &mut dyn widget::Operation<B>,
) {
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs
index 55c86a17..6b853da8 100644
--- a/native/src/user_interface.rs
+++ b/native/src/user_interface.rs
@@ -496,14 +496,19 @@ where
operation,
);
- if let Some(layout) = self.overlay.as_ref() {
- if let Some(overlay) = self.root.as_widget_mut().overlay(
- &mut self.state,
- Layout::new(&self.base),
- renderer,
- ) {
- overlay.operate(Layout::new(layout), operation);
+ if let Some(mut overlay) = self.root.as_widget_mut().overlay(
+ &mut self.state,
+ Layout::new(&self.base),
+ renderer,
+ ) {
+ if self.overlay.is_none() {
+ self.overlay = Some(overlay.layout(renderer, self.bounds));
}
+
+ overlay.operate(
+ Layout::new(self.overlay.as_ref().unwrap()),
+ operation,
+ );
}
}