diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 34a54cd843..569ee7630e 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2881,6 +2881,12 @@ Editor::snap_to_bbt (MusicSample presnap, RoundMode direction, SnapPref gpref) case bbt_show_thirtyseconds: ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, 4 * divisor, direction); break; + case bbt_show_sixtyfourths: + ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, 8 * divisor, direction); + break; + case bbt_show_onetwentyeighths: + ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, 16 * divisor, direction); + break; } } else { ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, get_grid_beat_divisions(_grid_type), direction); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 2cb0d1e0ce..f1b1653553 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -972,7 +972,9 @@ private: bbt_show_quarters, bbt_show_eighths, bbt_show_sixteenths, - bbt_show_thirtyseconds + bbt_show_thirtyseconds, + bbt_show_sixtyfourths, + bbt_show_onetwentyeighths }; BBTRulerScale bbt_ruler_scale; diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 5a2775ad55..89064b720e 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -1086,7 +1086,7 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper) if (beat_density > 2048) { bbt_ruler_scale = bbt_show_many; - } else if (beat_density > 512) { + } else if (beat_density > 1024) { bbt_ruler_scale = bbt_show_64; } else if (beat_density > 256) { bbt_ruler_scale = bbt_show_16; @@ -1100,8 +1100,12 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper) bbt_ruler_scale = bbt_show_eighths; } else if (beat_density > 1) { bbt_ruler_scale = bbt_show_sixteenths; - } else { + } else if (beat_density > 0.5) { bbt_ruler_scale = bbt_show_thirtyseconds; + } else if (beat_density > 0.25) { + bbt_ruler_scale = bbt_show_sixtyfourths; + } else { + bbt_ruler_scale = bbt_show_onetwentyeighths; } /* Now that we know how fine a grid (Ruler) is allowable on this screen, limit it to the coarseness selected by the user */ @@ -1117,7 +1121,11 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper) suggested_scale = std::min(suggested_scale, (int) bbt_show_sixteenths); } else if (_grid_type == GridTypeBeatDiv8) { suggested_scale = std::min(suggested_scale, (int) bbt_show_thirtyseconds); - } //ToDo: implement Rulers for 64ths and 128ths? + } else if (_grid_type == GridTypeBeatDiv16) { + suggested_scale = std::min(suggested_scale, (int) bbt_show_sixtyfourths); + } else if (_grid_type == GridTypeBeatDiv32) { + suggested_scale = std::min(suggested_scale, (int) bbt_show_onetwentyeighths); + } bbt_ruler_scale = (Editor::BBTRulerScale) suggested_scale; } @@ -1270,6 +1278,9 @@ Editor::metric_get_bbt (std::vector& marks, gdouble l break; case bbt_show_sixteenths: + case bbt_show_thirtyseconds: + case bbt_show_sixtyfourths: + case bbt_show_onetwentyeighths: beats = distance (grid.begin(), grid.end()); bbt_nmarks = (beats + 2) * bbt_beat_subdivision;