From 974fb3bc4425095ce367a32573888ef1c32c1ab8 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 30 Apr 2025 20:10:02 -0700 Subject: [PATCH] Only start ScrollGesture when left click pressed, also `GetCurrentPoint(null)` behaves the same as root visual --- .../GestureRecognizers/ScrollGestureRecognizer.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs b/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs index 469ad1e6e9..09da0fe2ea 100644 --- a/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs +++ b/src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs @@ -23,7 +23,6 @@ namespace Avalonia.Input.GestureRecognizers private int _gestureId; private Point _pointerPressedPoint; private VelocityTracker? _velocityTracker; - private Visual? _rootTarget; // Movement per second private Vector _inertia; @@ -96,13 +95,15 @@ namespace Avalonia.Input.GestureRecognizers protected override void PointerPressed(PointerPressedEventArgs e) { - if (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen) + var point = e.GetCurrentPoint(null); + + if (e.Pointer.Type is PointerType.Touch or PointerType.Pen + && point.Properties.IsLeftButtonPressed) { EndGesture(); _tracking = e.Pointer; _gestureId = ScrollGestureEventArgs.GetNextFreeId(); - _rootTarget = (Visual?)(Target as Visual)?.VisualRoot; - _trackedRootPoint = _pointerPressedPoint = e.GetPosition(_rootTarget); + _trackedRootPoint = _pointerPressedPoint = point.Position; _velocityTracker = new VelocityTracker(); _velocityTracker?.AddPosition(TimeSpan.FromMilliseconds(e.Timestamp), default); } @@ -112,7 +113,7 @@ namespace Avalonia.Input.GestureRecognizers { if (e.Pointer == _tracking) { - var rootPoint = e.GetPosition(_rootTarget); + var rootPoint = e.GetPosition(null); if (!_scrolling) { if (CanHorizontallyScroll && Math.Abs(_trackedRootPoint.X - rootPoint.X) > ScrollStartDistance) @@ -159,7 +160,6 @@ namespace Avalonia.Input.GestureRecognizers Target!.RaiseEvent(new ScrollGestureEndedEventArgs(_gestureId)); _gestureId = 0; _lastMoveTimestamp = null; - _rootTarget = null; } }