X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_rulers.cc;h=873e4919583a893962a43ce9bc46892d16eac154;hb=fd3219bf29415006d6680fc5cf2dac97c35972bc;hp=f21c9965988230cc9f6ea4674a9ae022e3785826;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index f21c996598..873e491958 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -17,13 +17,16 @@ */ +#define __STDC_FORMAT_MACROS 1 #include // for sprintf, grrr #include +#include #include #include +#include "ardour/session.h" #include "ardour/tempo.h" #include "ardour/profile.h" #include @@ -38,7 +41,6 @@ #include "i18n.h" -using namespace sigc; using namespace ARDOUR; using namespace PBD; using namespace Gtk; @@ -49,7 +51,7 @@ Editor *Editor::ruler_editor; /* the order here must match the "metric" enums in editor.h */ GtkCustomMetric Editor::ruler_metrics[4] = { - {1, Editor::_metric_get_smpte }, + {1, Editor::_metric_get_timecode }, {1, Editor::_metric_get_bbt }, {1, Editor::_metric_get_frames }, {1, Editor::_metric_get_minsec } @@ -74,14 +76,14 @@ Editor::initialize_rulers () minsec_ruler->hide (); minsec_ruler->set_no_show_all(); - _smpte_ruler = gtk_custom_hruler_new (); - smpte_ruler = Glib::wrap (_smpte_ruler); - smpte_ruler->set_name ("SMPTERuler"); - smpte_ruler->set_size_request (-1, (int)timebar_height); - gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_smpte_ruler), &ruler_metrics[ruler_metric_smpte]); - smpte_ruler->hide (); - smpte_ruler->set_no_show_all(); - smpte_nmarks = 0; + _timecode_ruler = gtk_custom_hruler_new (); + timecode_ruler = Glib::wrap (_timecode_ruler); + timecode_ruler->set_name ("TimecodeRuler"); + timecode_ruler->set_size_request (-1, (int)timebar_height); + gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_timecode_ruler), &ruler_metrics[ruler_metric_timecode]); + timecode_ruler->hide (); + timecode_ruler->set_no_show_all(); + timecode_nmarks = 0; _bbt_ruler = gtk_custom_hruler_new (); bbt_ruler = Glib::wrap (_bbt_ruler); @@ -127,37 +129,37 @@ Editor::initialize_rulers () ruler_lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*minsec_ruler, PACK_SHRINK, PACK_START)); - ruler_lab_children.push_back (Element(smpte_label, PACK_SHRINK, PACK_START)); - ruler_children.insert (canvaspos, Element(*smpte_ruler, PACK_SHRINK, PACK_START)); + ruler_lab_children.push_back (Element(timecode_label, PACK_SHRINK, PACK_START)); + ruler_children.insert (canvaspos, Element(*timecode_ruler, PACK_SHRINK, PACK_START)); ruler_lab_children.push_back (Element(frame_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*frames_ruler, PACK_SHRINK, PACK_START)); ruler_lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START)); ruler_children.insert (canvaspos, Element(*bbt_ruler, PACK_SHRINK, PACK_START)); - smpte_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); + timecode_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); bbt_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); frames_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); minsec_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); - smpte_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - bbt_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - frames_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - minsec_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); + timecode_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release)); + bbt_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release)); + frames_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release)); + minsec_ruler->signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_release)); - smpte_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - bbt_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - frames_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - minsec_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); + timecode_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press)); + bbt_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press)); + frames_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press)); + minsec_ruler->signal_button_press_event().connect (sigc::mem_fun(*this, &Editor::ruler_button_press)); - smpte_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - bbt_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); + timecode_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion)); + bbt_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion)); + frames_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion)); + minsec_ruler->signal_motion_notify_event().connect (sigc::mem_fun(*this, &Editor::ruler_mouse_motion)); - smpte_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); - bbt_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); - frames_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); - minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); + timecode_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll)); + bbt_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll)); + frames_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll)); + minsec_ruler->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::ruler_scroll)); visible_timebars = 0; /*this will be changed below */ canvas_timebars_vsize = 0; @@ -213,7 +215,7 @@ Editor::ruler_scroll (GdkEventScroll* event) gint Editor::ruler_button_press (GdkEventButton* ev) { - if (session == 0) { + if (_session == 0) { return FALSE; } @@ -221,8 +223,8 @@ Editor::ruler_button_press (GdkEventButton* ev) //Gtk::Main::grab_add (*minsec_ruler); Widget * grab_widget = 0; - if (smpte_ruler->is_realized() && ev->window == smpte_ruler->get_window()->gobj()) { - grab_widget = smpte_ruler; + if (timecode_ruler->is_realized() && ev->window == timecode_ruler->get_window()->gobj()) { + grab_widget = timecode_ruler; } else if (bbt_ruler->is_realized() && ev->window == bbt_ruler->get_window()->gobj()) { grab_widget = bbt_ruler; } else if (frames_ruler->is_realized() && ev->window == frames_ruler->get_window()->gobj()) { @@ -239,14 +241,12 @@ Editor::ruler_button_press (GdkEventButton* ev) if (ev->button == 1) { // Since we will locate the playhead on button release, cancel any running // auditions. - if (session->is_auditioning()) { - session->cancel_audition (); + if (_session->is_auditioning()) { + _session->cancel_audition (); } /* playhead cursor */ - assert (_drag == 0); - _drag = new CursorDrag (this, &playhead_cursor->canvas_item, false); - _drag->start_grab (reinterpret_cast (ev)); + _drags->set (new CursorDrag (this, &playhead_cursor->canvas_item, false), reinterpret_cast (ev)); _dragging_playhead = true; } @@ -256,17 +256,15 @@ Editor::ruler_button_press (GdkEventButton* ev) gint Editor::ruler_button_release (GdkEventButton* ev) { - if (session == 0) { + if (_session == 0) { return FALSE; } gint x,y; Gdk::ModifierType state; - if (_drag) { - _drag->end_grab (reinterpret_cast (ev)); - delete _drag; - _drag = 0; + if (_drags->active ()) { + _drags->end_grab (reinterpret_cast (ev)); _dragging_playhead = false; } @@ -306,12 +304,12 @@ Editor::ruler_label_button_release (GdkEventButton* ev) gint Editor::ruler_mouse_motion (GdkEventMotion* ev) { - if (session == 0) { + if (_session == 0) { return FALSE; } - if (_drag) { - _drag->motion_handler (reinterpret_cast (ev), false); + if (_drags->active ()) { + _drags->motion_handler (reinterpret_cast (ev), false); } return TRUE; @@ -335,15 +333,15 @@ Editor::popup_ruler_menu (nframes64_t where, ItemType t) switch (t) { case MarkerBarItem: - ruler_items.push_back (MenuElem (_("New location marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, false, false))); - ruler_items.push_back (MenuElem (_("Clear all locations"), mem_fun(*this, &Editor::clear_markers))); - ruler_items.push_back (MenuElem (_("Unhide locations"), mem_fun(*this, &Editor::unhide_markers))); + ruler_items.push_back (MenuElem (_("New location marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, false, false))); + ruler_items.push_back (MenuElem (_("Clear all locations"), sigc::mem_fun(*this, &Editor::clear_markers))); + ruler_items.push_back (MenuElem (_("Unhide locations"), sigc::mem_fun(*this, &Editor::unhide_markers))); ruler_items.push_back (SeparatorElem ()); break; case RangeMarkerBarItem: //ruler_items.push_back (MenuElem (_("New Range"))); - ruler_items.push_back (MenuElem (_("Clear all ranges"), mem_fun(*this, &Editor::clear_ranges))); - ruler_items.push_back (MenuElem (_("Unhide ranges"), mem_fun(*this, &Editor::unhide_ranges))); + ruler_items.push_back (MenuElem (_("Clear all ranges"), sigc::mem_fun(*this, &Editor::clear_ranges))); + ruler_items.push_back (MenuElem (_("Unhide ranges"), sigc::mem_fun(*this, &Editor::unhide_ranges))); ruler_items.push_back (SeparatorElem ()); break; @@ -353,18 +351,18 @@ Editor::popup_ruler_menu (nframes64_t where, ItemType t) case CdMarkerBarItem: // TODO - ruler_items.push_back (MenuElem (_("New CD track marker"), bind ( mem_fun(*this, &Editor::mouse_add_new_marker), where, true, false))); + ruler_items.push_back (MenuElem (_("New CD track marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, true, false))); break; case TempoBarItem: - ruler_items.push_back (MenuElem (_("New Tempo"), bind ( mem_fun(*this, &Editor::mouse_add_new_tempo_event), where))); + ruler_items.push_back (MenuElem (_("New Tempo"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_tempo_event), where))); ruler_items.push_back (MenuElem (_("Clear tempo"))); ruler_items.push_back (SeparatorElem ()); break; case MeterBarItem: - ruler_items.push_back (MenuElem (_("New Meter"), bind ( mem_fun(*this, &Editor::mouse_add_new_meter_event), where))); + ruler_items.push_back (MenuElem (_("New Meter"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_meter_event), where))); ruler_items.push_back (MenuElem (_("Clear meter"))); ruler_items.push_back (SeparatorElem ()); break; @@ -430,7 +428,7 @@ Editor::store_ruler_visibility () { XMLNode* node = new XMLNode(X_("RulerVisibility")); - node->add_property (X_("smpte"), ruler_timecode_action->get_active() ? "yes": "no"); + node->add_property (X_("timecode"), ruler_timecode_action->get_active() ? "yes": "no"); node->add_property (X_("bbt"), ruler_bbt_action->get_active() ? "yes": "no"); node->add_property (X_("frames"), ruler_samples_action->get_active() ? "yes": "no"); node->add_property (X_("minsec"), ruler_minsec_action->get_active() ? "yes": "no"); @@ -441,20 +439,20 @@ Editor::store_ruler_visibility () node->add_property (X_("transportmarker"), ruler_loop_punch_action->get_active() ? "yes": "no"); node->add_property (X_("cdmarker"), ruler_cd_marker_action->get_active() ? "yes": "no"); - session->add_extra_xml (*node); - session->set_dirty (); + _session->add_extra_xml (*node); + _session->set_dirty (); } void Editor::restore_ruler_visibility () { XMLProperty* prop; - XMLNode * node = session->extra_xml (X_("RulerVisibility")); + XMLNode * node = _session->extra_xml (X_("RulerVisibility")); no_ruler_shown_update = true; if (node) { - if ((prop = node->property ("smpte")) != 0) { + if ((prop = node->property ("timecode")) != 0) { if (string_is_affirmative (prop->value())) { ruler_timecode_action->set_active (true); } else { @@ -527,11 +525,11 @@ Editor::restore_ruler_visibility () } } else { - // this session doesn't yet know about the cdmarker ruler + // this _session doesn't yet know about the cdmarker ruler // as a benefit to the user who doesn't know the feature exists, show the ruler if // any cd marks exist ruler_cd_marker_action->set_active (false); - const Locations::LocationList & locs = session->locations()->list(); + const Locations::LocationList & locs = _session->locations()->list(); for (Locations::LocationList::const_iterator i = locs.begin(); i != locs.end(); ++i) { if ((*i)->is_cd_marker()) { ruler_cd_marker_action->set_active (true); @@ -568,11 +566,11 @@ Editor::update_ruler_visibility () if (ruler_timecode_action->get_active()) { visible_rulers++; - smpte_label.show (); - smpte_ruler->show (); + timecode_label.show (); + timecode_ruler->show (); } else { - smpte_label.hide (); - smpte_ruler->hide (); + timecode_label.hide (); + timecode_ruler->hide (); } if (ruler_samples_action->get_active()) { @@ -768,31 +766,31 @@ Editor::update_ruler_visibility () } void -Editor::update_just_smpte () +Editor::update_just_timecode () { - ENSURE_GUI_THREAD(mem_fun(*this, &Editor::update_just_smpte)); + ENSURE_GUI_THREAD (*this, &Editor::update_just_timecode) - if (session == 0) { + if (_session == 0) { return; } nframes64_t rightmost_frame = leftmost_frame + current_page_frames(); if (ruler_timecode_action->get_active()) { - gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_smpte_ruler), leftmost_frame, rightmost_frame, - leftmost_frame, session->current_end_frame()); + gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_timecode_ruler), leftmost_frame, rightmost_frame, + leftmost_frame, _session->current_end_frame()); } } void Editor::compute_fixed_ruler_scale () { - if (session == 0) { + if (_session == 0) { return; } if (ruler_timecode_action->get_active()) { - set_smpte_ruler_scale (leftmost_frame, leftmost_frame + current_page_frames() ); + set_timecode_ruler_scale (leftmost_frame, leftmost_frame + current_page_frames() ); } if (ruler_minsec_action->get_active()) { @@ -805,11 +803,11 @@ Editor::update_fixed_rulers () { nframes64_t rightmost_frame; - if (session == 0) { + if (_session == 0) { return; } - ruler_metrics[ruler_metric_smpte].units_per_pixel = frames_per_unit; + ruler_metrics[ruler_metric_timecode].units_per_pixel = frames_per_unit; ruler_metrics[ruler_metric_frames].units_per_pixel = frames_per_unit; ruler_metrics[ruler_metric_minsec].units_per_pixel = frames_per_unit; @@ -820,25 +818,25 @@ Editor::update_fixed_rulers () */ if (ruler_timecode_action->get_active()) { - gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_smpte_ruler), leftmost_frame, rightmost_frame, - leftmost_frame, session->current_end_frame()); + gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_timecode_ruler), leftmost_frame, rightmost_frame, + leftmost_frame, _session->current_end_frame()); } if (ruler_samples_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_frames_ruler), leftmost_frame, rightmost_frame, - leftmost_frame, session->current_end_frame()); + leftmost_frame, _session->current_end_frame()); } if (ruler_minsec_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_minsec_ruler), leftmost_frame, rightmost_frame, - leftmost_frame, session->current_end_frame()); + leftmost_frame, _session->current_end_frame()); } } void Editor::update_tempo_based_rulers () { - if (session == 0) { + if (_session == 0) { return; } @@ -846,16 +844,16 @@ Editor::update_tempo_based_rulers () if (ruler_bbt_action->get_active()) { gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_bbt_ruler), leftmost_frame, leftmost_frame+current_page_frames(), - leftmost_frame, session->current_end_frame()); + leftmost_frame, _session->current_end_frame()); } } /* Mark generation */ gint -Editor::_metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) +Editor::_metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars) { - return ruler_editor->metric_get_smpte (marks, lower, upper, maxchars); + return ruler_editor->metric_get_timecode (marks, lower, upper, maxchars); } gint @@ -877,17 +875,17 @@ Editor::_metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble u } void -Editor::set_smpte_ruler_scale (gdouble lower, gdouble upper) +Editor::set_timecode_ruler_scale (gdouble lower, gdouble upper) { nframes64_t range; nframes64_t spacer; nframes64_t fr; - if (session == 0) { + if (_session == 0) { return; } - fr = session->frame_rate(); + fr = _session->frame_rate(); if (lower > (spacer = (nframes64_t)(128 * Editor::get_current_zoom ()))) { lower = lower - spacer; @@ -897,95 +895,95 @@ Editor::set_smpte_ruler_scale (gdouble lower, gdouble upper) upper = upper + spacer; range = (nframes64_t) floor (upper - lower); - if (range < (2 * session->frames_per_smpte_frame())) { /* 0 - 2 frames */ - smpte_ruler_scale = smpte_show_bits; - smpte_mark_modulo = 20; - smpte_nmarks = 2 + (2 * session->config.get_subframes_per_frame()); + if (range < (2 * _session->frames_per_timecode_frame())) { /* 0 - 2 frames */ + timecode_ruler_scale = timecode_show_bits; + timecode_mark_modulo = 20; + timecode_nmarks = 2 + (2 * _session->config.get_subframes_per_frame()); } else if (range <= (fr / 4)) { /* 2 frames - 0.250 second */ - smpte_ruler_scale = smpte_show_frames; - smpte_mark_modulo = 1; - smpte_nmarks = 2 + (range / (nframes64_t)session->frames_per_smpte_frame()); + timecode_ruler_scale = timecode_show_frames; + timecode_mark_modulo = 1; + timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame()); } else if (range <= (fr / 2)) { /* 0.25-0.5 second */ - smpte_ruler_scale = smpte_show_frames; - smpte_mark_modulo = 2; - smpte_nmarks = 2 + (range / (nframes64_t)session->frames_per_smpte_frame()); + timecode_ruler_scale = timecode_show_frames; + timecode_mark_modulo = 2; + timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame()); } else if (range <= fr) { /* 0.5-1 second */ - smpte_ruler_scale = smpte_show_frames; - smpte_mark_modulo = 5; - smpte_nmarks = 2 + (range / (nframes64_t)session->frames_per_smpte_frame()); + timecode_ruler_scale = timecode_show_frames; + timecode_mark_modulo = 5; + timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame()); } else if (range <= 2 * fr) { /* 1-2 seconds */ - smpte_ruler_scale = smpte_show_frames; - smpte_mark_modulo = 10; - smpte_nmarks = 2 + (range / (nframes64_t)session->frames_per_smpte_frame()); + timecode_ruler_scale = timecode_show_frames; + timecode_mark_modulo = 10; + timecode_nmarks = 2 + (range / (nframes64_t)_session->frames_per_timecode_frame()); } else if (range <= 8 * fr) { /* 2-8 seconds */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 1; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 1; + timecode_nmarks = 2 + (range / fr); } else if (range <= 16 * fr) { /* 8-16 seconds */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 2; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 2; + timecode_nmarks = 2 + (range / fr); } else if (range <= 30 * fr) { /* 16-30 seconds */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 5; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 5; + timecode_nmarks = 2 + (range / fr); } else if (range <= 60 * fr) { /* 30-60 seconds */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 5; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 5; + timecode_nmarks = 2 + (range / fr); } else if (range <= 2 * 60 * fr) { /* 1-2 minutes */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 15; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 15; + timecode_nmarks = 2 + (range / fr); } else if (range <= 4 * 60 * fr) { /* 2-4 minutes */ - smpte_ruler_scale = smpte_show_seconds; - smpte_mark_modulo = 30; - smpte_nmarks = 2 + (range / fr); + timecode_ruler_scale = timecode_show_seconds; + timecode_mark_modulo = 30; + timecode_nmarks = 2 + (range / fr); } else if (range <= 10 * 60 * fr) { /* 4-10 minutes */ - smpte_ruler_scale = smpte_show_minutes; - smpte_mark_modulo = 2; - smpte_nmarks = 2 + 10; + timecode_ruler_scale = timecode_show_minutes; + timecode_mark_modulo = 2; + timecode_nmarks = 2 + 10; } else if (range <= 30 * 60 * fr) { /* 10-30 minutes */ - smpte_ruler_scale = smpte_show_minutes; - smpte_mark_modulo = 5; - smpte_nmarks = 2 + 30; + timecode_ruler_scale = timecode_show_minutes; + timecode_mark_modulo = 5; + timecode_nmarks = 2 + 30; } else if (range <= 60 * 60 * fr) { /* 30 minutes - 1hr */ - smpte_ruler_scale = smpte_show_minutes; - smpte_mark_modulo = 10; - smpte_nmarks = 2 + 60; + timecode_ruler_scale = timecode_show_minutes; + timecode_mark_modulo = 10; + timecode_nmarks = 2 + 60; } else if (range <= 4 * 60 * 60 * fr) { /* 1 - 4 hrs*/ - smpte_ruler_scale = smpte_show_minutes; - smpte_mark_modulo = 30; - smpte_nmarks = 2 + (60 * 4); + timecode_ruler_scale = timecode_show_minutes; + timecode_mark_modulo = 30; + timecode_nmarks = 2 + (60 * 4); } else if (range <= 8 * 60 * 60 * fr) { /* 4 - 8 hrs*/ - smpte_ruler_scale = smpte_show_hours; - smpte_mark_modulo = 1; - smpte_nmarks = 2 + 8; + timecode_ruler_scale = timecode_show_hours; + timecode_mark_modulo = 1; + timecode_nmarks = 2 + 8; } else if (range <= 16 * 60 * 60 * fr) { /* 16-24 hrs*/ - smpte_ruler_scale = smpte_show_hours; - smpte_mark_modulo = 1; - smpte_nmarks = 2 + 24; + timecode_ruler_scale = timecode_show_hours; + timecode_mark_modulo = 1; + timecode_nmarks = 2 + 24; } else { /* not possible if nframes64_t is a 32 bit quantity */ - smpte_ruler_scale = smpte_show_hours; - smpte_mark_modulo = 4; - smpte_nmarks = 2 + 24; + timecode_ruler_scale = timecode_show_hours; + timecode_mark_modulo = 4; + timecode_nmarks = 2 + 24; } } gint -Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) +Editor::metric_get_timecode (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { nframes_t pos; nframes64_t spacer; - SMPTE::Time smpte; + Timecode::Time timecode; gchar buf[16]; gint n; - if (session == 0) { + if (_session == 0) { return 0; } @@ -997,22 +995,22 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u pos = (nframes_t) floor (lower); - *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * smpte_nmarks); - switch (smpte_ruler_scale) { - case smpte_show_bits: + *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * timecode_nmarks); + switch (timecode_ruler_scale) { + case timecode_show_bits: - // Find smpte time of this sample (pos) with subframe accuracy - session->sample_to_smpte(pos, smpte, true /* use_offset */, true /* use_subframes */ ); + // Find timecode time of this sample (pos) with subframe accuracy + _session->sample_to_timecode(pos, timecode, true /* use_offset */, true /* use_subframes */ ); - for (n = 0; n < smpte_nmarks; n++) { - session->smpte_to_sample(smpte, pos, true /* use_offset */, true /* use_subframes */ ); - if ((smpte.subframes % smpte_mark_modulo) == 0) { - if (smpte.subframes == 0) { + for (n = 0; n < timecode_nmarks; n++) { + _session->timecode_to_sample(timecode, pos, true /* use_offset */, true /* use_subframes */ ); + if ((timecode.subframes % timecode_mark_modulo) == 0) { + if (timecode.subframes == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; - snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", smpte.negative ? "-" : "", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); + snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { (*marks)[n].style = GtkCustomRulerMarkMinor; - snprintf (buf, sizeof(buf), ".%02u", smpte.subframes); + snprintf (buf, sizeof(buf), ".%02u", timecode.subframes); } } else { snprintf (buf, sizeof(buf)," "); @@ -1023,26 +1021,26 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u (*marks)[n].position = pos; // Increment subframes by one - SMPTE::increment_subframes( smpte, session->config.get_subframes_per_frame() ); + Timecode::increment_subframes( timecode, _session->config.get_subframes_per_frame() ); } break; - case smpte_show_seconds: - // Find smpte time of this sample (pos) - session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ ); + case timecode_show_seconds: + // Find timecode time of this sample (pos) + _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ ); // Go to next whole second down - SMPTE::seconds_floor( smpte ); + Timecode::seconds_floor( timecode ); - for (n = 0; n < smpte_nmarks; n++) { - session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ ); - if ((smpte.seconds % smpte_mark_modulo) == 0) { - if (smpte.seconds == 0) { + for (n = 0; n < timecode_nmarks; n++) { + _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ ); + if ((timecode.seconds % timecode_mark_modulo) == 0) { + if (timecode.seconds == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; (*marks)[n].position = pos; } else { (*marks)[n].style = GtkCustomRulerMarkMinor; (*marks)[n].position = pos; } - snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", smpte.negative ? "-" : "", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); + snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { snprintf (buf, sizeof(buf)," "); (*marks)[n].style = GtkCustomRulerMarkMicro; @@ -1050,24 +1048,24 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u } (*marks)[n].label = g_strdup (buf); - SMPTE::increment_seconds( smpte, session->config.get_subframes_per_frame() ); + Timecode::increment_seconds( timecode, _session->config.get_subframes_per_frame() ); } break; - case smpte_show_minutes: - // Find smpte time of this sample (pos) - session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ ); + case timecode_show_minutes: + // Find timecode time of this sample (pos) + _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ ); // Go to next whole minute down - SMPTE::minutes_floor( smpte ); + Timecode::minutes_floor( timecode ); - for (n = 0; n < smpte_nmarks; n++) { - session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ ); - if ((smpte.minutes % smpte_mark_modulo) == 0) { - if (smpte.minutes == 0) { + for (n = 0; n < timecode_nmarks; n++) { + _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ ); + if ((timecode.minutes % timecode_mark_modulo) == 0) { + if (timecode.minutes == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; } else { (*marks)[n].style = GtkCustomRulerMarkMinor; } - snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", smpte.negative ? "-" : "", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); + snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { snprintf (buf, sizeof(buf)," "); (*marks)[n].style = GtkCustomRulerMarkMicro; @@ -1075,21 +1073,21 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u } (*marks)[n].label = g_strdup (buf); (*marks)[n].position = pos; - SMPTE::increment_minutes( smpte, session->config.get_subframes_per_frame() ); + Timecode::increment_minutes( timecode, _session->config.get_subframes_per_frame() ); } break; - case smpte_show_hours: - // Find smpte time of this sample (pos) - session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ ); + case timecode_show_hours: + // Find timecode time of this sample (pos) + _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ ); // Go to next whole hour down - SMPTE::hours_floor( smpte ); + Timecode::hours_floor( timecode ); - for (n = 0; n < smpte_nmarks; n++) { - session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ ); - if ((smpte.hours % smpte_mark_modulo) == 0) { + for (n = 0; n < timecode_nmarks; n++) { + _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ ); + if ((timecode.hours % timecode_mark_modulo) == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; - snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", smpte.negative ? "-" : "", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); + snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { snprintf (buf, sizeof(buf)," "); (*marks)[n].style = GtkCustomRulerMarkMicro; @@ -1098,25 +1096,25 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u (*marks)[n].label = g_strdup (buf); (*marks)[n].position = pos; - SMPTE::increment_hours( smpte, session->config.get_subframes_per_frame() ); + Timecode::increment_hours( timecode, _session->config.get_subframes_per_frame() ); } break; - case smpte_show_frames: - // Find smpte time of this sample (pos) - session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ ); + case timecode_show_frames: + // Find timecode time of this sample (pos) + _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ ); // Go to next whole frame down - SMPTE::frames_floor( smpte ); + Timecode::frames_floor( timecode ); - for (n = 0; n < smpte_nmarks; n++) { - session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ ); - if ((smpte.frames % smpte_mark_modulo) == 0) { - if (smpte.frames == 0) { + for (n = 0; n < timecode_nmarks; n++) { + _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ ); + if ((timecode.frames % timecode_mark_modulo) == 0) { + if (timecode.frames == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; } else { (*marks)[n].style = GtkCustomRulerMarkMinor; } (*marks)[n].position = pos; - snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", smpte.negative ? "-" : "", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames); + snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames); } else { snprintf (buf, sizeof(buf)," "); (*marks)[n].style = GtkCustomRulerMarkMicro; @@ -1124,27 +1122,27 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble /*u } (*marks)[n].label = g_strdup (buf); - SMPTE::increment( smpte, session->config.get_subframes_per_frame() ); + Timecode::increment( timecode, _session->config.get_subframes_per_frame() ); } break; } - return smpte_nmarks; + return timecode_nmarks; } void Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper) { - if (session == 0) { + if (_session == 0) { return; } TempoMap::BBTPointList::iterator i; BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler - session->bbt_time((jack_nframes_t) lower, lower_beat); - session->bbt_time((jack_nframes_t) upper, upper_beat); + _session->bbt_time((jack_nframes_t) lower, lower_beat); + _session->bbt_time((jack_nframes_t) upper, upper_beat); uint32_t beats = 0; bbt_accent_modulo = 1; @@ -1154,22 +1152,57 @@ Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper) bbt_ruler_scale = bbt_over; - switch (snap_type) { - case SnapToAThirdBeat: + switch (_snap_type) { + case SnapToBeatDiv2: + bbt_beat_subdivision = 2; + break; + case SnapToBeatDiv3: bbt_beat_subdivision = 3; break; - case SnapToAQuarterBeat: + case SnapToBeatDiv4: bbt_beat_subdivision = 4; break; - case SnapToAEighthBeat: + case SnapToBeatDiv5: + bbt_beat_subdivision = 5; + bbt_accent_modulo = 2; // XXX YIKES + break; + case SnapToBeatDiv6: + bbt_beat_subdivision = 6; + bbt_accent_modulo = 2; // XXX YIKES + break; + case SnapToBeatDiv7: + bbt_beat_subdivision = 7; + bbt_accent_modulo = 2; // XXX YIKES + break; + case SnapToBeatDiv8: bbt_beat_subdivision = 8; bbt_accent_modulo = 2; break; - case SnapToASixteenthBeat: + case SnapToBeatDiv10: + bbt_beat_subdivision = 10; + bbt_accent_modulo = 2; // XXX YIKES + break; + case SnapToBeatDiv12: + bbt_beat_subdivision = 12; + bbt_accent_modulo = 3; + break; + case SnapToBeatDiv14: + bbt_beat_subdivision = 14; + bbt_accent_modulo = 3; // XXX YIKES! + break; + case SnapToBeatDiv16: bbt_beat_subdivision = 16; bbt_accent_modulo = 4; break; - case SnapToAThirtysecondBeat: + case SnapToBeatDiv24: + bbt_beat_subdivision = 24; + bbt_accent_modulo = 6; + break; + case SnapToBeatDiv28: + bbt_beat_subdivision = 28; + bbt_accent_modulo = 7; + break; + case SnapToBeatDiv32: bbt_beat_subdivision = 32; bbt_accent_modulo = 8; break; @@ -1222,7 +1255,7 @@ Editor::compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper) gint Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { - if (session == 0) { + if (_session == 0) { return 0; } @@ -1339,9 +1372,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = 1; } - next_beat_pos = session->tempo_map().frame_time(next_beat); + next_beat_pos = _session->tempo_map().frame_time(next_beat); - frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); + frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); frame_skip_error -= frame_skip; skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision); @@ -1431,9 +1464,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = 1; } - next_beat_pos = session->tempo_map().frame_time(next_beat); + next_beat_pos = _session->tempo_map().frame_time(next_beat); - frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); + frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); frame_skip_error -= frame_skip; skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision); @@ -1528,9 +1561,9 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = 1; } - next_beat_pos = session->tempo_map().frame_time(next_beat); + next_beat_pos = _session->tempo_map().frame_time(next_beat); - frame_skip = (nframes64_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); + frame_skip = (nframes64_t) floor (frame_skip_error = (_session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute())); frame_skip_error -= frame_skip; skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision); @@ -1702,15 +1735,15 @@ Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble up gint nmarks; gint n; - if (session == 0) { + if (_session == 0) { return 0; } mark_interval = (iupper - ilower) / 5; - if (mark_interval > session->frame_rate()) { - mark_interval -= mark_interval % session->frame_rate(); + if (mark_interval > _session->frame_rate()) { + mark_interval -= mark_interval % _session->frame_rate(); } else { - mark_interval = session->frame_rate() / (session->frame_rate() / mark_interval ) ; + mark_interval = _session->frame_rate() / (_session->frame_rate() / mark_interval ) ; } nmarks = 5; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); @@ -1763,11 +1796,11 @@ Editor::set_minsec_ruler_scale (gdouble lower, gdouble upper) nframes64_t fr; nframes64_t spacer; - if (session == 0) { + if (_session == 0) { return; } - fr = session->frame_rate(); + fr = _session->frame_rate(); /* to prevent 'flashing' */ if (lower > (spacer = (nframes64_t)(128 * Editor::get_current_zoom ()))) { @@ -1864,7 +1897,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /* gchar buf[16]; gint n; - if (session == 0) { + if (_session == 0) { return 0; } @@ -1880,7 +1913,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /* switch (minsec_ruler_scale) { case minsec_show_seconds: for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) { - sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs); + sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs); if (secs % minsec_mark_modulo == 0) { if (secs == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; @@ -1898,7 +1931,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /* break; case minsec_show_minutes: for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) { - sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs); + sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs); if (mins % minsec_mark_modulo == 0) { if (mins == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; @@ -1916,7 +1949,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /* break; case minsec_show_hours: for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) { - sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs); + sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs); if (hrs % minsec_mark_modulo == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor; snprintf (buf, sizeof(buf), "%02ld:%02ld:%02ld.%03ld", hrs, mins, secs, millisecs); @@ -1930,7 +1963,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble /* break; case minsec_show_frames: for (n = 0; n < minsec_nmarks; pos += minsec_mark_interval, ++n) { - sample_to_clock_parts (pos, session->frame_rate(), &hrs, &mins, &secs, &millisecs); + sample_to_clock_parts (pos, _session->frame_rate(), &hrs, &mins, &secs, &millisecs); if (millisecs % minsec_mark_modulo == 0) { if (secs == 0) { (*marks)[n].style = GtkCustomRulerMarkMajor;