diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-11-27 22:48:59 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-11-27 22:48:59 +0000 |
commit | b286b45ea849b544107e7f03916519b7b00114c3 (patch) | |
tree | c1c7259e1d6dfe7f8af022b78676382d84e58be7 /gtk2_ardour/editor_tempodisplay.cc | |
parent | 3755d8876cd6fec15bfeeab61d08ee85c763ff39 (diff) |
adjust the way we use a pair of iterators into the tempo map so that the iterators are always local to the scope where they are used, which fixes at least one tempo-map related crash; also fix correct setting of join-object-range parameter, where the property wasn't actually used
git-svn-id: svn://localhost/ardour2/branches/3.0@13559 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_tempodisplay.cc')
-rw-r--r-- | gtk2_ardour/editor_tempodisplay.cc | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 005e7ff6fd..97f1d2e2d3 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -114,10 +114,13 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/) tempo_lines->tempo_map_changed(); } - compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames()); + ARDOUR::TempoMap::BBTPointList::const_iterator begin; + ARDOUR::TempoMap::BBTPointList::const_iterator end; + + compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames(), begin, end); _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers redraw_measures (); - update_tempo_based_rulers (); + update_tempo_based_rulers (begin, end); } void @@ -127,7 +130,12 @@ Editor::redisplay_tempo (bool immediate_redraw) return; } - compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames()); // redraw rulers and measures + ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin; + ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end; + + compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames(), + current_bbt_points_begin, current_bbt_points_begin); + if (immediate_redraw) { redraw_measures (); @@ -138,11 +146,13 @@ Editor::redisplay_tempo (bool immediate_redraw) Glib::signal_idle().connect (sigc::mem_fun (*this, &Editor::redraw_measures)); #endif } - update_tempo_based_rulers (); // redraw rulers and measures + update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end); // redraw rulers and measures } void -Editor::compute_current_bbt_points (framepos_t leftmost, framepos_t rightmost) +Editor::compute_current_bbt_points (framepos_t leftmost, framepos_t rightmost, + ARDOUR::TempoMap::BBTPointList::const_iterator& begin, + ARDOUR::TempoMap::BBTPointList::const_iterator& end) { if (!_session) { return; @@ -151,7 +161,7 @@ Editor::compute_current_bbt_points (framepos_t leftmost, framepos_t rightmost) /* prevent negative values of leftmost from creeping into tempomap */ - _session->tempo_map().get_grid (current_bbt_points_begin, current_bbt_points_end, max (leftmost, (framepos_t) 0), rightmost); + _session->tempo_map().get_grid (begin, end, max (leftmost, (framepos_t) 0), rightmost); } void @@ -164,14 +174,20 @@ Editor::hide_measures () bool Editor::redraw_measures () { - draw_measures (); + ARDOUR::TempoMap::BBTPointList::const_iterator begin; + ARDOUR::TempoMap::BBTPointList::const_iterator end; + + compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames(), begin, end); + draw_measures (begin, end); + return false; } void -Editor::draw_measures () +Editor::draw_measures (ARDOUR::TempoMap::BBTPointList::const_iterator& begin, + ARDOUR::TempoMap::BBTPointList::const_iterator& end) { - if (_session == 0 || _show_measures == false || distance (current_bbt_points_begin, current_bbt_points_end) == 0) { + if (_session == 0 || _show_measures == false || distance (begin, end) == 0) { return; } @@ -179,7 +195,7 @@ Editor::draw_measures () tempo_lines = new TempoLines(*track_canvas, time_line_group, physical_screen_height(get_window())); } - tempo_lines->draw (current_bbt_points_begin, current_bbt_points_end, frames_per_unit); + tempo_lines->draw (begin, end, frames_per_unit); } void |