diff --git a/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs b/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs index baaf63f112..469ad1e6e9 100644 --- a/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs +++ b/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using Avalonia.Platform; using Avalonia.Threading; namespace Avalonia.Input.GestureRecognizers @@ -13,7 +14,8 @@ namespace Avalonia.Input.GestureRecognizers private bool _canHorizontallyScroll; private bool _canVerticallyScroll; private bool _isScrollInertiaEnabled; - private int _scrollStartDistance = 30; + private readonly static int s_defaultScrollStartDistance = (int)((AvaloniaLocator.Current?.GetService()?.GetTapSize(PointerType.Touch).Height ?? 10) / 2); + private int _scrollStartDistance = s_defaultScrollStartDistance; private bool _scrolling; private Point _trackedRootPoint; @@ -54,7 +56,7 @@ namespace Avalonia.Input.GestureRecognizers public static readonly DirectProperty ScrollStartDistanceProperty = AvaloniaProperty.RegisterDirect(nameof(ScrollStartDistance), o => o.ScrollStartDistance, (o, v) => o.ScrollStartDistance = v, - unsetValue: 30); + unsetValue: s_defaultScrollStartDistance); /// /// Gets or sets a value indicating whether the content can be scrolled horizontally. diff --git a/src/Avalonia.Base/Input/MouseDevice.cs b/src/Avalonia.Base/Input/MouseDevice.cs index b97036c7dd..9624bd2ef6 100644 --- a/src/Avalonia.Base/Input/MouseDevice.cs +++ b/src/Avalonia.Base/Input/MouseDevice.cs @@ -205,6 +205,7 @@ namespace Avalonia.Input { _pointer.Capture(null); _pointer.CaptureGestureRecognizer(null); + _pointer.IsGestureRecognitionSkipped = false; _lastMouseDownButton = default; } return e.Handled; diff --git a/src/Avalonia.Base/Input/PenDevice.cs b/src/Avalonia.Base/Input/PenDevice.cs index 128a49e13b..f8cb713e73 100644 --- a/src/Avalonia.Base/Input/PenDevice.cs +++ b/src/Avalonia.Base/Input/PenDevice.cs @@ -167,6 +167,7 @@ namespace Avalonia.Input { pointer.Capture(null); pointer.CaptureGestureRecognizer(null); + pointer.IsGestureRecognitionSkipped = false; _lastMouseDownButton = default; } diff --git a/src/Avalonia.Base/Input/TouchDevice.cs b/src/Avalonia.Base/Input/TouchDevice.cs index ca0af28713..cc80457226 100644 --- a/src/Avalonia.Base/Input/TouchDevice.cs +++ b/src/Avalonia.Base/Input/TouchDevice.cs @@ -119,6 +119,8 @@ namespace Avalonia.Input { pointer?.Capture(null); pointer?.CaptureGestureRecognizer(null); + if (pointer != null) + pointer.IsGestureRecognitionSkipped = false; } } diff --git a/tests/Avalonia.UnitTests/TouchTestHelper.cs b/tests/Avalonia.UnitTests/TouchTestHelper.cs index 120b0c0670..a44ab8a43c 100644 --- a/tests/Avalonia.UnitTests/TouchTestHelper.cs +++ b/tests/Avalonia.UnitTests/TouchTestHelper.cs @@ -49,8 +49,7 @@ namespace Avalonia.UnitTests else source.RaiseEvent(e); - _pointer.Capture(null); - _pointer.CaptureGestureRecognizer(null); + Cancel(); } public void Tap(Interactive target, Point position = default, KeyModifiers modifiers = default) @@ -66,6 +65,7 @@ namespace Avalonia.UnitTests { _pointer.Capture(null); _pointer.CaptureGestureRecognizer(null); + _pointer.IsGestureRecognitionSkipped = false; } } }