Introduce mouse_interaction method to Widget trait

This commit is contained in:
Héctor Ramón Jiménez 2021-10-18 16:43:18 +07:00
parent 7a876c8b29
commit be97a5d502
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
10 changed files with 152 additions and 21 deletions

View file

@ -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,
)
}
}