Remove now redundant Overlay::is_over

The `mouse_interaction` method can be properly used
now to encode hover status with the `None` and `Idle`
variants.
This commit is contained in:
Héctor Ramón Jiménez 2025-05-02 21:23:17 +02:00
parent a01beefa84
commit 9e934fe2a7
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
15 changed files with 92 additions and 256 deletions

View file

@ -270,11 +270,11 @@ where
.as_mut()
.and_then(|overlay| {
cursor.position().map(|cursor_position| {
overlay.is_over(
overlay.mouse_interaction(
Layout::new(&layout),
mouse::Cursor::Available(cursor_position),
renderer,
cursor_position,
)
) != mouse::Interaction::None
})
})
.unwrap_or_default()
@ -439,7 +439,7 @@ where
let viewport = Rectangle::with_size(self.bounds);
let base_cursor = if let Some(mut overlay) = self
let (base_cursor, overlay_interaction) = if let Some(mut overlay) = self
.root
.as_widget_mut()
.overlay(
@ -456,27 +456,31 @@ where
.take()
.unwrap_or_else(|| overlay.layout(renderer, self.bounds));
let cursor = if cursor
.position()
.map(|cursor_position| {
overlay.is_over(
Layout::new(&overlay_layout),
renderer,
cursor_position,
)
})
.unwrap_or_default()
{
mouse::Cursor::Unavailable
} else {
cursor
let (cursor, overlay_interaction) = {
let overlay_interaction =
cursor.position().map(|cursor_position| {
overlay.mouse_interaction(
Layout::new(&overlay_layout),
mouse::Cursor::Available(cursor_position),
renderer,
)
});
match overlay_interaction {
Some(mouse::Interaction::None) | None => {
(cursor, mouse::Interaction::None)
}
Some(interaction) => {
(mouse::Cursor::Unavailable, interaction)
}
}
};
self.overlay = Some(overlay_layout);
cursor
(cursor, overlay_interaction)
} else {
cursor
(cursor, mouse::Interaction::None)
};
self.root.as_widget().draw(
@ -522,13 +526,6 @@ where
)
.map(overlay::Nested::new)
.map(|mut overlay| {
let overlay_interaction = overlay.mouse_interaction(
Layout::new(layout),
cursor,
&viewport,
renderer,
);
overlay.draw(
renderer,
theme,
@ -537,8 +534,7 @@ where
cursor,
);
if overlay_interaction != mouse::Interaction::default()
{
if overlay_interaction != mouse::Interaction::None {
overlay_interaction
} else {
base_interaction