From 92920307ae6c91924d94c7514ad050fe5ab64c3f Mon Sep 17 00:00:00 2001 From: nick_m Date: Mon, 17 Oct 2016 01:28:33 +1100 Subject: Tempo curve cleanup, now also works on optimized builds. --- gtk2_ardour/tempo_curve.cc | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'gtk2_ardour/tempo_curve.cc') diff --git a/gtk2_ardour/tempo_curve.cc b/gtk2_ardour/tempo_curve.cc index 6a9a20727b..358457e505 100644 --- a/gtk2_ardour/tempo_curve.cc +++ b/gtk2_ardour/tempo_curve.cc @@ -51,15 +51,8 @@ TempoCurve::TempoCurve (PublicEditor& ed, ArdourCanvas::Container& parent, guint #ifdef CANVAS_DEBUG _curve->name = string_compose ("TempoCurve::curve for %1", _tempo.beats_per_minute()); #endif - _curve->set_fill_mode (ArdourCanvas::FramedCurve::Inside); _curve->set_points_per_segment (3); - points = new ArdourCanvas::Points (); - points->push_back (ArdourCanvas::Duple (0.0, 0.0)); - points->push_back (ArdourCanvas::Duple (1.0, 0.0)); - points->push_back (ArdourCanvas::Duple (1.0, curve_height)); - points->push_back (ArdourCanvas::Duple (0.0, curve_height)); - _curve->set (*points); set_color_rgba (rgba); @@ -76,7 +69,6 @@ TempoCurve::TempoCurve (PublicEditor& ed, ArdourCanvas::Container& parent, guint //group->Event.connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_marker_event), group, this)); } - set_position (_tempo.frame(), UINT32_MAX); _curve->Event.connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_tempo_curve_event), _curve, this)); } @@ -116,17 +108,23 @@ TempoCurve::set_position (framepos_t frame, framepos_t end_frame) _end_frame = end_frame; points->clear(); - points = new ArdourCanvas::Points (); + points->push_back (ArdourCanvas::Duple (0.0, curve_height)); - if (end_frame == UINT32_MAX) { - const double tempo_at = _tempo.tempo_at_frame (frame, editor.session()->frame_rate()); + if (end_frame == (framepos_t) UINT32_MAX) { + const double tempo_at = _tempo.beats_per_minute(); const double y_pos = (curve_height) - (((tempo_at - _min_tempo) / (_max_tempo - _min_tempo)) * curve_height); points->push_back (ArdourCanvas::Duple (0.0, y_pos)); points->push_back (ArdourCanvas::Duple (ArdourCanvas::COORD_MAX - 5.0, y_pos)); + } else if (_tempo.type() == ARDOUR::TempoSection::Constant) { + const double tempo_at = _tempo.beats_per_minute(); + const double y_pos = (curve_height) - (((tempo_at - _min_tempo) / (_max_tempo - _min_tempo)) * curve_height); + + points->push_back (ArdourCanvas::Duple (0.0, y_pos)); + points->push_back (ArdourCanvas::Duple (editor.sample_to_pixel (end_frame - frame), y_pos)); } else { const framepos_t frame_step = max ((end_frame - frame) / 5, (framepos_t) 1); -- cgit v1.2.3