Fix Overlay composition

Translations were not easily composable.
This commit is contained in:
Héctor Ramón Jiménez 2023-11-21 14:41:22 +01:00
parent 7dd32f3be4
commit 25006b9c6f
No known key found for this signature in database
GPG key ID: 0BF4EC06CD8E5686
10 changed files with 70 additions and 26 deletions

View file

@ -4,7 +4,9 @@ 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};
use crate::core::{
Clipboard, Event, Layout, Point, Rectangle, Shell, Size, Vector,
};
/// An overlay container that displays nested overlays
#[allow(missing_debug_implementations)]
@ -34,18 +36,18 @@ where
renderer: &Renderer,
bounds: Size,
position: Point,
translation: Vector,
) -> layout::Node {
fn recurse<Message, Renderer>(
element: &mut overlay::Element<'_, Message, Renderer>,
renderer: &Renderer,
bounds: Size,
position: Point,
translation: Vector,
) -> layout::Node
where
Renderer: renderer::Renderer,
{
let translation = position - Point::ORIGIN;
let node = element.layout(renderer, bounds, translation);
if let Some(mut nested) =
@ -55,7 +57,13 @@ where
node.size(),
vec![
node,
recurse(&mut nested, renderer, bounds, position),
recurse(
&mut nested,
renderer,
bounds,
position,
translation,
),
],
)
} else {
@ -63,7 +71,7 @@ where
}
}
recurse(&mut self.overlay, renderer, bounds, position)
recurse(&mut self.overlay, renderer, bounds, position, translation)
}
/// Draws the [`Nested`] overlay using the associated `Renderer`.