diff --git a/MapControl/Avalonia/Map.Avalonia.cs b/MapControl/Avalonia/Map.Avalonia.cs index e47c2e79..a8786032 100644 --- a/MapControl/Avalonia/Map.Avalonia.cs +++ b/MapControl/Avalonia/Map.Avalonia.cs @@ -27,11 +27,11 @@ namespace MapControl public static readonly StyledProperty MouseWheelZoomDeltaProperty = DependencyPropertyHelper.Register(nameof(MouseWheelZoomDelta), 0.25); - private double mouseWheelDelta; private IPointer pointer1; private IPointer pointer2; private Point position1; private Point position2; + private double mouseWheelDelta; public ManipulationModes ManipulationModes { @@ -90,35 +90,18 @@ namespace MapControl base.OnPointerPressed(e); } - private void HandlePointerReleased(IPointer pointer, bool releaseCapture) + protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e) { - if (pointer == pointer1 || pointer == pointer2) + if (e.Pointer == pointer1 || e.Pointer == pointer2) { - if (pointer == pointer1) + if (e.Pointer == pointer1) { pointer1 = pointer2; position1 = position2; } pointer2 = null; - - if (releaseCapture) - { - pointer.Capture(null); - } } - } - - protected override void OnPointerReleased(PointerReleasedEventArgs e) - { - HandlePointerReleased(e.Pointer, true); - - base.OnPointerReleased(e); - } - - protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e) - { - HandlePointerReleased(e.Pointer, false); base.OnPointerCaptureLost(e); } diff --git a/MapControl/WinUI/Map.WinUI.cs b/MapControl/WinUI/Map.WinUI.cs index 68a87e4c..684d8b7a 100644 --- a/MapControl/WinUI/Map.WinUI.cs +++ b/MapControl/WinUI/Map.WinUI.cs @@ -24,7 +24,7 @@ namespace MapControl public static readonly DependencyProperty MouseWheelZoomDeltaProperty = DependencyPropertyHelper.Register(nameof(MouseWheelZoomDelta), 0.25); - private Point? mousePosition; + private uint capturedPointerId; private double mouseWheelDelta; public Map() @@ -37,7 +37,7 @@ namespace MapControl ManipulationDelta += OnManipulationDelta; PointerPressed += OnPointerPressed; - PointerReleased += OnPointerReleased; + PointerCaptureLost += OnPointerCaptureLost; PointerWheelChanged += OnPointerWheelChanged; } @@ -53,11 +53,9 @@ namespace MapControl private void OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { - if (mousePosition.HasValue) + if (capturedPointerId != 0) { - var p = e.Position; - TranslateMap(new Point(p.X - mousePosition.Value.X, p.Y - mousePosition.Value.Y)); - mousePosition = p; + TranslateMap(e.Delta.Translation); } else if (e.PointerDeviceType != PointerDeviceType.Mouse) { @@ -67,24 +65,20 @@ namespace MapControl private void OnPointerPressed(object sender, PointerRoutedEventArgs e) { - var point = e.GetCurrentPoint(this); - if (e.Pointer.PointerDeviceType == PointerDeviceType.Mouse && e.KeyModifiers == VirtualKeyModifiers.None && - point.Properties.IsLeftButtonPressed && + e.GetCurrentPoint(this).Properties.IsLeftButtonPressed && CapturePointer(e.Pointer)) { - mousePosition = point.Position; + capturedPointerId = e.Pointer.PointerId; } } - private void OnPointerReleased(object sender, PointerRoutedEventArgs e) + private void OnPointerCaptureLost(object sender, PointerRoutedEventArgs e) { - if (mousePosition.HasValue && - e.Pointer.PointerDeviceType == PointerDeviceType.Mouse) + if (capturedPointerId == e.Pointer.PointerId) { - mousePosition = null; - ReleasePointerCapture(e.Pointer); + capturedPointerId = 0; } }