From a50cc32d09ddff1d061701074908c28d5c5509ba Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Mon, 30 Jan 2023 05:01:28 +0100
Subject: Fix layout translation in `overlay::Group`

This bug produced improper positioning of overlays of elements inside a
`Scrollable`.
---
 native/src/overlay/element.rs | 10 ++++++++--
 native/src/overlay/group.rs   |  6 ++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

(limited to 'native/src/overlay')

diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs
index bdf7766e..237d25d1 100644
--- a/native/src/overlay/element.rs
+++ b/native/src/overlay/element.rs
@@ -53,8 +53,14 @@ where
     }
 
     /// Computes the layout of the [`Element`] in the given bounds.
-    pub fn layout(&self, renderer: &Renderer, bounds: Size) -> layout::Node {
-        self.overlay.layout(renderer, bounds, self.position)
+    pub fn layout(
+        &self,
+        renderer: &Renderer,
+        bounds: Size,
+        translation: Vector,
+    ) -> layout::Node {
+        self.overlay
+            .layout(renderer, bounds, self.position + translation)
     }
 
     /// Processes a runtime [`Event`].
diff --git a/native/src/overlay/group.rs b/native/src/overlay/group.rs
index 5c9cf809..1126f0cf 100644
--- a/native/src/overlay/group.rs
+++ b/native/src/overlay/group.rs
@@ -66,13 +66,15 @@ where
         &self,
         renderer: &Renderer,
         bounds: Size,
-        _position: Point,
+        position: Point,
     ) -> layout::Node {
+        let translation = position - Point::ORIGIN;
+
         layout::Node::with_children(
             bounds,
             self.children
                 .iter()
-                .map(|child| child.layout(renderer, bounds))
+                .map(|child| child.layout(renderer, bounds, translation))
                 .collect(),
         )
     }
-- 
cgit