Remove interior mutability

Nested doesn't need to implement Overlay trait, it can be be used
mutably in user interface so we don't need interior mutability.
This commit is contained in:
Cory Forsstrom 2023-02-18 19:03:52 -08:00 committed by Héctor Ramón Jiménez
parent 3e6f6eedcb
commit 83140d6049
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 43 additions and 81 deletions

View file

@ -8,7 +8,7 @@ use crate::core::renderer;
use crate::core::widget;
use crate::core::window;
use crate::core::{Clipboard, Point, Rectangle, Size};
use crate::core::{Element, Layout, Overlay, Shell};
use crate::core::{Element, Layout, Shell};
/// A set of interactive graphical elements with a specific [`Layout`].
///
@ -261,22 +261,23 @@ where
}
}
let base_cursor = manual_overlay
.as_ref()
.filter(|overlay| {
cursor
.position()
.map(|cursor_position| {
overlay.is_over(
Layout::new(&layout),
renderer,
cursor_position,
)
})
.unwrap_or_default()
let base_cursor = if manual_overlay
.as_mut()
.and_then(|overlay| {
cursor.position().map(|cursor_position| {
overlay.is_over(
Layout::new(&layout),
renderer,
cursor_position,
)
})
})
.map(|_| mouse::Cursor::Unavailable)
.unwrap_or(cursor);
.unwrap_or_default()
{
mouse::Cursor::Unavailable
} else {
cursor
};
self.overlay = Some(layout);
@ -434,7 +435,7 @@ where
let viewport = Rectangle::with_size(self.bounds);
let base_cursor = if let Some(overlay) = self
let base_cursor = if let Some(mut overlay) = self
.root
.as_widget_mut()
.overlay(&mut self.state, Layout::new(&self.base), renderer)
@ -503,7 +504,7 @@ where
root.as_widget_mut()
.overlay(&mut self.state, Layout::new(base), renderer)
.map(overlay::Nested::new)
.map(|overlay| {
.map(|mut overlay| {
let overlay_interaction = overlay.mouse_interaction(
Layout::new(layout),
cursor,