diff options
author | nick_m <mainsbridge@gmail.com> | 2016-10-17 01:28:33 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-10-17 01:28:33 +1100 |
commit | 92920307ae6c91924d94c7514ad050fe5ab64c3f (patch) | |
tree | db46e74e5e560ceaac49c92dd7e8ad8c97c0943c | |
parent | 29f60441801d3dbef9d2f4fc0db04a9f883261c2 (diff) |
Tempo curve cleanup, now also works on optimized builds.
-rw-r--r-- | gtk2_ardour/tempo_curve.cc | 20 | ||||
-rw-r--r-- | libs/canvas/framed_curve.cc | 15 |
2 files changed, 20 insertions, 15 deletions
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); diff --git a/libs/canvas/framed_curve.cc b/libs/canvas/framed_curve.cc index 748fb03ebd..b1e0952b1f 100644 --- a/libs/canvas/framed_curve.cc +++ b/libs/canvas/framed_curve.cc @@ -31,7 +31,7 @@ FramedCurve::FramedCurve (Canvas* c) : PolyItem (c) , n_samples (0) , points_per_segment (16) - , curve_fill (None) + , curve_fill (Inside) { } @@ -39,7 +39,7 @@ FramedCurve::FramedCurve (Item* parent) : PolyItem (parent) , n_samples (0) , points_per_segment (16) - , curve_fill (None) + , curve_fill (Inside) { } @@ -85,8 +85,15 @@ FramedCurve::interpolate () } samples.clear (); - InterpolatedCurve::interpolate (curve_points, points_per_segment, CatmullRomCentripetal, false, samples); - n_samples = samples.size(); + if (_points.size() == 3) { + samples.push_back (curve_points.front()); + samples.push_back (curve_points.back()); + n_samples = 2; + } else { + + InterpolatedCurve::interpolate (curve_points, points_per_segment, CatmullRomCentripetal, false, samples); + n_samples = samples.size(); + } } void |