summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r--gtk2_ardour/editor.cc138
1 files changed, 76 insertions, 62 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 72997a9ad0..07ccff2ae1 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -129,9 +129,9 @@ const double Editor::timebar_height = 15.0;
static const gchar *_snap_type_strings[] = {
N_("CD Frames"),
- N_("SMPTE Frames"),
- N_("SMPTE Seconds"),
- N_("SMPTE Minutes"),
+ N_("Timecode Frames"),
+ N_("Timecode Seconds"),
+ N_("Timecode Minutes"),
N_("Seconds"),
N_("Minutes"),
N_("Beats/32"),
@@ -214,7 +214,7 @@ Editor::Editor ()
/* time display buttons */
: minsec_label (_("Mins:Secs"))
, bbt_label (_("Bars:Beats"))
- , smpte_label (_("Timecode"))
+ , timecode_label (_("Timecode"))
, frame_label (_("Samples"))
, tempo_label (_("Tempo"))
, meter_label (_("Meter"))
@@ -380,12 +380,12 @@ Editor::Editor ()
minsec_label.set_padding (5,0);
minsec_label.hide ();
minsec_label.set_no_show_all();
- smpte_label.set_name ("EditorTimeButton");
- smpte_label.set_size_request (-1, (int)timebar_height);
- smpte_label.set_alignment (1.0, 0.5);
- smpte_label.set_padding (5,0);
- smpte_label.hide ();
- smpte_label.set_no_show_all();
+ timecode_label.set_name ("EditorTimeButton");
+ timecode_label.set_size_request (-1, (int)timebar_height);
+ timecode_label.set_alignment (1.0, 0.5);
+ timecode_label.set_padding (5,0);
+ timecode_label.hide ();
+ timecode_label.set_no_show_all();
frame_label.set_name ("EditorTimeButton");
frame_label.set_size_request (-1, (int)timebar_height);
frame_label.set_alignment (1.0, 0.5);
@@ -1086,7 +1086,7 @@ Editor::connect_to_session (Session *t)
session_connections.push_back (session->StateSaved.connect (mem_fun(*this, &Editor::update_title_s)));
session_connections.push_back (session->AskAboutPlaylistDeletion.connect (mem_fun(*this, &Editor::playlist_deletion_dialog)));
- session_connections.push_back (session->SMPTEOffsetChanged.connect (mem_fun(*this, &Editor::update_just_smpte)));
+ session_connections.push_back (session->TimecodeOffsetChanged.connect (mem_fun(*this, &Editor::update_just_timecode)));
session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed)));
@@ -1108,7 +1108,7 @@ Editor::connect_to_session (Session *t)
nudge_clock.set (pos, true, 0, AudioClock::BBT);
} else {
- nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::SMPTE); // default of 5 seconds
+ nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds
}
playhead_cursor->canvas_item.show ();
@@ -2564,72 +2564,86 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
}
void
-Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
+Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
{
- nframes64_t before;
- nframes64_t after;
-
- const nframes64_t one_second = session->frame_rate();
- const nframes64_t one_minute = session->frame_rate() * 60;
- const nframes64_t one_smpte_second = (nframes64_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame());
- nframes64_t one_smpte_minute = (nframes64_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame() * 60);
- nframes64_t presnap = start;
+ const nframes64_t one_timecode_second = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame());
+ nframes64_t one_timecode_minute = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame() * 60);
switch (snap_type) {
- case SnapToCDFrame:
- if (((direction == 0) && (start % (one_second/75) > (one_second/75) / 2)) || (direction > 0)) {
- start = (nframes64_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
+ case SnapToTimecodeFrame:
+ if (((direction == 0) && (fmod((double)start, (double)session->frames_per_timecode_frame()) > (session->frames_per_timecode_frame() / 2))) || (direction > 0)) {
+ start = (nframes64_t) (ceil ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame());
} else {
- start = (nframes64_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
- }
- break;
-
- case SnapToSMPTEFrame:
- if (((direction == 0) && (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2))) || (direction > 0)) {
- start = (nframes64_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
- } else {
- start = (nframes64_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
+ start = (nframes64_t) (floor ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame());
}
break;
- case SnapToSMPTESeconds:
- if (session->smpte_offset_negative())
+ case SnapToTimecodeSeconds:
+ if (session->timecode_offset_negative())
{
- start += session->smpte_offset ();
+ start += session->timecode_offset ();
} else {
- start -= session->smpte_offset ();
+ start -= session->timecode_offset ();
}
- if (((direction == 0) && (start % one_smpte_second > one_smpte_second / 2)) || direction > 0) {
- start = (nframes64_t) ceil ((double) start / one_smpte_second) * one_smpte_second;
+ if (((direction == 0) && (start % one_timecode_second > one_timecode_second / 2)) || direction > 0) {
+ start = (nframes64_t) ceil ((double) start / one_timecode_second) * one_timecode_second;
} else {
- start = (nframes64_t) floor ((double) start / one_smpte_second) * one_smpte_second;
+ start = (nframes64_t) floor ((double) start / one_timecode_second) * one_timecode_second;
}
- if (session->smpte_offset_negative())
+ if (session->timecode_offset_negative())
{
- start -= session->smpte_offset ();
+ start -= session->timecode_offset ();
} else {
- start += session->smpte_offset ();
+ start += session->timecode_offset ();
}
break;
- case SnapToSMPTEMinutes:
- if (session->smpte_offset_negative())
+ case SnapToTimecodeMinutes:
+ if (session->timecode_offset_negative())
{
- start += session->smpte_offset ();
+ start += session->timecode_offset ();
} else {
- start -= session->smpte_offset ();
+ start -= session->timecode_offset ();
}
- if (((direction == 0) && (start % one_smpte_minute > one_smpte_minute / 2)) || direction > 0) {
- start = (nframes64_t) ceil ((double) start / one_smpte_minute) * one_smpte_minute;
+ if (((direction == 0) && (start % one_timecode_minute > one_timecode_minute / 2)) || direction > 0) {
+ start = (nframes64_t) ceil ((double) start / one_timecode_minute) * one_timecode_minute;
} else {
- start = (nframes64_t) floor ((double) start / one_smpte_minute) * one_smpte_minute;
+ start = (nframes64_t) floor ((double) start / one_timecode_minute) * one_timecode_minute;
}
- if (session->smpte_offset_negative())
+ if (session->timecode_offset_negative())
{
- start -= session->smpte_offset ();
+ start -= session->timecode_offset ();
+ } else {
+ start += session->timecode_offset ();
+ }
+ break;
+ default:
+ fatal << "Editor::smpte_snap_to_internal() called with non-timecode snap type!" << endmsg;
+ /*NOTREACHED*/
+ }
+}
+
+void
+Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
+{
+ const nframes64_t one_second = session->frame_rate();
+ const nframes64_t one_minute = session->frame_rate() * 60;
+ nframes64_t presnap = start;
+ nframes64_t before;
+ nframes64_t after;
+
+ switch (snap_type) {
+ case SnapToTimecodeFrame:
+ case SnapToTimecodeSeconds:
+ case SnapToTimecodeMinutes:
+ return timecode_snap_to_internal (start, direction, for_mark);
+
+ case SnapToCDFrame:
+ if (((direction == 0) && (start % (one_second/75) > (one_second/75) / 2)) || (direction > 0)) {
+ start = (nframes64_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
} else {
- start += session->smpte_offset ();
+ start = (nframes64_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
}
break;
@@ -3463,12 +3477,12 @@ Editor::snap_type_selection_done ()
snaptype = SnapToRegionSync;
} else if (choice == _("CD Frames")) {
snaptype = SnapToCDFrame;
- } else if (choice == _("SMPTE Frames")) {
- snaptype = SnapToSMPTEFrame;
- } else if (choice == _("SMPTE Seconds")) {
- snaptype = SnapToSMPTESeconds;
- } else if (choice == _("SMPTE Minutes")) {
- snaptype = SnapToSMPTEMinutes;
+ } else if (choice == _("Timecode Frames")) {
+ snaptype = SnapToTimecodeFrame;
+ } else if (choice == _("Timecode Seconds")) {
+ snaptype = SnapToTimecodeSeconds;
+ } else if (choice == _("Timecode Minutes")) {
+ snaptype = SnapToTimecodeMinutes;
} else if (choice == _("Seconds")) {
snaptype = SnapToSeconds;
} else if (choice == _("Minutes")) {
@@ -3853,9 +3867,9 @@ Editor::get_grid_type_as_beats (bool& success, nframes64_t position)
break;
case SnapToCDFrame:
- case SnapToSMPTEFrame:
- case SnapToSMPTESeconds:
- case SnapToSMPTEMinutes:
+ case SnapToTimecodeFrame:
+ case SnapToTimecodeSeconds:
+ case SnapToTimecodeMinutes:
case SnapToSeconds:
case SnapToMinutes:
case SnapToRegionStart: