break out AudioClock::print_minsec() so that AudioClock and VerboseCursor can use...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 9 Jul 2014 23:13:18 +0000 (19:13 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 9 Jul 2014 23:13:18 +0000 (19:13 -0400)
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_clock.h
gtk2_ardour/verbose_cursor.cc

index 0c7f41f6ebe699b4b48d43a9a631df8ef0753119..01953b4829527df5b3b106e94829507f2f15888c 100644 (file)
@@ -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();
index 83b6b5794a8a2f29c9a72c82d4c7468be1d6d9a9..bd25a9afdaf9b26ed6c624abfa58c5f16a1aefb0 100644 (file)
@@ -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<void> ValueChanged;
        sigc::signal<void> mode_changed;
        sigc::signal<void> ChangeAborted;
index b24dfbc8a84780d962f3f53b3d5b2ff4442f84c8..1ed7a82a83e8a1e374b3128aa3d8be6b78d321a8 100644 (file)
@@ -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: