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
release/11.1.0-rc1
Emmanuel Hansen 2 years ago
committed by Max Katz
parent
commit
de72a9609d
  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.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<IPlatformSettings>()?.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<ScrollGestureRecognizer, int> ScrollStartDistanceProperty =
AvaloniaProperty.RegisterDirect<ScrollGestureRecognizer, int>(nameof(ScrollStartDistance),
o => o.ScrollStartDistance, (o, v) => o.ScrollStartDistance = v,
unsetValue: 30);
unsetValue: s_defaultScrollStartDistance);
/// <summary>
/// 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.CaptureGestureRecognizer(null);
_pointer.IsGestureRecognitionSkipped = false;
_lastMouseDownButton = default;
}
return e.Handled;

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

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

2
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;
}
}

4
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;
}
}
}

Loading…
Cancel
Save