|
@@ -52,6 +52,7 @@ namespace Avalonia.Input
|
|
|
}
|
|
|
|
|
|
var target = pointer.Captured ?? args.Root;
|
|
|
+ var gestureTarget = pointer.CapturedGestureRecognizer?.Target;
|
|
|
var updateKind = args.Type.ToUpdateKind();
|
|
|
var keyModifier = args.InputModifiers.ToKeyModifiers();
|
|
|
|
|
@@ -95,10 +96,19 @@ namespace Avalonia.Input
|
|
|
_pointers.Remove(args.RawPointerId);
|
|
|
using (pointer)
|
|
|
{
|
|
|
- target.RaiseEvent(new PointerReleasedEventArgs(target, pointer,
|
|
|
- (Visual)args.Root, args.Position, ev.Timestamp,
|
|
|
- new PointerPointProperties(GetModifiers(args.InputModifiers, false), updateKind),
|
|
|
- keyModifier, MouseButton.Left));
|
|
|
+ target = gestureTarget ?? target;
|
|
|
+ var e = new PointerReleasedEventArgs(target, pointer,
|
|
|
+ (Visual)args.Root, args.Position, ev.Timestamp,
|
|
|
+ new PointerPointProperties(GetModifiers(args.InputModifiers, false), updateKind),
|
|
|
+ keyModifier, MouseButton.Left);
|
|
|
+ if (gestureTarget != null)
|
|
|
+ {
|
|
|
+ pointer?.CapturedGestureRecognizer?.PointerReleased(e);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ target.RaiseEvent(e);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -106,15 +116,28 @@ namespace Avalonia.Input
|
|
|
{
|
|
|
_pointers.Remove(args.RawPointerId);
|
|
|
using (pointer)
|
|
|
+ {
|
|
|
pointer.Capture(null);
|
|
|
+ pointer.CaptureGestureRecognizer(null);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (args.Type == RawPointerEventType.TouchUpdate)
|
|
|
{
|
|
|
- target.RaiseEvent(new PointerEventArgs(InputElement.PointerMovedEvent, target, pointer, (Visual)args.Root,
|
|
|
+ target = gestureTarget ?? target;
|
|
|
+ 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));
|
|
|
+ keyModifier, args.IntermediatePoints);
|
|
|
+
|
|
|
+ if (gestureTarget != null)
|
|
|
+ {
|
|
|
+ pointer?.CapturedGestureRecognizer?.PointerMoved(e);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ target.RaiseEvent(e);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|