summaryrefslogtreecommitdiff
path: root/gtk2_ardour/tempo_curve.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-10-17 01:28:33 +1100
committernick_m <mainsbridge@gmail.com>2016-10-17 01:28:33 +1100
commit92920307ae6c91924d94c7514ad050fe5ab64c3f (patch)
treedb46e74e5e560ceaac49c92dd7e8ad8c97c0943c /gtk2_ardour/tempo_curve.cc
parent29f60441801d3dbef9d2f4fc0db04a9f883261c2 (diff)
Tempo curve cleanup, now also works on optimized builds.
Diffstat (limited to 'gtk2_ardour/tempo_curve.cc')
-rw-r--r--gtk2_ardour/tempo_curve.cc20
1 files changed, 9 insertions, 11 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);