From fb203f3df8d6b062ac6c8cf71306c4c73f94a360 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 12 May 2020 14:59:44 +0200 Subject: Consolidate delta-string format, avoid markup --- libs/ardour/ardour/transport_master.h | 6 ++---- libs/ardour/engine_slave.cc | 2 +- libs/ardour/ltc_slave.cc | 18 +++--------------- libs/ardour/midi_clock_slave.cc | 7 ++----- libs/ardour/mtc_slave.cc | 15 ++------------- libs/ardour/transport_master.cc | 23 +++++++++++++++++++++++ 6 files changed, 33 insertions(+), 38 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/transport_master.h b/libs/ardour/ardour/transport_master.h index aebd4cfe06..02f728e483 100644 --- a/libs/ardour/ardour/transport_master.h +++ b/libs/ardour/ardour/transport_master.h @@ -43,10 +43,6 @@ #include "midi++/parser.h" #include "midi++/types.h" -/* used for delta_string(): (note: \u00B1 is the plus-or-minus sign) */ -#define PLUSMINUS(A) (((A) < 0) ? "-" : (((A) > 0) ? "+" : "\u00B1")) -#define LEADINGZERO(A) ((A) < 10 ? " " : (A) < 100 ? " " : (A) < 1000 ? " " : (A) < 10000 ? " " : "") - namespace ARDOUR { class TempoMap; @@ -449,6 +445,8 @@ protected: PBD::ScopedConnection backend_connection; virtual void register_properties (); + + virtual std::string format_delta_time (sampleoffset_t) const; }; /** a helper class for any TransportMaster that receives its input via a MIDI diff --git a/libs/ardour/engine_slave.cc b/libs/ardour/engine_slave.cc index 374564e7c6..23be6ecd5b 100644 --- a/libs/ardour/engine_slave.cc +++ b/libs/ardour/engine_slave.cc @@ -123,7 +123,7 @@ Engine_TransportMaster::position_string () const std::string Engine_TransportMaster::delta_string () const { - return string ("\u0394 0"); + return string ("\u0394 0 "); } bool diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index bbd82c0556..266a9bc305 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -696,23 +696,11 @@ LTC_TransportMaster::position_string() const std::string LTC_TransportMaster::delta_string() const { - char delta[128]; - if (!_collect || current.timestamp == 0) { - snprintf (delta, sizeof(delta), "\u2012\u2012\u2012\u2012"); + return X_("\u2012\u2012\u2012\u2012"); } else if ((monotonic_cnt - current.timestamp) > 2 * samples_per_ltc_frame) { - snprintf (delta, sizeof(delta), "%s", _("flywheel")); + return _("flywheel"); } else { - if (abs (_current_delta) > ENGINE->sample_rate()) { - int secs = rint ((double) _current_delta / ENGINE->sample_rate()); - snprintf(delta, sizeof(delta), "\u0394%s%s%d s", - LEADINGZERO(abs(secs)), PLUSMINUS(-secs), abs(secs)); - } else { - snprintf (delta, sizeof(delta), "\u0394%s%s%lldsm", - _sclock_synced && sync_lock_broken ? "foreground=\"red\"" : "", - PLUSMINUS(-_current_delta), LEADINGZERO(::llabs(_current_delta)), ::llabs(_current_delta)); - } + return format_delta_time (_current_delta); } - - return delta; } diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc index b9e1e31e6c..f3d2f3cceb 100644 --- a/libs/ardour/midi_clock_slave.cc +++ b/libs/ardour/midi_clock_slave.cc @@ -404,17 +404,14 @@ MIDIClock_TransportMaster::position_string () const std::string MIDIClock_TransportMaster::delta_string() const { - char delta[80]; SafeTime last; current.safe_read (last); if (last.timestamp == 0 || starting()) { - snprintf(delta, sizeof(delta), "\u2012\u2012\u2012\u2012"); + return X_("\u2012\u2012\u2012\u2012"); } else { - snprintf(delta, sizeof(delta), "\u0394%s%s%" PRIi64 "sm", - LEADINGZERO(abs(_current_delta)), PLUSMINUS(-_current_delta), abs(_current_delta)); + return format_delta_time (_current_delta); } - return std::string(delta); } void diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc index c0578d0908..181c4f277e 100644 --- a/libs/ardour/mtc_slave.cc +++ b/libs/ardour/mtc_slave.cc @@ -598,25 +598,14 @@ MTC_TransportMaster::position_string() const std::string MTC_TransportMaster::delta_string () const { - char delta[128]; SafeTime last; current.safe_read (last); - delta[0] = '\0'; - if (last.timestamp == 0 || reset_pending) { - snprintf(delta, sizeof(delta), "\u2012\u2012\u2012\u2012"); + return X_("\u2012\u2012\u2012\u2012"); } else { - if (abs (_current_delta) > _session->sample_rate()) { - int secs = rint ((double) _current_delta / _session->sample_rate()); - snprintf(delta, sizeof(delta), "\u0394%s%s%d s", - LEADINGZERO(abs(secs)), PLUSMINUS(-secs), abs(secs)); - } else { - snprintf(delta, sizeof(delta), "\u0394%s%s%" PRIi64 "sm", - PLUSMINUS(-_current_delta), LEADINGZERO(abs(_current_delta)), abs(_current_delta)); - } + return format_delta_time (_current_delta); } - return std::string(delta); } void diff --git a/libs/ardour/transport_master.cc b/libs/ardour/transport_master.cc index 2faa5dc715..d7e0a040c5 100644 --- a/libs/ardour/transport_master.cc +++ b/libs/ardour/transport_master.cc @@ -531,3 +531,26 @@ TimecodeTransportMaster::set_fr2997 (bool yn) PropertyChanged (Properties::fr2997); } } + +/* used for delta_string(): (note: \u00B1 is the plus-or-minus sign) */ +#define PLUSMINUS(A) (((A) < 0) ? "-" : (((A) > 0) ? "+" : "\u00B1")) +#define LEADINGZERO(A) ((A) < 10 ? " " : (A) < 100 ? " " : (A) < 1000 ? " " : (A) < 10000 ? " " : "") + +std::string +TransportMaster::format_delta_time (sampleoffset_t delta) const +{ + char buf[64]; + if (_session) { + samplecnt_t sr = _session->sample_rate(); + if (abs (_current_delta) >= sr) { + int secs = rint ((double) delta / sr); + snprintf(buf, sizeof(buf), "\u0394%s%s%d s", LEADINGZERO(abs(secs)), PLUSMINUS(-secs), abs(secs)); + buf[63] = '\0'; + return std::string(buf); + } + } + /* left-align sign, to make it readable when decimals jitter */ + snprintf (buf, sizeof(buf), "\u0394%s%s%lldsm", PLUSMINUS(-delta), LEADINGZERO(::llabs(delta)), ::llabs(delta)); + buf[63] = '\0'; + return std::string(buf); +} -- cgit v1.2.3