Browse Source

Added internal helpers for protected gesture events

pull/11518/head
Emmanuel Hansen 3 years ago
parent
commit
c12fe17315
  1. 28
      src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizer.cs
  2. 6
      src/Avalonia.Base/Input/GestureRecognizers/GestureRecognizerCollection.cs
  3. 8
      src/Avalonia.Base/Input/GestureRecognizers/PinchGestureRecognizer.cs
  4. 8
      src/Avalonia.Base/Input/GestureRecognizers/PullGestureRecognizer.cs
  5. 8
      src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs
  6. 38
      src/Avalonia.Base/Input/MouseDevice.cs
  7. 38
      src/Avalonia.Base/Input/PenDevice.cs
  8. 2
      src/Avalonia.Base/Input/Pointer.cs
  9. 4
      src/Avalonia.Base/Input/TouchDevice.cs
  10. 4
      tests/Avalonia.UnitTests/TouchTestHelper.cs

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

@ -4,10 +4,30 @@
{
protected internal IInputElement? Target { get; internal set; }
protected internal abstract void PointerPressed(PointerPressedEventArgs e);
protected internal abstract void PointerReleased(PointerReleasedEventArgs e);
protected internal abstract void PointerMoved(PointerEventArgs e);
protected internal abstract void PointerCaptureLost(IPointer pointer);
protected abstract void PointerPressed(PointerPressedEventArgs e);
protected abstract void PointerReleased(PointerReleasedEventArgs e);
protected abstract void PointerMoved(PointerEventArgs e);
protected abstract void PointerCaptureLost(IPointer pointer);
internal void PointerPressedInternal(PointerPressedEventArgs e)
{
PointerPressed(e);
}
internal void PointerReleasedInternal(PointerReleasedEventArgs e)
{
PointerReleased(e);
}
internal void PointerMovedInternal(PointerEventArgs e)
{
PointerMoved(e);
}
internal void PointerCaptureLostInternal(IPointer pointer)
{
PointerCaptureLost(pointer);
}
protected void Capture(IPointer pointer)
{

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

@ -53,7 +53,7 @@ namespace Avalonia.Input.GestureRecognizers
return false;
foreach (var r in _recognizers)
{
r.PointerPressed(e);
r.PointerPressedInternal(e);
}
return e.Handled;
@ -70,7 +70,7 @@ namespace Avalonia.Input.GestureRecognizers
if (pointer?.CapturedGestureRecognizer != null)
break;
r.PointerReleased(e);
r.PointerReleasedInternal(e);
}
return e.Handled;
}
@ -86,7 +86,7 @@ namespace Avalonia.Input.GestureRecognizers
if (pointer?.CapturedGestureRecognizer != null)
break;
r.PointerMoved(e);
r.PointerMovedInternal(e);
}
return e.Handled;
}

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

