Remove position from overlay::Element

This commit is contained in:
Héctor Ramón Jiménez 2024-02-01 01:08:21 +01:00
parent 7bbe450217
commit 738aa47547
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
27 changed files with 230 additions and 283 deletions

View file

@ -4,9 +4,7 @@ use crate::core::mouse;
use crate::core::overlay;
use crate::core::renderer;
use crate::core::widget;
use crate::core::{
Clipboard, Event, Layout, Point, Rectangle, Shell, Size, Vector,
};
use crate::core::{Clipboard, Event, Layout, Point, Rectangle, Shell, Size};
/// An overlay container that displays nested overlays
#[allow(missing_debug_implementations)]
@ -25,11 +23,6 @@ where
Self { overlay: element }
}
/// Returns the position of the [`Nested`] overlay.
pub fn position(&self) -> Point {
self.overlay.position()
}
/// Returns the layout [`Node`] of the [`Nested`] overlay.
///
/// [`Node`]: layout::Node
@ -37,36 +30,30 @@ where
&mut self,
renderer: &Renderer,
bounds: Size,
_position: Point,
translation: Vector,
) -> layout::Node {
fn recurse<Message, Theme, Renderer>(
element: &mut overlay::Element<'_, Message, Theme, Renderer>,
renderer: &Renderer,
bounds: Size,
translation: Vector,
) -> layout::Node
where
Renderer: renderer::Renderer,
{
let node = element.layout(renderer, bounds, translation);
let node = element.layout(renderer, bounds);
if let Some(mut nested) =
element.overlay(Layout::new(&node), renderer)
{
layout::Node::with_children(
node.size(),
vec![
node,
recurse(&mut nested, renderer, bounds, translation),
],
vec![node, recurse(&mut nested, renderer, bounds)],
)
} else {
layout::Node::with_children(node.size(), vec![node])
}
}
recurse(&mut self.overlay, renderer, bounds, translation)
recurse(&mut self.overlay, renderer, bounds)
}
/// Draws the [`Nested`] overlay using the associated `Renderer`.

View file

@ -5,9 +5,7 @@ use crate::core::mouse;
use crate::core::renderer;
use crate::core::widget;
use crate::core::window;
use crate::core::{
Clipboard, Element, Layout, Point, Rectangle, Shell, Size, Vector,
};
use crate::core::{Clipboard, Element, Layout, Rectangle, Shell, Size, Vector};
use crate::overlay;
/// A set of interactive graphical elements with a specific [`Layout`].
@ -193,7 +191,12 @@ where
let mut manual_overlay = ManuallyDrop::new(
self.root
.as_widget_mut()
.overlay(&mut self.state, Layout::new(&self.base), renderer)
.overlay(
&mut self.state,
Layout::new(&self.base),
renderer,
Vector::ZERO,
)
.map(overlay::Nested::new),
);
@ -201,8 +204,7 @@ where
let bounds = self.bounds;
let mut overlay = manual_overlay.as_mut().unwrap();
let mut layout =
overlay.layout(renderer, bounds, Point::ORIGIN, Vector::ZERO);
let mut layout = overlay.layout(renderer, bounds);
let mut event_statuses = Vec::new();
for event in events.iter().cloned() {
@ -245,6 +247,7 @@ where
&mut self.state,
Layout::new(&self.base),
renderer,
Vector::ZERO,
)
.map(overlay::Nested::new),
);
@ -256,12 +259,7 @@ where
overlay = manual_overlay.as_mut().unwrap();
shell.revalidate_layout(|| {
layout = overlay.layout(
renderer,
bounds,
Point::ORIGIN,
Vector::ZERO,
);
layout = overlay.layout(renderer, bounds);
});
}
@ -451,17 +449,18 @@ where
let base_cursor = if let Some(mut overlay) = self
.root
.as_widget_mut()
.overlay(&mut self.state, Layout::new(&self.base), renderer)
.overlay(
&mut self.state,
Layout::new(&self.base),
renderer,
Vector::ZERO,
)
.map(overlay::Nested::new)
{
let overlay_layout = self.overlay.take().unwrap_or_else(|| {
overlay.layout(
renderer,
self.bounds,
Point::ORIGIN,
Vector::ZERO,
)
});
let overlay_layout = self
.overlay
.take()
.unwrap_or_else(|| overlay.layout(renderer, self.bounds));
let cursor = if cursor
.position()
@ -520,7 +519,12 @@ where
.as_ref()
.and_then(|layout| {
root.as_widget_mut()
.overlay(&mut self.state, Layout::new(base), renderer)
.overlay(
&mut self.state,
Layout::new(base),
renderer,
Vector::ZERO,
)
.map(overlay::Nested::new)
.map(|mut overlay| {
let overlay_interaction = overlay.mouse_interaction(
@ -574,16 +578,16 @@ where
if let Some(mut overlay) = self
.root
.as_widget_mut()
.overlay(&mut self.state, Layout::new(&self.base), renderer)
.overlay(
&mut self.state,
Layout::new(&self.base),
renderer,
Vector::ZERO,
)
.map(overlay::Nested::new)
{
if self.overlay.is_none() {
self.overlay = Some(overlay.layout(
renderer,
self.bounds,
Point::ORIGIN,
Vector::ZERO,
));
self.overlay = Some(overlay.layout(renderer, self.bounds));
}
overlay.operate(