diff --git a/src/Avalonia.Base/Input/MouseDevice.cs b/src/Avalonia.Base/Input/MouseDevice.cs index bb8313106f..328d5e945f 100644 --- a/src/Avalonia.Base/Input/MouseDevice.cs +++ b/src/Avalonia.Base/Input/MouseDevice.cs @@ -7,7 +7,7 @@ using Avalonia.Metadata; using Avalonia.Platform; using Avalonia.Utilities; using Avalonia.VisualTree; - +using Avalonia.Input.GestureRecognizers; #pragma warning disable CS0618 namespace Avalonia.Input @@ -163,8 +163,8 @@ namespace Avalonia.Input device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - IInputElement source; - if (_pointer.CapturedGestureRecognizer is { } gestureRecognizer) + IInputElement? source; + if (_pointer.CapturedGestureRecognizer is IGestureRecognizer gestureRecognizer) { source = gestureRecognizer.Target ?? hitTest; @@ -199,8 +199,8 @@ namespace Avalonia.Input device = device ?? throw new ArgumentNullException(nameof(device)); root = root ?? throw new ArgumentNullException(nameof(root)); - IInputElement source; - if (_pointer.CapturedGestureRecognizer is { } gestureRecognizer) + IInputElement? source; + if (_pointer.CapturedGestureRecognizer is IGestureRecognizer gestureRecognizer) { source = gestureRecognizer.Target ?? hitTest; diff --git a/src/Avalonia.Base/Input/PenDevice.cs b/src/Avalonia.Base/Input/PenDevice.cs index fcf7d31e03..a183dbbaf8 100644 --- a/src/Avalonia.Base/Input/PenDevice.cs +++ b/src/Avalonia.Base/Input/PenDevice.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; +using Avalonia.Input.GestureRecognizers; using Avalonia.Input.Raw; using Avalonia.Interactivity; using Avalonia.Metadata; @@ -114,8 +115,8 @@ namespace Avalonia.Input KeyModifiers inputModifiers, IInputElement? hitTest, Lazy?>? intermediatePoints) { - IInputElement source; - if (pointer.CapturedGestureRecognizer is { } gestureRecognizer) + IInputElement? source; + if (pointer.CapturedGestureRecognizer is IGestureRecognizer gestureRecognizer) { source = gestureRecognizer.Target ?? hitTest; @@ -147,8 +148,8 @@ namespace Avalonia.Input IInputElement root, Point p, PointerPointProperties properties, KeyModifiers inputModifiers, IInputElement? hitTest) { - IInputElement source; - if (pointer.CapturedGestureRecognizer is { } gestureRecognizer) + IInputElement? source; + if (pointer.CapturedGestureRecognizer is IGestureRecognizer gestureRecognizer) { source = gestureRecognizer.Target ?? hitTest; diff --git a/src/Avalonia.Base/Input/TouchDevice.cs b/src/Avalonia.Base/Input/TouchDevice.cs index c5b372defa..02f3479e95 100644 --- a/src/Avalonia.Base/Input/TouchDevice.cs +++ b/src/Avalonia.Base/Input/TouchDevice.cs @@ -117,15 +117,15 @@ namespace Avalonia.Input _pointers.Remove(args.RawPointerId); using (pointer) { - pointer.Capture(null); - pointer.CaptureGestureRecognizer(null); + pointer?.Capture(null); + pointer?.CaptureGestureRecognizer(null); } } if (args.Type == RawPointerEventType.TouchUpdate) { target = gestureTarget ?? target; - var e = new PointerEventArgs(InputElement.PointerMovedEvent, target, pointer, (Visual)args.Root, + var e = new PointerEventArgs(InputElement.PointerMovedEvent, target, pointer!, (Visual)args.Root, args.Position, ev.Timestamp, new PointerPointProperties(GetModifiers(args.InputModifiers, true), updateKind), keyModifier, args.IntermediatePoints); diff --git a/tests/Avalonia.UnitTests/TouchTestHelper.cs b/tests/Avalonia.UnitTests/TouchTestHelper.cs index db70f570a2..703cb45b96 100644 --- a/tests/Avalonia.UnitTests/TouchTestHelper.cs +++ b/tests/Avalonia.UnitTests/TouchTestHelper.cs @@ -27,8 +27,13 @@ namespace Avalonia.UnitTests public void Move(Interactive target, Interactive source, in Point position, KeyModifiers modifiers = default) { - target.RaiseEvent(new PointerEventArgs(InputElement.PointerMovedEvent, source, _pointer, (Visual)target, position, - Timestamp(), PointerPointProperties.None, modifiers)); + var e = new PointerEventArgs(InputElement.PointerMovedEvent, source, _pointer, (Visual)target, position, + Timestamp(), PointerPointProperties.None, modifiers); + if (_pointer.CapturedGestureRecognizer != null) + _pointer.CapturedGestureRecognizer.PointerMoved(e); + else + target.RaiseEvent(e); + } public void Up(Interactive target, Point position = default, KeyModifiers modifiers = default) @@ -36,9 +41,16 @@ namespace Avalonia.UnitTests public void Up(Interactive target, Interactive source, Point position = default, KeyModifiers modifiers = default) { - source.RaiseEvent(new PointerReleasedEventArgs(source, _pointer, (Visual)target, position, Timestamp(), PointerPointProperties.None, - modifiers, MouseButton.None)); + var e = new PointerReleasedEventArgs(source, _pointer, (Visual)target, position, Timestamp(), PointerPointProperties.None, + modifiers, MouseButton.None); + + if (_pointer.CapturedGestureRecognizer != null) + _pointer.CapturedGestureRecognizer.PointerReleased(e); + else + source.RaiseEvent(e); + _pointer.Capture(null); + _pointer.CaptureGestureRecognizer(null); } public void Tap(Interactive target, Point position = default, KeyModifiers modifiers = default)