13
0

break out AudioClock::print_minsec() so that AudioClock and VerboseCursor can use the same formatting code.

This commit is contained in:
Paul Davis 2014-07-09 19:13:18 -04:00
parent a2294aa0ff
commit eab61cbafe
3 changed files with 37 additions and 45 deletions

View 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();

View 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;

View 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: