summaryrefslogtreecommitdiffstats
path: root/native/src/user_interface.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/user_interface.rs')
-rw-r--r--native/src/user_interface.rs37
1 files changed, 22 insertions, 15 deletions
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs
index 29cc3472..2358bff1 100644
--- a/native/src/user_interface.rs
+++ b/native/src/user_interface.rs
@@ -6,7 +6,9 @@ use crate::mouse;
use crate::renderer;
use crate::widget;
use crate::window;
-use crate::{Clipboard, Element, Layout, Point, Rectangle, Shell, Size};
+use crate::{
+ Clipboard, Element, Layout, Point, Rectangle, Shell, Size, Vector,
+};
/// A set of interactive graphical elements with a specific [`Layout`].
///
@@ -203,7 +205,7 @@ where
let bounds = self.bounds;
let mut overlay = manual_overlay.as_mut().unwrap();
- let mut layout = overlay.layout(renderer, bounds);
+ let mut layout = overlay.layout(renderer, bounds, Vector::ZERO);
let mut event_statuses = Vec::new();
for event in events.iter().cloned() {
@@ -252,7 +254,7 @@ where
overlay = manual_overlay.as_mut().unwrap();
shell.revalidate_layout(|| {
- layout = overlay.layout(renderer, bounds);
+ layout = overlay.layout(renderer, bounds, Vector::ZERO);
});
}
@@ -261,12 +263,16 @@ where
}
}
- let base_cursor = if layout.bounds().contains(cursor_position) {
- // TODO: Type-safe cursor availability
- Point::new(-1.0, -1.0)
- } else {
- cursor_position
- };
+ let base_cursor = manual_overlay
+ .as_ref()
+ .filter(|overlay| {
+ overlay.is_over(Layout::new(&layout), cursor_position)
+ })
+ .map(|_| {
+ // TODO: Type-safe cursor availability
+ Point::new(-1.0, -1.0)
+ })
+ .unwrap_or(cursor_position);
self.overlay = Some(layout);
@@ -430,10 +436,9 @@ where
.as_widget_mut()
.overlay(&mut self.state, Layout::new(&self.base), renderer)
{
- let overlay_layout = self
- .overlay
- .take()
- .unwrap_or_else(|| overlay.layout(renderer, self.bounds));
+ let overlay_layout = self.overlay.take().unwrap_or_else(|| {
+ overlay.layout(renderer, self.bounds, Vector::ZERO)
+ });
let new_cursor_position =
if overlay_layout.bounds().contains(cursor_position) {
@@ -504,7 +509,8 @@ where
);
});
- if overlay_bounds.contains(cursor_position) {
+ if overlay.is_over(Layout::new(layout), cursor_position)
+ {
overlay_interaction
} else {
base_interaction
@@ -533,7 +539,8 @@ where
renderer,
) {
if self.overlay.is_none() {
- self.overlay = Some(overlay.layout(renderer, self.bounds));
+ self.overlay =
+ Some(overlay.layout(renderer, self.bounds, Vector::ZERO));
}
overlay.operate(