From cfe28b9ad68463c1873976765b76038918d8ec74 Mon Sep 17 00:00:00 2001
From: Thomas Goyne <plorkyeran@aegisub.org>
Date: Wed, 5 Jun 2013 18:54:39 -0700
Subject: [PATCH] Set the horizontal zoom option consistently

Always store the actual zoom level, rather than sometimes the zoom level
and sometimes the slider position.

Updates #1597.
---
 aegisub/src/audio_box.cpp | 22 +++++++++++-----------
 aegisub/src/audio_box.h   |  1 +
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/aegisub/src/audio_box.cpp b/aegisub/src/audio_box.cpp
index 5922a0ea4..5809cb740 100644
--- a/aegisub/src/audio_box.cpp
+++ b/aegisub/src/audio_box.cpp
@@ -155,8 +155,7 @@ void AudioBox::OnMouseWheel(wxMouseEvent &evt) {
 		return;
 
 	bool zoom = evt.CmdDown() != OPT_GET("Audio/Wheel Default to Zoom")->GetBool();
-	if (!zoom)
-	{
+	if (!zoom) {
 		int amount = -evt.GetWheelRotation() * GetClientSize().GetWidth() / (evt.GetWheelDelta() * 3);
 
 		// If the user did a horizontal scroll the amount should be inverted
@@ -171,15 +170,11 @@ void AudioBox::OnMouseWheel(wxMouseEvent &evt) {
 
 		audioDisplay->ScrollBy(amount);
 	}
-	else if (evt.GetWheelAxis() == 0)
-	{
+	else if (evt.GetWheelAxis() == 0) {
 		mouse_zoom_accum += evt.GetWheelRotation();
 		int zoom_delta = mouse_zoom_accum / evt.GetWheelDelta();
 		mouse_zoom_accum %= evt.GetWheelDelta();
-		int new_zoom = audioDisplay->GetZoomLevel() + zoom_delta;
-		audioDisplay->SetZoomLevel(new_zoom);
-		HorizontalZoom->SetValue(-new_zoom);
-		OPT_SET("Audio/Zoom/Horizontal")->SetInt(new_zoom);
+		SetHorizontalZoom(audioDisplay->GetZoomLevel() + zoom_delta);
 	}
 }
 
@@ -201,10 +196,15 @@ void AudioBox::OnSashDrag(wxSashEvent &event) {
 }
 
 void AudioBox::OnHorizontalZoom(wxScrollEvent &event) {
-	// Negate the value, we want zoom out to be on bottom and zoom in on top,
+	// Negate the value since we want zoom out to be on bottom and zoom in on top,
 	// but the control doesn't want negative on bottom and positive on top.
-	audioDisplay->SetZoomLevel(-event.GetPosition());
-	OPT_SET("Audio/Zoom/Horizontal")->SetInt(event.GetPosition());
+	SetHorizontalZoom(-event.GetPosition());
+}
+
+void AudioBox::SetHorizontalZoom(int new_zoom) {
+	audioDisplay->SetZoomLevel(new_zoom);
+	HorizontalZoom->SetValue(-new_zoom);
+	OPT_SET("Audio/Zoom/Horizontal")->SetInt(new_zoom);
 }
 
 void AudioBox::OnVerticalZoom(wxScrollEvent &event) {
diff --git a/aegisub/src/audio_box.h b/aegisub/src/audio_box.h
index 669a6e746..e7584965c 100644
--- a/aegisub/src/audio_box.h
+++ b/aegisub/src/audio_box.h
@@ -85,6 +85,7 @@ class AudioBox : public wxSashWindow {
 	// Mouse wheel zoom accumulator
 	int mouse_zoom_accum;
 
+	void SetHorizontalZoom(int new_zoom);
 	void OnAudioOpen();
 	void OnHorizontalZoom(wxScrollEvent &event);
 	void OnMouseWheel(wxMouseEvent &evt);
-- 
GitLab