From dca7cbc9632635399a57a5f3f763592a6b865c85 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 7 Feb 2021 13:31:19 +0100 Subject: [PATCH] Allow to configure decimals of MinSec clock format --- gtk2_ardour/audio_clock.cc | 37 ++++++++++++++++++++++++++++++------- gtk2_ardour/audio_clock.h | 2 +- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index fb30e0913f..5537428261 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -1058,7 +1058,7 @@ AudioClock::set_seconds (samplepos_t when, bool /*force*/) } void -AudioClock::print_minsec (samplepos_t when, char* buf, size_t bufsize, float sample_rate) +AudioClock::print_minsec (samplepos_t when, char* buf, size_t bufsize, float sample_rate, int decimals) { samplecnt_t left; int hrs; @@ -1074,6 +1074,20 @@ AudioClock::print_minsec (samplepos_t when, char* buf, size_t bufsize, float sam negative = false; } + float dmult; + switch (decimals) { + case 1: + dmult = 10.f; + break; + case 2: + dmult = 100.f; + break; + default: + case 3: + dmult = 1000.f; + break; + } + left = when; hrs = (int) floor (left / (sample_rate * 60.0f * 60.0f)); left -= (samplecnt_t) floor (hrs * sample_rate * 60.0f * 60.0f); @@ -1081,14 +1095,23 @@ AudioClock::print_minsec (samplepos_t when, char* buf, size_t bufsize, float sam left -= (samplecnt_t) floor (mins * sample_rate * 60.0f); secs = (int) floor (left / (float) sample_rate); left -= (samplecnt_t) floor ((double)(secs * sample_rate)); - millisecs = floor (left * 1000.0 / (float) sample_rate); + millisecs = floor (left * dmult / (float) sample_rate); - if (negative) { - snprintf (buf, bufsize, "-%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, hrs, mins, secs, millisecs); - } else { - snprintf (buf, bufsize, " %02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, hrs, mins, secs, millisecs); + switch (decimals) { + case 0: + snprintf (buf, bufsize, "%c%02" PRId32 ":%02" PRId32 ":%02" PRId32, negative ? '-' : ' ', hrs, mins, secs); + break; + case 1: + snprintf (buf, bufsize, "%c%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%01" PRId32, negative ? '-' : ' ', hrs, mins, secs, millisecs); + break; + case 2: + snprintf (buf, bufsize, "%c%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%02" PRId32, negative ? '-' : ' ', hrs, mins, secs, millisecs); + break; + default: + case 3: + snprintf (buf, bufsize, "%c%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, negative ? '-' : ' ', hrs, mins, secs, millisecs); + break; } - } void diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 4a59d2dd01..43486ce95e 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -100,7 +100,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr */ void set_scale (double x, double y); - static void print_minsec (samplepos_t, char* buf, size_t bufsize, float sample_rate); + static void print_minsec (samplepos_t, char* buf, size_t bufsize, float sample_rate, int decimals = 3); sigc::signal ValueChanged; sigc::signal mode_changed;