Browse Source

remove GestureRecognizer.Initialize

pull/11518/head
Emmanuel Hansen 3 years ago
parent
commit
0ac73d1a73
  1. 12
      src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizer.cs
  2. 2
      src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizerCollection.cs
  3. 16
      src/Avalonia.Base/Input/GestureRecognizers/PinchGestureRecognizer.cs
  4. 17
      src/Avalonia.Base/Input/GestureRecognizers/PullGestureRecognizer.cs
  5. 20
      src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs

12
src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizer.cs

@ -1,15 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Avalonia.Input.GestureRecognizers
namespace Avalonia.Input.GestureRecognizers
{
public abstract class GestureRecognizer : StyledElement
{
public abstract IInputElement? Target { get; }
public abstract void Initialize(IInputElement target);
protected internal IInputElement? Target { get; internal set; }
public abstract void PointerPressed(PointerPressedEventArgs e);
public abstract void PointerReleased(PointerReleasedEventArgs e);
public abstract void PointerMoved(PointerEventArgs e);

2
src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizerCollection.cs

@ -25,7 +25,7 @@ namespace Avalonia.Input.GestureRecognizers
}
_recognizers.Add(recognizer);
recognizer.Initialize(_inputElement);
recognizer.Target = _inputElement;
// Hacks to make bindings work

16
src/Avalonia.Base/Input/GestureRecognizers/PinchGestureRecognizer.cs

@ -4,7 +4,6 @@ namespace Avalonia.Input
{
public class PinchGestureRecognizer : GestureRecognizer
{
private IInputElement? _target;
private float _initialDistance;
private IPointer? _firstContact;
private Point _firstPoint;
@ -12,13 +11,6 @@ namespace Avalonia.Input
private Point _secondPoint;
private Point _origin;
public override IInputElement? Target => _target;
public override void Initialize(IInputElement target)
{
_target = target;
}
private void OnPointerPressed(object? sender, PointerPressedEventArgs e)
{
PointerPressed(e);
@ -36,7 +28,7 @@ namespace Avalonia.Input
public override void PointerMoved(PointerEventArgs e)
{
if (_target != null && _target is Visual visual)
if (Target != null && Target is Visual visual)
{
if(_firstContact == e.Pointer)
{
@ -58,7 +50,7 @@ namespace Avalonia.Input
var scale = distance / _initialDistance;
var pinchEventArgs = new PinchEventArgs(scale, _origin);
_target?.RaiseEvent(pinchEventArgs);
Target?.RaiseEvent(pinchEventArgs);
e.Handled = pinchEventArgs.Handled;
}
@ -67,7 +59,7 @@ namespace Avalonia.Input
public override void PointerPressed(PointerPressedEventArgs e)
{
if (_target != null && _target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
if (Target != null && Target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
{
if (_firstContact == null)
{
@ -118,7 +110,7 @@ namespace Avalonia.Input
_secondContact = null;
}
_target?.RaiseEvent(new PinchEndedEventArgs());
Target?.RaiseEvent(new PinchEndedEventArgs());
}
}

17
src/Avalonia.Base/Input/GestureRecognizers/PullGestureRecognizer.cs

@ -6,8 +6,6 @@ namespace Avalonia.Input
public class PullGestureRecognizer : GestureRecognizer
{
internal static int MinPullDetectionSize = 50;
private IInputElement? _target;
private Point _initialPosition;
private int _gestureId;
private IPointer? _tracking;
@ -25,8 +23,6 @@ namespace Avalonia.Input
set => SetValue(PullDirectionProperty, value);
}
public override IInputElement? Target => _target;
public PullGestureRecognizer(PullDirection pullDirection)
{
PullDirection = pullDirection;
@ -34,11 +30,6 @@ namespace Avalonia.Input
public PullGestureRecognizer() { }
public override void Initialize(IInputElement target)
{
_target = target;
}
public override void PointerCaptureLost(IPointer pointer)
{
if (_tracking == pointer)
@ -49,7 +40,7 @@ namespace Avalonia.Input
public override void PointerMoved(PointerEventArgs e)
{
if (_tracking == e.Pointer && _target is Visual visual)
if (_tracking == e.Pointer && Target is Visual visual)
{
var currentPosition = e.GetPosition(visual);
Capture(e.Pointer);
@ -86,7 +77,7 @@ namespace Avalonia.Input
_pullInProgress = true;
var pullEventArgs = new PullGestureEventArgs(_gestureId, delta, PullDirection);
_target?.RaiseEvent(pullEventArgs);
Target?.RaiseEvent(pullEventArgs);
e.Handled = pullEventArgs.Handled;
}
@ -94,7 +85,7 @@ namespace Avalonia.Input
public override void PointerPressed(PointerPressedEventArgs e)
{
if (_target != null && _target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
if (Target != null && Target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
{
var position = e.GetPosition(visual);
@ -141,7 +132,7 @@ namespace Avalonia.Input
_initialPosition = default;
_pullInProgress = false;
_target?.RaiseEvent(new PullGestureEndedEventArgs(_gestureId, PullDirection));
Target?.RaiseEvent(new PullGestureEndedEventArgs(_gestureId, PullDirection));
}
}
}

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

@ -18,7 +18,6 @@ namespace Avalonia.Input.GestureRecognizers
private bool _scrolling;
private Point _trackedRootPoint;
private IPointer? _tracking;
private IInputElement? _target;
private int _gestureId;
private Point _pointerPressedPoint;
private VelocityTracker? _velocityTracker;
@ -91,13 +90,6 @@ namespace Avalonia.Input.GestureRecognizers
get => _scrollStartDistance;
set => SetAndRaise(ScrollStartDistanceProperty, ref _scrollStartDistance, value);
}
public override IInputElement? Target => _target;
public override void Initialize(IInputElement target)
{
_target = target;
}
public override void PointerPressed(PointerPressedEventArgs e)
{
@ -107,7 +99,7 @@ namespace Avalonia.Input.GestureRecognizers
EndGesture();
_tracking = e.Pointer;
_gestureId = ScrollGestureEventArgs.GetNextFreeId();
_trackedRootPoint = _pointerPressedPoint = e.GetPosition((Visual?)_target);
_trackedRootPoint = _pointerPressedPoint = e.GetPosition((Visual?)Target);
}
}
@ -115,7 +107,7 @@ namespace Avalonia.Input.GestureRecognizers
{
if (e.Pointer == _tracking)
{
var rootPoint = e.GetPosition((Visual?)_target);
var rootPoint = e.GetPosition((Visual?)Target);
if (!_scrolling)
{
if (CanHorizontallyScroll && Math.Abs(_trackedRootPoint.X - rootPoint.X) > ScrollStartDistance)
@ -145,7 +137,7 @@ namespace Avalonia.Input.GestureRecognizers
_lastMoveTimestamp = e.Timestamp;
_trackedRootPoint = rootPoint;
_target!.RaiseEvent(new ScrollGestureEventArgs(_gestureId, vector));
Target!.RaiseEvent(new ScrollGestureEventArgs(_gestureId, vector));
e.Handled = true;
}
}
@ -163,7 +155,7 @@ namespace Avalonia.Input.GestureRecognizers
{
_inertia = default;
_scrolling = false;
_target!.RaiseEvent(new ScrollGestureEndedEventArgs(_gestureId));
Target!.RaiseEvent(new ScrollGestureEndedEventArgs(_gestureId));
_gestureId = 0;
_lastMoveTimestamp = null;
}
@ -190,7 +182,7 @@ namespace Avalonia.Input.GestureRecognizers
var savedGestureId = _gestureId;
var st = Stopwatch.StartNew();
var lastTime = TimeSpan.Zero;
_target!.RaiseEvent(new ScrollGestureInertiaStartingEventArgs(_gestureId, _inertia));
Target!.RaiseEvent(new ScrollGestureInertiaStartingEventArgs(_gestureId, _inertia));
DispatcherTimer.Run(() =>
{
// Another gesture has started, finish the current one
@ -205,7 +197,7 @@ namespace Avalonia.Input.GestureRecognizers
var speed = _inertia * Math.Pow(InertialResistance, st.Elapsed.TotalSeconds);
var distance = speed * elapsedSinceLastTick.TotalSeconds;
var scrollGestureEventArgs = new ScrollGestureEventArgs(_gestureId, distance);
_target!.RaiseEvent(scrollGestureEventArgs);
Target!.RaiseEvent(scrollGestureEventArgs);
if (!scrollGestureEventArgs.Handled || scrollGestureEventArgs.ShouldEndScrollGesture)
{

Loading…
Cancel
Save