From d9bee81505e7ad670cab61721839046fbf86fc43 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 3 Nov 2022 22:56:40 +0100 Subject: [PATCH] Don't register drag as tap. --- src/Avalonia.Base/Input/Gestures.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Base/Input/Gestures.cs b/src/Avalonia.Base/Input/Gestures.cs index 4349fca7db..d50abaa4b9 100644 --- a/src/Avalonia.Base/Input/Gestures.cs +++ b/src/Avalonia.Base/Input/Gestures.cs @@ -42,9 +42,8 @@ namespace Avalonia.Input RoutedEvent.Register( "PointerSwipeGesture", RoutingStrategies.Bubble, typeof(Gestures)); -#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. - private static readonly WeakReference s_lastPress = new WeakReference(null); -#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type. + private static readonly WeakReference s_lastPress = new WeakReference(null); + private static Point s_lastPressPoint; static Gestures() { @@ -98,6 +97,7 @@ namespace Avalonia.Input { s_isDoubleTapped = false; s_lastPress.SetTarget(ev.Source); + s_lastPressPoint = e.GetPosition((IVisual)ev.Source); } else if (e.ClickCount % 2 == 0 && e.GetCurrentPoint(visual).Properties.IsLeftButtonPressed) { @@ -120,9 +120,16 @@ namespace Avalonia.Input { var e = (PointerReleasedEventArgs)ev; - if (s_lastPress.TryGetTarget(out var target) && target == e.Source) + if (s_lastPress.TryGetTarget(out var target) && + target == e.Source && + e.InitialPressMouseButton is MouseButton.Left or MouseButton.Right) { - if (e.InitialPressMouseButton == MouseButton.Left || e.InitialPressMouseButton == MouseButton.Right) + var point = e.GetCurrentPoint((IVisual)target); + var tapSize = new Size(4, 4); + var tapRect = new Rect(s_lastPressPoint, new Size()) + .Inflate(new Thickness(tapSize.Width, tapSize.Height)); + + if (tapRect.ContainsExclusive(point.Position)) { if (e.InitialPressMouseButton == MouseButton.Right) {