From fbad093b59c3ead40ce0e2d3b9ad320593b55da4 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 2 Jul 2014 15:53:24 -0400 Subject: [PATCH] simplify zooming, remove Editor::clamp_samples_per_pixel(), fix getting "stuck" at max and min zoom levels --- gtk2_ardour/editor.cc | 22 +++++++++++++++++----- gtk2_ardour/editor.h | 1 - gtk2_ardour/editor_ops.cc | 38 +------------------------------------- 3 files changed, 18 insertions(+), 43 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4c5dd10755..5bfcfb7e03 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3389,7 +3389,7 @@ Editor::cycle_edit_mode () Config->set_edit_mode (Ripple); } break; -// case Splice: + case Splice: case Ripple: Config->set_edit_mode (Lock); break; @@ -4104,8 +4104,6 @@ Editor::reset_y_origin (double y) void Editor::reset_zoom (framecnt_t spp) { - clamp_samples_per_pixel (spp); - if (spp == samples_per_pixel) { return; } @@ -4217,12 +4215,26 @@ Editor::use_visual_state (VisualState& vs) /** This is the core function that controls the zoom level of the canvas. It is called * whenever one or more calls are made to reset_zoom(). It executes in an idle handler. - * @param fpu New frames per unit; should already have been clamped so that it is sensible. + * @param spp new number of samples per pixel */ void Editor::set_samples_per_pixel (framecnt_t spp) { - clamp_samples_per_pixel (spp); + if (spp < 1) { + return; + } + + const framecnt_t three_days = 3 * 24 * 60 * 60 * (_session ? _session->frame_rate() : 48000); + const framecnt_t lots_of_pixels = 4000; + + /* if the zoom level is greater than what you'd get trying to display 3 + * days of audio on a really big screen, then it's too big. + */ + + if (spp * lots_of_pixels > three_days) { + return; + } + samples_per_pixel = spp; if (tempo_lines) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index b15bfe3a5c..a43c9bf268 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -530,7 +530,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Editing::ZoomFocus zoom_focus; void set_samples_per_pixel (framecnt_t); - bool clamp_samples_per_pixel (framecnt_t &) const; Editing::MouseMode mouse_mode; Editing::MouseMode pre_internal_mouse_mode; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 325f1c83a1..8852bcdbff 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1449,38 +1449,6 @@ Editor::tav_zoom_smooth (bool coarser, bool force_all) } } -bool -Editor::clamp_samples_per_pixel (framecnt_t& fpp) const -{ - bool clamped = false; - - if (fpp < 1) { - fpp = 1; - clamped = true; - } - - framecnt_t sr; - - if (_session) { - sr = _session->frame_rate (); - } else { - sr = 48000; - } - - const framecnt_t three_days = 3 * 24 * 60 * 60 * sr; - const framecnt_t lots_of_pixels = 4000; - - /* if the zoom level is greater than what you'd get trying to display 3 - * days of audio on a really big screen, scale it down. - */ - - if (fpp * lots_of_pixels > three_days) { - fpp = three_days / _track_canvas->width(); - clamped = true; - } - - return clamped; -} void Editor::temporal_zoom_step (bool coarser) @@ -1517,7 +1485,6 @@ Editor::temporal_zoom (framecnt_t fpp) framecnt_t nfpp; double l; - clamp_samples_per_pixel (fpp); if (fpp == samples_per_pixel) { return; } @@ -1807,8 +1774,7 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame) new_spp = samples_per_pixel - (samples_per_pixel/2); } else { /* could bail out here since we cannot zoom any finer, - but leave that to the clamp_samples_per_pixel() and - equality test below + but leave that to the equality test below */ new_spp = samples_per_pixel; } @@ -1816,8 +1782,6 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame) range_before -= range_before/2; } - clamp_samples_per_pixel (new_spp); - if (new_spp == samples_per_pixel) { return; }