From 914950c4a5e4616b6d67c81f3cc6e2b6e5a2994c Mon Sep 17 00:00:00 2001 From: Andre Mohren Date: Tue, 14 Jul 2020 17:17:05 +0200 Subject: [PATCH] When zooming using the mousewheel, zoom towards the pointer location. --- OpenRA.Game/Graphics/Viewport.cs | 8 ++++++++ .../Widgets/EditorViewportControllerWidget.cs | 2 +- OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 2ee520d341..c886f4cbab 100644 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -97,6 +97,14 @@ namespace OpenRA.Graphics Zoom = (zoom * (float)Math.Exp(dz)).Clamp(unlockMinZoom ? unlockedMinZoom : minZoom, maxZoom); } + public void AdjustZoom(float dz, int2 center) + { + var oldCenter = worldRenderer.Viewport.ViewToWorldPx(center); + AdjustZoom(dz); + var newCenter = worldRenderer.Viewport.ViewToWorldPx(center); + CenterLocation += oldCenter - newCenter; + } + public void ToggleZoom() { // Unlocked zooms always reset to the default zoom diff --git a/OpenRA.Mods.Common/Widgets/EditorViewportControllerWidget.cs b/OpenRA.Mods.Common/Widgets/EditorViewportControllerWidget.cs index 93ca34b688..7fe2cd10e4 100644 --- a/OpenRA.Mods.Common/Widgets/EditorViewportControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/EditorViewportControllerWidget.cs @@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Widgets { if (mi.Event == MouseInputEvent.Scroll && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier)) { - worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed); + worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed, mi.Location); return true; } diff --git a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs index c04013d99a..f67f416ee0 100644 --- a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs @@ -315,7 +315,7 @@ namespace OpenRA.Mods.Common.Widgets { if (mi.Event == MouseInputEvent.Scroll && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier)) { - worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed); + worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed, mi.Location); return true; }