Tempo ramps - allow moving the first meter if audio locked.
authornick_m <mainsbridge@gmail.com>
Sat, 19 Mar 2016 14:03:10 +0000 (01:03 +1100)
committernick_m <mainsbridge@gmail.com>
Fri, 27 May 2016 13:38:11 +0000 (23:38 +1000)
- strangely broken wrt the grid, but kind-of works.

gtk2_ardour/editor_tempodisplay.cc
libs/ardour/tempo.cc

index 56ee463f9f8b82aadb59a2f3936df554da363ab2..3f19665760ccc4f13bc75455c6c42c954ed5da7a 100644 (file)
@@ -116,7 +116,6 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/)
        }
 
        std::vector<TempoMap::BBTPoint> grid;
-
        compute_current_bbt_points (grid, leftmost_frame, leftmost_frame + current_page_samples());
        _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
        draw_measures (grid);
@@ -185,12 +184,9 @@ Editor::compute_current_bbt_points (std::vector<TempoMap::BBTPoint>& grid, frame
                return;
        }
 
-       framecnt_t beat_before_lower_pos = _session->tempo_map().frame_at_beat (floor(_session->tempo_map().beat_at_frame (leftmost)));
-       framecnt_t beat_after_upper_pos = _session->tempo_map().frame_at_beat (floor (_session->tempo_map().beat_at_frame (rightmost)) + 1.0);
-
        /* prevent negative values of leftmost from creeping into tempomap
         */
-       _session->tempo_map().get_grid (grid, max (beat_before_lower_pos, (framepos_t) 0), beat_after_upper_pos);
+       _session->tempo_map().get_grid (grid, max (leftmost, (framepos_t) 0), rightmost);
 }
 
 void
index a8db57c36e757bc8e9c14b41a3c205834b5b4e92..cdd279ae251edd01d681582895ff565320ba7228 100644 (file)
@@ -1454,10 +1454,10 @@ TempoMap::beat_at_pulse (const Metrics& metrics, const double& pulse) const
        for (Metrics::const_iterator i = metrics.begin(); i != metrics.end(); ++i) {
                MeterSection* m;
                if ((m = dynamic_cast<MeterSection*> (*i)) != 0) {
-                       if (m->pulse() > pulse) {
-                               break;
-                       }
                        if (prev_ms) {
+                               if (m->pulse() > pulse) {
+                                       break;
+                               }
                                accumulated_beats += (m->pulse() - prev_ms->pulse()) * prev_ms->note_divisor();
                        }
                        prev_ms = m;