diff options
author | 2021-10-18 16:43:18 +0700 | |
---|---|---|
committer | 2021-10-18 16:43:18 +0700 | |
commit | be97a5d502df8c8b23704f5a8a0d425f4eff2215 (patch) | |
tree | 187f0477534c5d5c783ef06686e2209bbf4f3b80 /native/src/user_interface.rs | |
parent | 7a876c8b2918ae90cedfd82d1881cf6406811eeb (diff) | |
download | iced-be97a5d502df8c8b23704f5a8a0d425f4eff2215.tar.gz iced-be97a5d502df8c8b23704f5a8a0d425f4eff2215.tar.bz2 iced-be97a5d502df8c8b23704f5a8a0d425f4eff2215.zip |
Introduce `mouse_interaction` method to `Widget` trait
Diffstat (limited to 'native/src/user_interface.rs')
-rw-r--r-- | native/src/user_interface.rs | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 2f76c084..d9338524 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -1,5 +1,6 @@ use crate::event::{self, Event}; use crate::layout; +use crate::mouse; use crate::overlay; use crate::renderer; use crate::{Clipboard, Element, Layout, Point, Rectangle, Size, Vector}; @@ -330,7 +331,11 @@ where /// // Flush rendering operations... /// } /// ``` - pub fn draw(&mut self, renderer: &mut Renderer, cursor_position: Point) { + pub fn draw( + &mut self, + renderer: &mut Renderer, + cursor_position: Point, + ) -> mouse::Interaction { // TODO: Move to shell level (?) renderer.clear(); @@ -346,6 +351,12 @@ where renderer, ); + let mouse_interaction = overlay.mouse_interaction( + Layout::new(&layer.layout), + &viewport, + cursor_position, + ); + let overlay_bounds = layer.layout.bounds(); renderer.with_layer( @@ -363,12 +374,12 @@ where self.overlay = Some(layer); - Some(overlay_bounds) + Some((overlay_bounds, mouse_interaction)) } else { None }; - if let Some(overlay_bounds) = overlay { + if let Some((overlay_bounds, overlay_interaction)) = overlay { let base_cursor = if overlay_bounds.contains(cursor_position) { Point::new(-1.0, -1.0) } else { @@ -382,6 +393,8 @@ where base_cursor, &viewport, ); + + overlay_interaction } else { self.root.widget.draw( renderer, @@ -390,6 +403,12 @@ where cursor_position, &viewport, ); + + self.root.widget.mouse_interaction( + Layout::new(&self.base.layout), + &viewport, + cursor_position, + ) } } |