X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_rulers.cc;h=ea5622e4c963c77404e3ea0a02c725f7a5e36c88;hb=6ee23029a338951705c589be6c61ab52099758b6;hp=418ec4f10a21041d65f57b81aa03169ddbe2c9ac;hpb=58b207b1903250921c925f0feed5ad768bbd325e;p=ardour.git diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 418ec4f10a..ea5622e4c9 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -32,7 +32,8 @@ #include "ardour/session.h" #include "ardour/tempo.h" #include "ardour/profile.h" -#include + +#include "gtkmm2ext/gtk_ui.h" #include "editor.h" #include "editing.h" @@ -178,12 +179,12 @@ Editor::ruler_scroll (GdkEventScroll* event) switch (direction) { case GDK_SCROLL_UP: - temporal_zoom_step (true); + temporal_zoom_step (false); handled = true; break; case GDK_SCROLL_DOWN: - temporal_zoom_step (false); + temporal_zoom_step (true); handled = true; break; @@ -216,15 +217,13 @@ Editor::ruler_scroll (GdkEventScroll* event) } -gint +bool Editor::ruler_button_press (GdkEventButton* ev) { if (_session == 0) { - return FALSE; + return false; } - // jlc: grab ev->window ? - //Gtk::Main::grab_add (*minsec_ruler); Widget * grab_widget = 0; if (timecode_ruler->is_realized() && ev->window == timecode_ruler->get_window()->gobj()) { @@ -254,14 +253,14 @@ Editor::ruler_button_press (GdkEventButton* ev) _dragging_playhead = true; } - return TRUE; + return true; } -gint +bool Editor::ruler_button_release (GdkEventButton* ev) { if (_session == 0) { - return FALSE; + return false; } gint x,y; @@ -288,35 +287,35 @@ Editor::ruler_button_release (GdkEventButton* ev) ruler_grabbed_widget = 0; } - return TRUE; + return true; } -gint +bool Editor::ruler_label_button_release (GdkEventButton* ev) { if (ev->button == 3) { - Gtk::Menu* m= dynamic_cast (ActionManager::get_widget (X_("/RulerMenuPopup"))); + Gtk::Menu* m = dynamic_cast (ActionManager::get_widget (X_("/RulerMenuPopup"))); if (m) { m->popup (1, ev->time); } } - return TRUE; + return true; } -gint +bool Editor::ruler_mouse_motion (GdkEventMotion* ev) { if (_session == 0) { - return FALSE; + return false; } if (_drags->active ()) { _drags->motion_handler (reinterpret_cast (ev), false); } - return TRUE; + return true; } @@ -361,13 +360,11 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t) case TempoBarItem: 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"), 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; @@ -1151,7 +1148,8 @@ Editor::compute_bbt_ruler_scale (framepos_t lower, framepos_t upper) if (_session == 0) { return; } - TempoMap::BBTPointList::iterator i; + + TempoMap::BBTPointList::const_iterator i; Timecode::BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler _session->bbt_time (lower, lower_beat); @@ -1223,23 +1221,31 @@ Editor::compute_bbt_ruler_scale (framepos_t lower, framepos_t upper) bbt_beat_subdivision = 32; bbt_accent_modulo = 8; break; + case SnapToBeatDiv64: + bbt_beat_subdivision = 64; + bbt_accent_modulo = 8; + break; + case SnapToBeatDiv128: + bbt_beat_subdivision = 128; + bbt_accent_modulo = 8; + break; default: bbt_beat_subdivision = 4; break; } - if (current_bbt_points == 0 || current_bbt_points->empty()) { + if (distance (current_bbt_points_begin, current_bbt_points_end) == 0) { return; } - i = current_bbt_points->end(); + i = current_bbt_points_end; i--; - if ((*i).beat >= (*current_bbt_points->begin()).beat) { - bbt_bars = (*i).bar - (*current_bbt_points->begin()).bar; + if ((*i).beat >= (*current_bbt_points_begin).beat) { + bbt_bars = (*i).bar - (*current_bbt_points_begin).bar; } else { - bbt_bars = (*i).bar - (*current_bbt_points->begin()).bar - 1; + bbt_bars = (*i).bar - (*current_bbt_points_begin).bar - 1; } - beats = current_bbt_points->size() - bbt_bars; + beats = distance (current_bbt_points_begin, current_bbt_points_end) - bbt_bars; /* Only show the bar helper if there aren't many bars on the screen */ if ((bbt_bars < 2) || (beats < 5)) { @@ -1276,7 +1282,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp return 0; } - TempoMap::BBTPointList::iterator i; + TempoMap::BBTPointList::const_iterator i; char buf[64]; gint n = 0; @@ -1295,14 +1301,14 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp bool i_am_accented = false; bool helper_active = false; - if (current_bbt_points == 0 || current_bbt_points->empty()) { + if (distance (current_bbt_points_begin, current_bbt_points_end) == 0) { return 0; } switch (bbt_ruler_scale) { case bbt_show_beats: - beats = current_bbt_points->size(); + beats = distance (current_bbt_points_begin, current_bbt_points_end); bbt_nmarks = beats + 2; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * bbt_nmarks); @@ -1310,18 +1316,16 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp (*marks)[0].label = g_strdup(" "); (*marks)[0].position = lower; (*marks)[0].style = GtkCustomRulerMarkMicro; + + for (n = 1, i = current_bbt_points_begin; n < bbt_nmarks && i != current_bbt_points_end; ++i) { - for (n = 1, i = current_bbt_points->begin(); n < bbt_nmarks && i != current_bbt_points->end(); ++i) { - if ((*i).type != TempoMap::Beat) { - continue; - } if ((*i).frame < lower && (bbt_bar_helper_on)) { snprintf (buf, sizeof(buf), "<%" PRIu32 "|%" PRIu32, (*i).bar, (*i).beat); (*marks)[0].label = g_strdup (buf); helper_active = true; } else { - if ((*i).beat == 1) { + if ((*i).is_bar()) { (*marks)[n].style = GtkCustomRulerMarkMajor; snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); } else if (((*i).beat % 2 == 1)) { @@ -1340,7 +1344,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_ticks: - beats = current_bbt_points->size(); + beats = distance (current_bbt_points_begin, current_bbt_points_end); bbt_nmarks = (beats + 2) * bbt_beat_subdivision; bbt_position_of_helper = lower + (30 * Editor::get_current_zoom ()); @@ -1350,17 +1354,15 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp (*marks)[0].position = lower; (*marks)[0].style = GtkCustomRulerMarkMicro; - for (n = 1, i = current_bbt_points->begin(); n < bbt_nmarks && i != current_bbt_points->end(); ++i) { - if ((*i).type != TempoMap::Beat) { - continue; - } + for (n = 1, i = current_bbt_points_begin; n < bbt_nmarks && i != current_bbt_points_end; ++i) { + if ((*i).frame < lower && (bbt_bar_helper_on)) { snprintf (buf, sizeof(buf), "<%" PRIu32 "|%" PRIu32, (*i).bar, (*i).beat); (*marks)[0].label = g_strdup (buf); helper_active = true; } else { - if ((*i).beat == 1) { + if ((*i).is_bar()) { (*marks)[n].style = GtkCustomRulerMarkMajor; snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); } else { @@ -1382,7 +1384,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.bars = (*i).bar; next_beat.ticks = 0; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; @@ -1432,7 +1434,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_ticks_detail: - beats = current_bbt_points->size(); + beats = distance (current_bbt_points_begin, current_bbt_points_end); bbt_nmarks = (beats + 2) * bbt_beat_subdivision; bbt_position_of_helper = lower + (30 * Editor::get_current_zoom ()); @@ -1442,17 +1444,15 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp (*marks)[0].position = lower; (*marks)[0].style = GtkCustomRulerMarkMicro; - for (n = 1, i = current_bbt_points->begin(); n < bbt_nmarks && i != current_bbt_points->end(); ++i) { - if ((*i).type != TempoMap::Beat) { - continue; - } + for (n = 1, i = current_bbt_points_begin; n < bbt_nmarks && i != current_bbt_points_end; ++i) { + if ((*i).frame < lower && (bbt_bar_helper_on)) { snprintf (buf, sizeof(buf), "<%" PRIu32 "|%" PRIu32, (*i).bar, (*i).beat); (*marks)[0].label = g_strdup (buf); helper_active = true; } else { - if ((*i).beat == 1) { + if ((*i).is_bar()) { (*marks)[n].style = GtkCustomRulerMarkMajor; snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); } else { @@ -1474,7 +1474,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = (*i).beat; next_beat.bars = (*i).bar; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; @@ -1529,7 +1529,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_ticks_super_detail: - beats = current_bbt_points->size(); + beats = distance (current_bbt_points_begin, current_bbt_points_end); bbt_nmarks = (beats + 2) * bbt_beat_subdivision; bbt_position_of_helper = lower + (30 * Editor::get_current_zoom ()); @@ -1539,17 +1539,15 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp (*marks)[0].position = lower; (*marks)[0].style = GtkCustomRulerMarkMicro; - for (n = 1, i = current_bbt_points->begin(); n < bbt_nmarks && i != current_bbt_points->end(); ++i) { - if ((*i).type != TempoMap::Beat) { - continue; - } + for (n = 1, i = current_bbt_points_begin; n < bbt_nmarks && i != current_bbt_points_end; ++i) { + if ((*i).frame < lower && (bbt_bar_helper_on)) { snprintf (buf, sizeof(buf), "<%" PRIu32 "|%" PRIu32, (*i).bar, (*i).beat); (*marks)[0].label = g_strdup (buf); helper_active = true; } else { - if ((*i).beat == 1) { + if ((*i).is_bar()) { (*marks)[n].style = GtkCustomRulerMarkMajor; snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); } else { @@ -1571,7 +1569,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = (*i).beat; next_beat.bars = (*i).bar; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; @@ -1638,8 +1636,8 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_64: bbt_nmarks = (gint) (bbt_bars / 64) + 1; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * bbt_nmarks); - for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < bbt_nmarks; i++) { - if ((*i).type == TempoMap::Bar) { + for (n = 0, i = current_bbt_points_begin; i != current_bbt_points_end && n < bbt_nmarks; i++) { + if ((*i).is_bar()) { if ((*i).bar % 64 == 1) { if ((*i).bar % 256 == 1) { snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); @@ -1663,8 +1661,8 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_16: bbt_nmarks = (bbt_bars / 16) + 1; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * bbt_nmarks); - for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < bbt_nmarks; i++) { - if ((*i).type == TempoMap::Bar) { + for (n = 0, i = current_bbt_points_begin; i != current_bbt_points_end && n < bbt_nmarks; i++) { + if ((*i).is_bar()) { if ((*i).bar % 16 == 1) { if ((*i).bar % 64 == 1) { snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); @@ -1688,8 +1686,8 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp case bbt_show_4: bbt_nmarks = (bbt_bars / 4) + 1; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * bbt_nmarks); - for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < bbt_nmarks; ++i) { - if ((*i).type == TempoMap::Bar) { + for (n = 0, i = current_bbt_points_begin; i != current_bbt_points_end && n < bbt_nmarks; ++i) { + if ((*i).is_bar()) { if ((*i).bar % 4 == 1) { if ((*i).bar % 16 == 1) { snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); @@ -1714,8 +1712,8 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp // default: bbt_nmarks = bbt_bars + 2; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * bbt_nmarks ); - for (n = 0, i = current_bbt_points->begin(); i != current_bbt_points->end() && n < bbt_nmarks; i++) { - if ((*i).type == TempoMap::Bar) { + for (n = 0, i = current_bbt_points_begin; i != current_bbt_points_end && n < bbt_nmarks; i++) { + if ((*i).is_bar()) { if ((*i).bar % 4 == 1) { snprintf (buf, sizeof(buf), "%" PRIu32, (*i).bar); (*marks)[n].style = GtkCustomRulerMarkMajor; @@ -1748,7 +1746,7 @@ Editor::set_samples_ruler_scale (framepos_t lower, framepos_t upper) } gint -Editor::metric_get_samples (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint /*maxchars*/) +Editor::metric_get_samples (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upper*/, gint /*maxchars*/) { framepos_t pos; framepos_t const ilower = (framepos_t) floor (lower);