Consolidate delta-string format, avoid markup

This commit is contained in:
Robin Gareus 2020-05-12 14:59:44 +02:00
parent b36e6b8341
commit fb203f3df8
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
6 changed files with 33 additions and 38 deletions

View file

@ -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

View file

@ -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

View file

@ -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<span face=\"monospace\" >%s%s%d</span><span face=\"monospace\"> s</span>",
LEADINGZERO(abs(secs)), PLUSMINUS(-secs), abs(secs));
} else {
snprintf (delta, sizeof(delta), "\u0394<span %s face=\"monospace\" >%s%s%lld</span><span face=\"monospace\">sm</span>",
_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;
}

View file

@ -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<span foreground=\"green\" face=\"monospace\" >%s%s%" PRIi64 "</span>sm",
LEADINGZERO(abs(_current_delta)), PLUSMINUS(-_current_delta), abs(_current_delta));
return format_delta_time (_current_delta);
}
return std::string(delta);
}
void

View file

@ -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<span face=\"monospace\" >%s%s%d</span><span face=\"monospace\"> s</span>",
LEADINGZERO(abs(secs)), PLUSMINUS(-secs), abs(secs));
} else {
snprintf(delta, sizeof(delta), "\u0394<span face=\"monospace\" >%s%s%" PRIi64 "</span><span face=\"monospace\">sm</span>",
PLUSMINUS(-_current_delta), LEADINGZERO(abs(_current_delta)), abs(_current_delta));
}
return format_delta_time (_current_delta);
}
return std::string(delta);
}
void

View file

@ -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);
}