Browse Source

Always notify gesture recognizers about the loss of pointer capture

pull/3594/head
Nikita Tsukanov 7 years ago
parent
commit
2bef4dc540
  1. 9
      src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs
  2. 2
      src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs
  3. 4
      src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs

9
src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs

@ -111,9 +111,7 @@ namespace Avalonia.Input.GestureRecognizers
_pointerGrabs.Remove(e.Pointer); _pointerGrabs.Remove(e.Pointer);
foreach (var r in _recognizers) foreach (var r in _recognizers)
{ {
if(e.Handled) r.PointerCaptureLost(e.Pointer);
break;
r.PointerCaptureLost(e);
} }
} }
@ -121,6 +119,11 @@ namespace Avalonia.Input.GestureRecognizers
{ {
pointer.Capture(_inputElement); pointer.Capture(_inputElement);
_pointerGrabs[pointer] = recognizer; _pointerGrabs[pointer] = recognizer;
foreach (var r in _recognizers)
{
if (r != recognizer)
r.PointerCaptureLost(pointer);
}
} }
} }

2
src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs

@ -6,7 +6,7 @@ namespace Avalonia.Input.GestureRecognizers
void PointerPressed(PointerPressedEventArgs e); void PointerPressed(PointerPressedEventArgs e);
void PointerReleased(PointerReleasedEventArgs e); void PointerReleased(PointerReleasedEventArgs e);
void PointerMoved(PointerEventArgs e); void PointerMoved(PointerEventArgs e);
void PointerCaptureLost(PointerCaptureLostEventArgs e); void PointerCaptureLost(IPointer pointer);
} }
public interface IGestureRecognizerActionsDispatcher public interface IGestureRecognizerActionsDispatcher

4
src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs

@ -116,9 +116,9 @@ namespace Avalonia.Input.GestureRecognizers
} }
} }
public void PointerCaptureLost(PointerCaptureLostEventArgs e) public void PointerCaptureLost(IPointer pointer)
{ {
if (e.Pointer == _tracking) EndGesture(); if (pointer == _tracking) EndGesture();
} }
void EndGesture() void EndGesture()

Loading…
Cancel
Save