From 404ddbb0f7dd7c9ac6bf032c012621f3a7a4843a Mon Sep 17 00:00:00 2001 From: ClemensFischer Date: Sat, 24 Aug 2024 21:06:12 +0200 Subject: [PATCH] Map MouseWheel handler --- MapControl/Avalonia/Map.Avalonia.cs | 23 +++++++++++++---------- MapControl/WPF/Map.WPF.cs | 2 +- MapControl/WinUI/Map.WinUI.cs | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/MapControl/Avalonia/Map.Avalonia.cs b/MapControl/Avalonia/Map.Avalonia.cs index 98da3f4a..5c1c23e6 100644 --- a/MapControl/Avalonia/Map.Avalonia.cs +++ b/MapControl/Avalonia/Map.Avalonia.cs @@ -27,6 +27,7 @@ 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; @@ -50,8 +51,17 @@ namespace MapControl protected override void OnPointerWheelChanged(PointerWheelEventArgs e) { - ZoomMap(e.GetPosition(this), TargetZoomLevel + MouseWheelZoomDelta * e.Delta.Y); - e.Handled = true; + mouseWheelDelta += e.Delta.Y; + + if (Math.Abs(mouseWheelDelta) >= 1d) + { + // Zoom to integer multiple of MouseWheelZoomDelta. + // + ZoomMap(e.GetPosition(this), + MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta)); + + mouseWheelDelta = 0d; + } base.OnPointerWheelChanged(e); } @@ -64,7 +74,6 @@ namespace MapControl point.Pointer.Type == PointerType.Touch && HandleTouchPressed(point)) { point.Pointer.Capture(this); - e.Handled = true; } base.OnPointerPressed(e); @@ -75,7 +84,6 @@ namespace MapControl if (HandlePointerReleased(e.Pointer)) { e.Pointer.Capture(null); - e.Handled = true; } base.OnPointerReleased(e); @@ -83,10 +91,7 @@ namespace MapControl protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e) { - if (HandlePointerReleased(e.Pointer)) - { - e.Handled = true; - } + HandlePointerReleased(e.Pointer); base.OnPointerCaptureLost(e); } @@ -106,8 +111,6 @@ namespace MapControl TranslateMap(position - position1); position1 = position; } - - e.Handled = true; } base.OnPointerMoved(e); diff --git a/MapControl/WPF/Map.WPF.cs b/MapControl/WPF/Map.WPF.cs index 57ae1439..962d6e09 100644 --- a/MapControl/WPF/Map.WPF.cs +++ b/MapControl/WPF/Map.WPF.cs @@ -107,7 +107,7 @@ namespace MapControl if (Math.Abs(mouseWheelDelta) >= 1d) { // Zoom to integer multiple of MouseWheelZoomDelta. - + // ZoomMap(e.GetPosition(this), MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta)); diff --git a/MapControl/WinUI/Map.WinUI.cs b/MapControl/WinUI/Map.WinUI.cs index b0ffe1df..41297eb5 100644 --- a/MapControl/WinUI/Map.WinUI.cs +++ b/MapControl/WinUI/Map.WinUI.cs @@ -84,7 +84,7 @@ namespace MapControl if (Math.Abs(mouseWheelDelta) >= 1d) { // Zoom to integer multiple of MouseWheelZoomDelta. - + // ZoomMap(point.Position, MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta));