summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-07-09 19:13:18 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-07-09 19:13:18 -0400
commiteab61cbafe4b2f326063079584cf3d8574a028b8 (patch)
tree5edd41a0b99e781070ef01d3fa462f6a3ed9d932
parenta2294aa0ff70238a34b4e2656d2742a732a47046 (diff)
break out AudioClock::print_minsec() so that AudioClock and VerboseCursor can use the same formatting code.
-rw-r--r--gtk2_ardour/audio_clock.cc54
-rw-r--r--gtk2_ardour/audio_clock.h2
-rw-r--r--gtk2_ardour/verbose_cursor.cc26
3 files changed, 37 insertions, 45 deletions
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<void> ValueChanged;
sigc::signal<void> mode_changed;
sigc::signal<void> 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: