From c5bb77f3e3a07857b4f615fe5fdbc92dad444c11 Mon Sep 17 00:00:00 2001 From: donandren Date: Thu, 3 Nov 2016 18:20:35 +0200 Subject: [PATCH 1/2] PointToClient fixed --- src/Avalonia.Visuals/VisualExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/VisualExtensions.cs b/src/Avalonia.Visuals/VisualExtensions.cs index 6e55070702..226e616369 100644 --- a/src/Avalonia.Visuals/VisualExtensions.cs +++ b/src/Avalonia.Visuals/VisualExtensions.cs @@ -30,7 +30,7 @@ namespace Avalonia public static Point PointToClient(this IVisual visual, Point point) { var p = GetRootAndPosition(visual); - return p.Item1.PointToClient(point + p.Item2); + return p.Item1.PointToClient(point - p.Item2); } /// From 80ce8412c052676141f8dd3b42d616983e18f2af Mon Sep 17 00:00:00 2001 From: donandren Date: Thu, 3 Nov 2016 18:31:33 +0200 Subject: [PATCH 2/2] added usefull TransalePoint extension method to IVisual --- src/Avalonia.Visuals/VisualExtensions.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Avalonia.Visuals/VisualExtensions.cs b/src/Avalonia.Visuals/VisualExtensions.cs index 226e616369..d69785cc59 100644 --- a/src/Avalonia.Visuals/VisualExtensions.cs +++ b/src/Avalonia.Visuals/VisualExtensions.cs @@ -45,6 +45,22 @@ namespace Avalonia return p.Item1.PointToScreen(point + p.Item2); } + /// + /// Translates a point relative to this visual to coordinates that are relative to the specified visual. + /// The visual and relativeTo should be descendants of the same root window + /// + /// The visual. + /// The point value, as relative to this visual. + /// The visual to translate the given point into. + /// A point value, now relative to the target visual rather than this source element. + public static Point TranslatePoint(this IVisual visual, Point point, IVisual relativeTo) + { + var pos = GetRootAndPosition(visual); + var relToPos = GetRootAndPosition(relativeTo); + + return point - (relToPos.Item2 - pos.Item2); + } + /// /// Gets the root of the control's visual tree and the position of the control /// in the root's coordinate space.