Map MouseWheel handler

This commit is contained in:
ClemensFischer 2024-08-24 21:06:12 +02:00
parent 65517b43cc
commit 404ddbb0f7
3 changed files with 15 additions and 12 deletions

View file

@ -27,6 +27,7 @@ namespace MapControl
public static readonly StyledProperty<double> MouseWheelZoomDeltaProperty = public static readonly StyledProperty<double> MouseWheelZoomDeltaProperty =
DependencyPropertyHelper.Register<Map, double>(nameof(MouseWheelZoomDelta), 0.25); DependencyPropertyHelper.Register<Map, double>(nameof(MouseWheelZoomDelta), 0.25);
private double mouseWheelDelta;
private IPointer pointer1; private IPointer pointer1;
private IPointer pointer2; private IPointer pointer2;
private Point position1; private Point position1;
@ -50,8 +51,17 @@ namespace MapControl
protected override void OnPointerWheelChanged(PointerWheelEventArgs e) protected override void OnPointerWheelChanged(PointerWheelEventArgs e)
{ {
ZoomMap(e.GetPosition(this), TargetZoomLevel + MouseWheelZoomDelta * e.Delta.Y); mouseWheelDelta += e.Delta.Y;
e.Handled = true;
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); base.OnPointerWheelChanged(e);
} }
@ -64,7 +74,6 @@ namespace MapControl
point.Pointer.Type == PointerType.Touch && HandleTouchPressed(point)) point.Pointer.Type == PointerType.Touch && HandleTouchPressed(point))
{ {
point.Pointer.Capture(this); point.Pointer.Capture(this);
e.Handled = true;
} }
base.OnPointerPressed(e); base.OnPointerPressed(e);
@ -75,7 +84,6 @@ namespace MapControl
if (HandlePointerReleased(e.Pointer)) if (HandlePointerReleased(e.Pointer))
{ {
e.Pointer.Capture(null); e.Pointer.Capture(null);
e.Handled = true;
} }
base.OnPointerReleased(e); base.OnPointerReleased(e);
@ -83,10 +91,7 @@ namespace MapControl
protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e) protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e)
{ {
if (HandlePointerReleased(e.Pointer)) HandlePointerReleased(e.Pointer);
{
e.Handled = true;
}
base.OnPointerCaptureLost(e); base.OnPointerCaptureLost(e);
} }
@ -106,8 +111,6 @@ namespace MapControl
TranslateMap(position - position1); TranslateMap(position - position1);
position1 = position; position1 = position;
} }
e.Handled = true;
} }
base.OnPointerMoved(e); base.OnPointerMoved(e);

View file

@ -107,7 +107,7 @@ namespace MapControl
if (Math.Abs(mouseWheelDelta) >= 1d) if (Math.Abs(mouseWheelDelta) >= 1d)
{ {
// Zoom to integer multiple of MouseWheelZoomDelta. // Zoom to integer multiple of MouseWheelZoomDelta.
//
ZoomMap(e.GetPosition(this), ZoomMap(e.GetPosition(this),
MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta)); MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta));

View file

@ -84,7 +84,7 @@ namespace MapControl
if (Math.Abs(mouseWheelDelta) >= 1d) if (Math.Abs(mouseWheelDelta) >= 1d)
{ {
// Zoom to integer multiple of MouseWheelZoomDelta. // Zoom to integer multiple of MouseWheelZoomDelta.
//
ZoomMap(point.Position, ZoomMap(point.Position,
MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta)); MouseWheelZoomDelta * Math.Round(TargetZoomLevel / MouseWheelZoomDelta + mouseWheelDelta));