diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-05-28 12:18:30 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-05-28 12:18:37 -0400 |
commit | 24537477c4c544d0d308f9348396469241918100 (patch) | |
tree | 45f0daac6e7c940c3f5ccb236de367dfeacc064b /gtk2_ardour | |
parent | f1f8f89fcb9312065a818233dff4a3f1871fa7fe (diff) |
fix up operation of Editor::temporal_zoom_to_frame() which had not been updated since samples_per_pixel was changed to an integer (framecnt_t)
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 8719a33453..e6b4fee43e 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1777,23 +1777,41 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame) if (!_session) { return; } - double range_before = frame - leftmost_frame; - double new_fpp; - new_fpp = samples_per_pixel; + framecnt_t range_before = frame - leftmost_frame; + framecnt_t new_spp; if (coarser) { - new_fpp *= 1.61803399; - range_before *= 1.61803399; + if (samples_per_pixel <= 1) { + new_spp = 2; + } else { + new_spp = samples_per_pixel + (samples_per_pixel/2); + } + range_before += range_before/2; } else { - new_fpp = max(1.0,(new_fpp/1.61803399)); - range_before /= 1.61803399; + if (samples_per_pixel >= 1) { + 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 + */ + new_spp = samples_per_pixel; + } + + range_before -= range_before/2; } - if (new_fpp == samples_per_pixel) { + clamp_samples_per_pixel (new_spp); + + if (new_spp == samples_per_pixel) { return; } + /* zoom focus is automatically taken as @param frame when this + method is used. + */ + framepos_t new_leftmost = frame - (framepos_t)range_before; if (new_leftmost > frame) { @@ -1804,7 +1822,7 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame) new_leftmost = 0; } - reposition_and_zoom (new_leftmost, new_fpp); + reposition_and_zoom (new_leftmost, new_spp); } |