|
@@ -10,8 +10,6 @@ namespace Avalonia.Input.GestureRecognizers
|
|
{
|
|
{
|
|
private readonly IInputElement _inputElement;
|
|
private readonly IInputElement _inputElement;
|
|
private List<IGestureRecognizer>? _recognizers;
|
|
private List<IGestureRecognizer>? _recognizers;
|
|
- private Dictionary<IPointer, IGestureRecognizer>? _pointerGrabs;
|
|
|
|
-
|
|
|
|
|
|
|
|
public GestureRecognizerCollection(IInputElement inputElement)
|
|
public GestureRecognizerCollection(IInputElement inputElement)
|
|
{
|
|
{
|
|
@@ -24,7 +22,6 @@ namespace Avalonia.Input.GestureRecognizers
|
|
{
|
|
{
|
|
// We initialize the collection when the first recognizer is added
|
|
// We initialize the collection when the first recognizer is added
|
|
_recognizers = new List<IGestureRecognizer>();
|
|
_recognizers = new List<IGestureRecognizer>();
|
|
- _pointerGrabs = new Dictionary<IPointer, IGestureRecognizer>();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
_recognizers.Add(recognizer);
|
|
_recognizers.Add(recognizer);
|
|
@@ -57,8 +54,6 @@ namespace Avalonia.Input.GestureRecognizers
|
|
return false;
|
|
return false;
|
|
foreach (var r in _recognizers)
|
|
foreach (var r in _recognizers)
|
|
{
|
|
{
|
|
- if (e.Handled)
|
|
|
|
- break;
|
|
|
|
r.PointerPressed(e);
|
|
r.PointerPressed(e);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -69,17 +64,15 @@ namespace Avalonia.Input.GestureRecognizers
|
|
{
|
|
{
|
|
if (_recognizers == null)
|
|
if (_recognizers == null)
|
|
return false;
|
|
return false;
|
|
- if (_pointerGrabs!.TryGetValue(e.Pointer, out var capture))
|
|
|
|
|
|
+ var pointer = e.Pointer as Pointer;
|
|
|
|
+
|
|
|
|
+ foreach (var r in _recognizers)
|
|
{
|
|
{
|
|
- capture.PointerReleased(e);
|
|
|
|
|
|
+ if (pointer?.CapturedGestureRecognizer != null)
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ r.PointerReleased(e);
|
|
}
|
|
}
|
|
- else
|
|
|
|
- foreach (var r in _recognizers)
|
|
|
|
- {
|
|
|
|
- if (e.Handled)
|
|
|
|
- break;
|
|
|
|
- r.PointerReleased(e);
|
|
|
|
- }
|
|
|
|
return e.Handled;
|
|
return e.Handled;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -87,41 +80,24 @@ namespace Avalonia.Input.GestureRecognizers
|
|
{
|
|
{
|
|
if (_recognizers == null)
|
|
if (_recognizers == null)
|
|
return false;
|
|
return false;
|
|
- if (_pointerGrabs!.TryGetValue(e.Pointer, out var capture))
|
|
|
|
- {
|
|
|
|
- capture.PointerMoved(e);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- foreach (var r in _recognizers)
|
|
|
|
- {
|
|
|
|
- if (e.Handled)
|
|
|
|
- break;
|
|
|
|
- r.PointerMoved(e);
|
|
|
|
- }
|
|
|
|
- return e.Handled;
|
|
|
|
- }
|
|
|
|
|
|
+ var pointer = e.Pointer as Pointer;
|
|
|
|
|
|
- internal void HandlePointerCaptureLost(PointerCaptureLostEventArgs e)
|
|
|
|
- {
|
|
|
|
- if (_recognizers == null)
|
|
|
|
- return;
|
|
|
|
- _pointerGrabs!.Remove(e.Pointer);
|
|
|
|
foreach (var r in _recognizers)
|
|
foreach (var r in _recognizers)
|
|
{
|
|
{
|
|
- r.PointerCaptureLost(e.Pointer);
|
|
|
|
|
|
+ if (pointer?.CapturedGestureRecognizer != null)
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ r.PointerMoved(e);
|
|
}
|
|
}
|
|
|
|
+ return e.Handled;
|
|
}
|
|
}
|
|
|
|
|
|
void IGestureRecognizerActionsDispatcher.Capture(IPointer pointer, IGestureRecognizer recognizer)
|
|
void IGestureRecognizerActionsDispatcher.Capture(IPointer pointer, IGestureRecognizer recognizer)
|
|
{
|
|
{
|
|
var p = pointer as Pointer;
|
|
var p = pointer as Pointer;
|
|
- if (p != null && p.CapturedGestureRecognizer != null && recognizer != p.CapturedGestureRecognizer)
|
|
|
|
- return;
|
|
|
|
|
|
|
|
- pointer.Capture(_inputElement);
|
|
|
|
p?.CaptureGestureRecognizer(recognizer);
|
|
p?.CaptureGestureRecognizer(recognizer);
|
|
|
|
|
|
- _pointerGrabs![pointer] = recognizer;
|
|
|
|
foreach (var r in _recognizers!)
|
|
foreach (var r in _recognizers!)
|
|
{
|
|
{
|
|
if (r != recognizer)
|
|
if (r != recognizer)
|