diff options
Diffstat (limited to '')
| -rw-r--r-- | native/src/overlay.rs | 2 | ||||
| -rw-r--r-- | native/src/overlay/element.rs | 4 | ||||
| -rw-r--r-- | native/src/user_interface.rs | 19 | 
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, +            );          }      } | 
