From eab61cbafe4b2f326063079584cf3d8574a028b8 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 9 Jul 2014 19:13:18 -0400 Subject: break out AudioClock::print_minsec() so that AudioClock and VerboseCursor can use the same formatting code. --- gtk2_ardour/audio_clock.cc | 54 +++++++++++++++++++++++++------------------ gtk2_ardour/audio_clock.h | 2 ++ gtk2_ardour/verbose_cursor.cc | 26 +++------------------ 3 files changed, 37 insertions(+), 45 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 0c7f41f6eb..01953b4829 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -1100,15 +1100,43 @@ AudioClock::set_frames (framepos_t when, bool /*force*/) } void -AudioClock::set_minsec (framepos_t when, bool /*force*/) +AudioClock::print_minsec (framepos_t when, char* buf, size_t bufsize, float frame_rate) { - char buf[32]; framecnt_t left; int hrs; int mins; int secs; int millisecs; - bool negative = false; + bool negative; + + if (when < 0) { + when = -when; + negative = true; + } else { + negative = false; + } + + left = when; + hrs = (int) floor (left / (frame_rate * 60.0f * 60.0f)); + left -= (framecnt_t) floor (hrs * frame_rate * 60.0f * 60.0f); + mins = (int) floor (left / (frame_rate * 60.0f)); + left -= (framecnt_t) floor (mins * frame_rate * 60.0f); + secs = (int) floor (left / (float) frame_rate); + left -= (framecnt_t) floor ((double)(secs * frame_rate)); + millisecs = floor (left * 1000.0 / (float) frame_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); + } + +} + +void +AudioClock::set_minsec (framepos_t when, bool /*force*/) +{ + char buf[32]; if (_off) { _layout->set_text (" --:--:--.---"); @@ -1121,25 +1149,7 @@ AudioClock::set_minsec (framepos_t when, bool /*force*/) return; } - if (when < 0) { - when = -when; - negative = true; - } - - left = when; - hrs = (int) floor (left / (_session->frame_rate() * 60.0f * 60.0f)); - left -= (framecnt_t) floor (hrs * _session->frame_rate() * 60.0f * 60.0f); - mins = (int) floor (left / (_session->frame_rate() * 60.0f)); - left -= (framecnt_t) floor (mins * _session->frame_rate() * 60.0f); - secs = (int) floor (left / (float) _session->frame_rate()); - left -= (framecnt_t) floor ((double)(secs * _session->frame_rate())); - millisecs = floor (left * 1000.0 / (float) _session->frame_rate()); - - if (negative) { - snprintf (buf, sizeof (buf), "-%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, hrs, mins, secs, millisecs); - } else { - snprintf (buf, sizeof (buf), " %02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, hrs, mins, secs, millisecs); - } + print_minsec (when, buf, sizeof (buf), _session->frame_rate()); _layout->set_text (buf); set_slave_info(); diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 83b6b5794a..bd25a9afda 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -77,6 +77,8 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr void set_session (ARDOUR::Session *s); void set_negative_allowed (bool yn); + static void print_minsec (framepos_t, char* buf, size_t bufsize, float frame_rate); + sigc::signal ValueChanged; sigc::signal mode_changed; sigc::signal ChangeAborted; diff --git a/gtk2_ardour/verbose_cursor.cc b/gtk2_ardour/verbose_cursor.cc index b24dfbc8a8..1ed7a82a83 100644 --- a/gtk2_ardour/verbose_cursor.cc +++ b/gtk2_ardour/verbose_cursor.cc @@ -98,9 +98,6 @@ VerboseCursor::set_time (framepos_t frame) char buf[128]; Timecode::Time timecode; Timecode::BBT_Time bbt; - int hours, mins; - framepos_t frame_rate; - float secs; if (_editor->_session == 0) { return; @@ -122,14 +119,7 @@ VerboseCursor::set_time (framepos_t frame) break; case AudioClock::MinSec: - /* XXX this is copied from show_verbose_duration_cursor() */ - frame_rate = _editor->_session->frame_rate(); - hours = frame / (frame_rate * 3600); - frame = frame % (frame_rate * 3600); - mins = frame / (frame_rate * 60); - frame = frame % (frame_rate * 60); - secs = (float) frame / (float) frame_rate; - snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%07.4f", hours, mins, secs); + AudioClock::print_minsec (frame, buf, sizeof (buf), _editor->_session->frame_rate()); break; default: @@ -147,9 +137,7 @@ VerboseCursor::set_duration (framepos_t start, framepos_t end) Timecode::Time timecode; Timecode::BBT_Time sbbt; Timecode::BBT_Time ebbt; - int hours, mins; - framepos_t distance, frame_rate; - float secs; + framepos_t frame_rate; Meter meter_at_start (_editor->_session->tempo_map().meter_at(start)); if (_editor->_session == 0) { @@ -201,15 +189,7 @@ VerboseCursor::set_duration (framepos_t start, framepos_t end) break; case AudioClock::MinSec: - /* XXX this stuff should be elsewhere.. */ - distance = end - start; - frame_rate = _editor->_session->frame_rate(); - hours = distance / (frame_rate * 3600); - distance = distance % (frame_rate * 3600); - mins = distance / (frame_rate * 60); - distance = distance % (frame_rate * 60); - secs = (float) distance / (float) frame_rate; - snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%07.4f", hours, mins, secs); + AudioClock::print_minsec (end - start, buf, sizeof (buf), _editor->_session->frame_rate()); break; default: -- cgit v1.2.3