diff options
author | 2022-03-07 15:36:09 +0700 | |
---|---|---|
committer | 2022-03-07 15:36:09 +0700 | |
commit | fbbb864aaa7d4163ffea9ccd39d8097568253c3e (patch) | |
tree | 0b000c1091b6f6b8fe060b0c9fbf542a4654f68d /native/src | |
parent | c35496d80fc542c9beeea39dec98eb5cdef07aaa (diff) | |
parent | 4411da25cfcfddab138dadd05e92f9bd4db1b763 (diff) | |
download | iced-fbbb864aaa7d4163ffea9ccd39d8097568253c3e.tar.gz iced-fbbb864aaa7d4163ffea9ccd39d8097568253c3e.tar.bz2 iced-fbbb864aaa7d4163ffea9ccd39d8097568253c3e.zip |
Merge branch 'master' into virtual-widgets
Diffstat (limited to 'native/src')
-rw-r--r-- | native/src/user_interface.rs | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 00015f8b..6fc6a479 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -345,30 +345,36 @@ where let viewport = Rectangle::with_size(self.bounds); - if let Some(layout) = &self.overlay { - let base_cursor = if layout.bounds().contains(cursor_position) { - Point::new(-1.0, -1.0) - } else { - cursor_position - }; + let base_cursor = if let Some(overlay) = + self.root.overlay(Layout::new(&self.base), renderer) + { + let overlay_layout = self + .overlay + .take() + .unwrap_or_else(|| overlay.layout(renderer, self.bounds)); - self.root.widget.draw( - renderer, - &renderer::Style::default(), - Layout::new(&self.base), - base_cursor, - &viewport, - ); + let new_cursor_position = + if overlay_layout.bounds().contains(cursor_position) { + Point::new(-1.0, -1.0) + } else { + cursor_position + }; + + self.overlay = Some(overlay_layout); + + new_cursor_position } else { - self.root.widget.draw( - renderer, - &renderer::Style::default(), - Layout::new(&self.base), - cursor_position, - &viewport, - ); + cursor_position }; + self.root.widget.draw( + renderer, + &renderer::Style::default(), + Layout::new(&self.base), + base_cursor, + &viewport, + ); + let base_interaction = self.root.widget.mouse_interaction( Layout::new(&self.base), cursor_position, |