From 7c5802efcfbbbf27a6f1a437b27ee2f3f1a9a85b Mon Sep 17 00:00:00 2001 From: ahopper Date: Tue, 20 Nov 2018 22:12:55 +0000 Subject: [PATCH] change name and check invalidate rect --- src/Avalonia.Controls/TopLevel.cs | 6 +++--- src/Avalonia.Input/IPointerDevice.cs | 2 +- src/Avalonia.Input/MouseDevice.cs | 19 ++++++++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 082fc8858d..10419131eb 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -230,7 +230,7 @@ namespace Avalonia.Controls void IRenderRoot.Invalidate(Rect rect) { PlatformImpl?.Invalidate(rect); - UpdatePointerOver(); + UpdatePointerOver(rect); } /// @@ -351,9 +351,9 @@ namespace Avalonia.Controls _inputManager.ProcessInput(e); } - private void UpdatePointerOver() + private void UpdatePointerOver(Rect rect) { - (this as IInputRoot).MouseDevice.LayoutUpdated(this); + (this as IInputRoot).MouseDevice.SceneInvalidated(this, rect); } } } diff --git a/src/Avalonia.Input/IPointerDevice.cs b/src/Avalonia.Input/IPointerDevice.cs index d7e7077429..932cbc989f 100644 --- a/src/Avalonia.Input/IPointerDevice.cs +++ b/src/Avalonia.Input/IPointerDevice.cs @@ -13,6 +13,6 @@ namespace Avalonia.Input Point GetPosition(IVisual relativeTo); - void LayoutUpdated(IInputRoot root); + void SceneInvalidated(IInputRoot root, Rect rect); } } diff --git a/src/Avalonia.Input/MouseDevice.cs b/src/Avalonia.Input/MouseDevice.cs index 916827775a..a4f0020ea3 100644 --- a/src/Avalonia.Input/MouseDevice.cs +++ b/src/Avalonia.Input/MouseDevice.cs @@ -104,16 +104,21 @@ namespace Avalonia.Input ProcessRawEvent(margs); } - public void LayoutUpdated(IInputRoot root) + public void SceneInvalidated(IInputRoot root, Rect rect) { - if (Captured == null) + var clientPoint = root.PointToClient(Position); + + if (rect.Contains(clientPoint)) { - SetPointerOver(this, root, root.PointToClient(Position)); + if (Captured == null) + { + SetPointerOver(this, root, clientPoint); + } + else + { + SetPointerOver(this, root, Captured); + } } - else - { - SetPointerOver(this, root, Captured); - } } private void ProcessRawEvent(RawMouseEventArgs e)