diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index 11d105f6ff..1d88630886 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -794,7 +794,7 @@ TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Item& parent, Ardo _mapping_text->set_ignore_events (true); char buf[64]; - snprintf (buf, sizeof (buf), "%.1f", _tempo->note_types_per_minute ()); + TempoCurve::format_tempo (_tempo->note_types_per_minute(), _tempo->note_type(), buf, sizeof (buf)); _mapping_text->set (buf); } @@ -825,7 +825,7 @@ TempoMarker::update () _mapping_text->set_position (ArdourCanvas::Duple (std::max (3., unit_position), _mapping_text->position().y)); char buf[64]; - snprintf (buf, sizeof (buf), "%.1f", _tempo->note_types_per_minute ()); + TempoCurve::format_tempo (_tempo->note_types_per_minute(), _tempo->note_type(), buf, sizeof (buf)); _mapping_text->set (buf); } diff --git a/gtk2_ardour/tempo_curve.cc b/gtk2_ardour/tempo_curve.cc index a4e09f1e54..12ab15bdd1 100644 --- a/gtk2_ardour/tempo_curve.cc +++ b/gtk2_ardour/tempo_curve.cc @@ -86,9 +86,9 @@ TempoCurve::TempoCurve (PublicEditor& ed, ArdourCanvas::Item& parent, guint32 rg _start_text->set_color (RGBA_TO_UINT (255,255,255,255)); _end_text->set_color (RGBA_TO_UINT (255,255,255,255)); char buf[128]; - snprintf (buf, sizeof (buf), "%.1f/%d", _tempo->note_types_per_minute(), _tempo->note_type()); + format_tempo (_tempo->note_types_per_minute(), _tempo->note_type(), buf, sizeof(buf)); _start_text->set (buf); - snprintf (buf, sizeof (buf), "%.1f", _tempo->end_note_types_per_minute()); + format_tempo (_tempo->end_note_types_per_minute(), _tempo->note_type(), buf, sizeof(buf)); _end_text->set (buf); set_color_rgba (rgba); @@ -118,6 +118,24 @@ TempoCurve::~TempoCurve () delete group; } +void +TempoCurve::format_tempo (double ntpm, int nt, char* buf, size_t bufsize) +{ + if (UIConfiguration::instance().get_allow_non_quarter_pulse()) { + if (fmod (ntpm, 1.0) < 0.1) { + snprintf (buf, bufsize, "%d/%d", (int) ntpm, nt); + } else { + snprintf (buf, bufsize, "%.1f/%d", ntpm, nt); + } + } else { + if (fmod (ntpm, 1.0) < 0.1) { + snprintf (buf, bufsize, "%d", (int) ntpm); + } else { + snprintf (buf, bufsize, "%.1f", ntpm); + } + } +} + ArdourCanvas::Item& TempoCurve::the_item() const { @@ -170,15 +188,12 @@ TempoCurve::set_duration (samplecnt_t duration) _curve->set (points); char buf[129]; - - snprintf (buf, sizeof (buf), "%.1f/%d", _tempo->note_types_per_minute(), _tempo->note_type()); - _start_text->set (buf); - snprintf (buf, sizeof (buf), "%.1f", _tempo->end_note_types_per_minute()); + format_tempo (_tempo->end_note_types_per_minute(), _tempo->note_type(), buf, sizeof(buf)); _end_text->set (buf); const double ui_scale = UIConfiguration::instance ().get_ui_scale (); - _start_text->set_position (ArdourCanvas::Duple (_marker_width + (10 * ui_scale), (.5 * ui_scale))); + _start_text->set_position (ArdourCanvas::Duple ((10 * ui_scale), (.5 * ui_scale))); _end_text->set_position (ArdourCanvas::Duple (duration_pixels - _end_text->text_width() - _marker_width - (10. * ui_scale), (.5 * ui_scale))); if (_end_text->text_width() + _start_text->text_width() + (20.0 * ui_scale) > duration_pixels) { diff --git a/gtk2_ardour/tempo_curve.h b/gtk2_ardour/tempo_curve.h index 1919e96c1c..89be6ab285 100644 --- a/gtk2_ardour/tempo_curve.h +++ b/gtk2_ardour/tempo_curve.h @@ -61,6 +61,8 @@ public: void set_max_tempo (const double& max) { _max_tempo = max; } void set_min_tempo (const double& min) { _min_tempo = min; } + static void format_tempo (double ntpm, int nt, char*, size_t); + protected: PublicEditor& editor;