summaryrefslogtreecommitdiff
path: root/libs/ardour/transport_master.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-05-12 14:59:44 +0200
committerRobin Gareus <robin@gareus.org>2020-05-12 14:59:44 +0200
commitfb203f3df8d6b062ac6c8cf71306c4c73f94a360 (patch)
treeae20f5dcbd61bc57a63f3aec1bb59b056de23cd8 /libs/ardour/transport_master.cc
parentb36e6b8341ef8e044b1fbadd9462c454a82b85e3 (diff)
Consolidate delta-string format, avoid markup
Diffstat (limited to 'libs/ardour/transport_master.cc')
-rw-r--r--libs/ardour/transport_master.cc23
1 files changed, 23 insertions, 0 deletions
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);
+}