@ -21,12 +21,12 @@ namespace Avalonia.Input
PointerReleased(e);
}
protected internal override void PointerCaptureLost(IPointer pointer)
protected override void PointerCaptureLost(IPointer pointer)
{
RemoveContact(pointer);
}
protected internal override void PointerMoved(PointerEventArgs e)
protected override void PointerMoved(PointerEventArgs e)
{
if (Target != null && Target is Visual visual)
{
@ -57,7 +57,7 @@ namespace Avalonia.Input
}
}
protected internal override void PointerPressed(PointerPressedEventArgs e)
protected override void PointerPressed(PointerPressedEventArgs e)
{
if (Target != null && Target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
{
@ -90,7 +90,7 @@ namespace Avalonia.Input
}
}
protected internal override void PointerReleased(PointerReleasedEventArgs e)
protected override void PointerReleased(PointerReleasedEventArgs e)
{
RemoveContact(e.Pointer);
}

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

@ -30,7 +30,7 @@ namespace Avalonia.Input
public PullGestureRecognizer() { }
protected internal override void PointerCaptureLost(IPointer pointer)
protected override void PointerCaptureLost(IPointer pointer)
{
if (_tracking == pointer)
{
@ -38,7 +38,7 @@ namespace Avalonia.Input
}
}
protected internal override void PointerMoved(PointerEventArgs e)
protected override void PointerMoved(PointerEventArgs e)
{
if (_tracking == e.Pointer && Target is Visual visual)
{
@ -83,7 +83,7 @@ namespace Avalonia.Input
}
}
protected internal override void PointerPressed(PointerPressedEventArgs e)
protected override void PointerPressed(PointerPressedEventArgs e)
{
if (Target != null && Target is Visual visual && (e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
{
@ -118,7 +118,7 @@ namespace Avalonia.Input
}
}
protected internal override void PointerReleased(PointerReleasedEventArgs e)
protected override void PointerReleased(PointerReleasedEventArgs e)
{
if (_tracking == e.Pointer && _pullInProgress)
{

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

@ -91,7 +91,7 @@ namespace Avalonia.Input.GestureRecognizers
set => SetAndRaise(ScrollStartDistanceProperty, ref _scrollStartDistance, value);
}
protected internal override void PointerPressed(PointerPressedEventArgs e)
protected override void PointerPressed(PointerPressedEventArgs e)
{
if (e.Pointer.IsPrimary &&
(e.Pointer.Type == PointerType.Touch || e.Pointer.Type == PointerType.Pen))
@ -103,7 +103,7 @@ namespace Avalonia.Input.GestureRecognizers
}
}
protected internal override void PointerMoved(PointerEventArgs e)
protected override void PointerMoved(PointerEventArgs e)
{
if (e.Pointer == _tracking)
{
@ -143,7 +143,7 @@ namespace Avalonia.Input.GestureRecognizers
}
}
protected internal override void PointerCaptureLost(IPointer pointer)
protected override void PointerCaptureLost(IPointer pointer)
{
if (pointer == _tracking) EndGesture();
}
@ -163,7 +163,7 @@ namespace Avalonia.Input.GestureRecognizers
}
protected internal override void PointerReleased(PointerReleasedEventArgs e)
protected override void PointerReleased(PointerReleasedEventArgs e)
{
if (e.Pointer == _tracking && _scrolling)
{

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

@ -163,26 +163,17 @@ namespace Avalonia.Input
device = device ?? throw new ArgumentNullException(nameof(device));
root = root ?? throw new ArgumentNullException(nameof(root));
if (_pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
{
if(gestureRecognizer.Target != null)
{
var e = new PointerEventArgs(InputElement.PointerMovedEvent, gestureRecognizer.Target, _pointer, (Visual)root,
p, timestamp, properties, inputModifiers, intermediatePoints);
gestureRecognizer.PointerMoved(e);
return e.Handled;
}
}
var source = _pointer.Captured ?? hitTest;
var source = _pointer.CapturedGestureRecognizer?.Target ?? _pointer.Captured ?? hitTest;
if (source is object)
{
var e = new PointerEventArgs(InputElement.PointerMovedEvent, source, _pointer, (Visual)root,
p, timestamp, properties, inputModifiers, intermediatePoints);
source.RaiseEvent(e);
if (_pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
gestureRecognizer.PointerMovedInternal(e);
else
source.RaiseEvent(e);
return e.Handled;
}
@ -195,27 +186,18 @@ namespace Avalonia.Input
{
device = device ?? throw new ArgumentNullException(nameof(device));
root = root ?? throw new ArgumentNullException(nameof(root));
if (_pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
{
if (gestureRecognizer.Target != null)
{
var e = new PointerReleasedEventArgs(gestureRecognizer.Target, _pointer, (Visual)root, p, timestamp, props, inputModifiers,
_lastMouseDownButton);
gestureRecognizer.PointerReleased(e);
return e.Handled;
}
}
var source = _pointer.Captured ?? hitTest;
var source = _pointer.CapturedGestureRecognizer?.Target ?? _pointer.Captured ?? hitTest;
if (source is not null)
{
var e = new PointerReleasedEventArgs(source, _pointer, (Visual)root, p, timestamp, props, inputModifiers,
_lastMouseDownButton);
source?.RaiseEvent(e);
if (_pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
gestureRecognizer.PointerReleasedInternal(e);
else
source?.RaiseEvent(e);
_pointer.Capture(null);
_pointer.CaptureGestureRecognizer(null);
_lastMouseDownButton = default;

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

@ -115,26 +115,17 @@ namespace Avalonia.Input
KeyModifiers inputModifiers, IInputElement? hitTest,
Lazy<IReadOnlyList<RawPointerPoint>?>? intermediatePoints)
{
if (pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
{
if (gestureRecognizer.Target != null)
{
var e = new PointerEventArgs(InputElement.PointerMovedEvent, gestureRecognizer.Target, pointer, (Visual)root,
p, timestamp, properties, inputModifiers, intermediatePoints);
gestureRecognizer.PointerMoved(e);
return e.Handled;
}
}
var source = pointer.Captured ?? hitTest;
var source = pointer.CapturedGestureRecognizer?.Target ?? pointer.Captured ?? hitTest;
if (source is not null)
{
var e = new PointerEventArgs(InputElement.PointerMovedEvent, source, pointer, (Visual)root,
p, timestamp, properties, inputModifiers, intermediatePoints);
source.RaiseEvent(e);
if (pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
gestureRecognizer.PointerMovedInternal(e);
else
source.RaiseEvent(e);
return e.Handled;
}
@ -145,26 +136,17 @@ namespace Avalonia.Input
IInputElement root, Point p, PointerPointProperties properties,
KeyModifiers inputModifiers, IInputElement? hitTest)
{
if (pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
{
if (gestureRecognizer.Target != null)
{
var e = new PointerReleasedEventArgs(gestureRecognizer.Target, pointer, (Visual)root, p, timestamp, properties, inputModifiers,
_lastMouseDownButton);
gestureRecognizer.PointerReleased(e);
return e.Handled;
}
}
var source = pointer.Captured ?? hitTest;
var source = pointer.CapturedGestureRecognizer?.Target ?? pointer.Captured ?? hitTest;
if (source is not null)
{
var e = new PointerReleasedEventArgs(source, pointer, (Visual)root, p, timestamp, properties, inputModifiers,
_lastMouseDownButton);
source.RaiseEvent(e);
if (pointer.CapturedGestureRecognizer is GestureRecognizer gestureRecognizer)
gestureRecognizer.PointerReleasedInternal(e);
else
source.RaiseEvent(e);
pointer.Capture(null);
pointer.CaptureGestureRecognizer(null);
_lastMouseDownButton = default;

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

@ -92,7 +92,7 @@ namespace Avalonia.Input
internal void CaptureGestureRecognizer(GestureRecognizer? gestureRecognizer)
{
if (CapturedGestureRecognizer != gestureRecognizer)
CapturedGestureRecognizer?.PointerCaptureLost(this);
CapturedGestureRecognizer?.PointerCaptureLostInternal(this);
if (gestureRecognizer != null)
Capture(null);

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

@ -103,7 +103,7 @@ namespace Avalonia.Input
keyModifier, MouseButton.Left);
if (gestureTarget != null)
{
pointer?.CapturedGestureRecognizer?.PointerReleased(e);
pointer?.CapturedGestureRecognizer?.PointerReleasedInternal(e);
}
else
{
@ -132,7 +132,7 @@ namespace Avalonia.Input
if (gestureTarget != null)
{
pointer?.CapturedGestureRecognizer?.PointerMoved(e);
pointer?.CapturedGestureRecognizer?.PointerMovedInternal(e);
}
else
{

4
tests/Avalonia.UnitTests/TouchTestHelper.cs

@ -30,7 +30,7 @@ namespace Avalonia.UnitTests
var e = new PointerEventArgs(InputElement.PointerMovedEvent, source, _pointer, (Visual)target, position,
Timestamp(), PointerPointProperties.None, modifiers);
if (_pointer.CapturedGestureRecognizer != null)
_pointer.CapturedGestureRecognizer.PointerMoved(e);
_pointer.CapturedGestureRecognizer.PointerMovedInternal(e);
else
target.RaiseEvent(e);
@ -45,7 +45,7 @@ namespace Avalonia.UnitTests
modifiers, MouseButton.None);
if (_pointer.CapturedGestureRecognizer != null)
_pointer.CapturedGestureRecognizer.PointerReleased(e);
_pointer.CapturedGestureRecognizer.PointerReleasedInternal(e);
else
source.RaiseEvent(e);

Loading…
Cancel
Save