Browse Source

Use tap size as default size for scrolling start. reset IsGestureRecognitionSkipped when pointer is released (#15524)

* use tap size as default size for scrolling start. reset IsGestureRecognitionSkipped when pointer is released

* use static default constant for scroll distance

* fix typo
pull/15562/head
Emmanuel Hansen 2 years ago
committed by GitHub
parent
commit
a17e76ee6b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs
  2. 1
      src/Avalonia.Base/Input/MouseDevice.cs
  3. 1
      src/Avalonia.Base/Input/PenDevice.cs
  4. 2
      src/Avalonia.Base/Input/TouchDevice.cs
  5. 4
      tests/Avalonia.UnitTests/TouchTestHelper.cs

6
src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using Avalonia.Platform;
using Avalonia.Threading; using Avalonia.Threading;
namespace Avalonia.Input.GestureRecognizers namespace Avalonia.Input.GestureRecognizers
@ -13,7 +14,8 @@ namespace Avalonia.Input.GestureRecognizers
private bool _canHorizontallyScroll; private bool _canHorizontallyScroll;
private bool _canVerticallyScroll; private bool _canVerticallyScroll;
private bool _isScrollInertiaEnabled; private bool _isScrollInertiaEnabled;
private int _scrollStartDistance = 30; private readonly static int s_defaultScrollStartDistance = (int)((AvaloniaLocator.Current?.GetService<IPlatformSettings>()?.GetTapSize(PointerType.Touch).Height ?? 10) / 2);
private int _scrollStartDistance = s_defaultScrollStartDistance;
private bool _scrolling; private bool _scrolling;
private Point _trackedRootPoint; private Point _trackedRootPoint;
@ -54,7 +56,7 @@ namespace Avalonia.Input.GestureRecognizers
public static readonly DirectProperty<ScrollGestureRecognizer, int> ScrollStartDistanceProperty = public static readonly DirectProperty<ScrollGestureRecognizer, int> ScrollStartDistanceProperty =
AvaloniaProperty.RegisterDirect<ScrollGestureRecognizer, int>(nameof(ScrollStartDistance), AvaloniaProperty.RegisterDirect<ScrollGestureRecognizer, int>(nameof(ScrollStartDistance),
o => o.ScrollStartDistance, (o, v) => o.ScrollStartDistance = v, o => o.ScrollStartDistance, (o, v) => o.ScrollStartDistance = v,
unsetValue: 30); unsetValue: s_defaultScrollStartDistance);
/// <summary> /// <summary>
/// Gets or sets a value indicating whether the content can be scrolled horizontally. /// Gets or sets a value indicating whether the content can be scrolled horizontally.

1
src/Avalonia.Base/Input/MouseDevice.cs

@ -205,6 +205,7 @@ namespace Avalonia.Input
{ {
_pointer.Capture(null); _pointer.Capture(null);
_pointer.CaptureGestureRecognizer(null); _pointer.CaptureGestureRecognizer(null);
_pointer.IsGestureRecognitionSkipped = false;
_lastMouseDownButton = default; _lastMouseDownButton = default;
} }
return e.Handled; return e.Handled;

1
src/Avalonia.Base/Input/PenDevice.cs

@ -167,6 +167,7 @@ namespace Avalonia.Input
{ {
pointer.Capture(null); pointer.Capture(null);
pointer.CaptureGestureRecognizer(null); pointer.CaptureGestureRecognizer(null);
pointer.IsGestureRecognitionSkipped = false;
_lastMouseDownButton = default; _lastMouseDownButton = default;
} }

2
src/Avalonia.Base/Input/TouchDevice.cs

@ -119,6 +119,8 @@ namespace Avalonia.Input
{ {
pointer?.Capture(null); pointer?.Capture(null);
pointer?.CaptureGestureRecognizer(null); pointer?.CaptureGestureRecognizer(null);
if (pointer != null)
pointer.IsGestureRecognitionSkipped = false;
} }
} }

4
tests/Avalonia.UnitTests/TouchTestHelper.cs

@ -49,8 +49,7 @@ namespace Avalonia.UnitTests
else else
source.RaiseEvent(e); source.RaiseEvent(e);
_pointer.Capture(null); Cancel();
_pointer.CaptureGestureRecognizer(null);
} }
public void Tap(Interactive target, Point position = default, KeyModifiers modifiers = default) public void Tap(Interactive target, Point position = default, KeyModifiers modifiers = default)
@ -66,6 +65,7 @@ namespace Avalonia.UnitTests
{ {
_pointer.Capture(null); _pointer.Capture(null);
_pointer.CaptureGestureRecognizer(null); _pointer.CaptureGestureRecognizer(null);
_pointer.IsGestureRecognitionSkipped = false;
} }
} }
} }

Loading…
Cancel
Save