summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_rulers.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_rulers.cc')
-rw-r--r--gtk2_ardour/editor_rulers.cc80
1 files changed, 48 insertions, 32 deletions
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 661184b9ad..c9e8bbf443 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -585,7 +585,7 @@ Editor::update_ruler_visibility ()
compute_fixed_ruler_scale ();
update_fixed_rulers();
- redisplay_tempo (false);
+ redisplay_grid (false);
/* Changing ruler visibility means that any lines on markers might need updating */
for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
@@ -989,73 +989,72 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper)
bbt_ruler_scale = bbt_show_many;
- switch (_snap_type) {
- case SnapToBeatDiv2:
+ switch (_grid_type) {
+ case GridTypeBeatDiv2:
bbt_beat_subdivision = 2;
break;
- case SnapToBeatDiv3:
+ case GridTypeBeatDiv3:
bbt_beat_subdivision = 3;
break;
- case SnapToBeatDiv4:
+ case GridTypeBeatDiv4:
bbt_beat_subdivision = 4;
break;
- case SnapToBeatDiv5:
+ case GridTypeBeatDiv5:
bbt_beat_subdivision = 5;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv6:
+ case GridTypeBeatDiv6:
bbt_beat_subdivision = 6;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv7:
+ case GridTypeBeatDiv7:
bbt_beat_subdivision = 7;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv8:
+ case GridTypeBeatDiv8:
bbt_beat_subdivision = 8;
bbt_accent_modulo = 2;
break;
- case SnapToBeatDiv10:
+ case GridTypeBeatDiv10:
bbt_beat_subdivision = 10;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv12:
+ case GridTypeBeatDiv12:
bbt_beat_subdivision = 12;
bbt_accent_modulo = 3;
break;
- case SnapToBeatDiv14:
+ case GridTypeBeatDiv14:
bbt_beat_subdivision = 14;
bbt_accent_modulo = 3; // XXX YIKES!
break;
- case SnapToBeatDiv16:
+ case GridTypeBeatDiv16:
bbt_beat_subdivision = 16;
bbt_accent_modulo = 4;
break;
- case SnapToBeatDiv20:
+ case GridTypeBeatDiv20:
bbt_beat_subdivision = 20;
bbt_accent_modulo = 5;
break;
- case SnapToBeatDiv24:
+ case GridTypeBeatDiv24:
bbt_beat_subdivision = 24;
bbt_accent_modulo = 6;
break;
- case SnapToBeatDiv28:
+ case GridTypeBeatDiv28:
bbt_beat_subdivision = 28;
bbt_accent_modulo = 7;
break;
- case SnapToBeatDiv32:
+ case GridTypeBeatDiv32:
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;
+ case GridTypeBar:
+ case GridTypeBeat:
+ bbt_beat_subdivision = 4;
break;
- default:
+ case GridTypeNone:
+ case GridTypeSmpte:
+ case GridTypeMinSec:
+ case GridTypeSamples:
bbt_beat_subdivision = 4;
break;
}
@@ -1075,6 +1074,21 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper)
bbt_bar_helper_on = true;
}
+ //set upper limits on the beat_density based on the user's grid selection
+ if ( _grid_type == GridTypeBar ) {
+ beat_density = fmax (beat_density, 16.01);
+ } else if ( _grid_type == GridTypeBeat ) {
+ beat_density = fmax (beat_density, 4.001);
+ } else if ( _grid_type == GridTypeBeatDiv4) {
+ beat_density = fmax (beat_density, 2.001);
+ } else if ( _grid_type == GridTypeBeatDiv8) {
+ beat_density = fmax (beat_density, 1.001);
+ } else if ( _grid_type == GridTypeBeatDiv16) {
+ beat_density = fmax (beat_density, 0.2501);
+ } else if ( _grid_type == GridTypeBeatDiv32) {
+ beat_density = fmax (beat_density, 0.12501);
+ }
+
if (beat_density > 8192) {
bbt_ruler_scale = bbt_show_many;
} else if (beat_density > 1024) {
@@ -1084,16 +1098,14 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper)
} else if (beat_density > 128) {
bbt_ruler_scale = bbt_show_4;
} else if (beat_density > 16) {
- bbt_ruler_scale = bbt_show_1;
- } else if (beat_density > 2) {
+ bbt_ruler_scale = bbt_show_1;
+ } else if (beat_density > 4) {
bbt_ruler_scale = bbt_show_beats;
- } else if (beat_density > 0.5) {
+ } else if (beat_density > 1) {
bbt_ruler_scale = bbt_show_ticks;
- } else {
+ } else if (beat_density > 0.25) {
bbt_ruler_scale = bbt_show_ticks_detail;
- }
-
- if ((bbt_ruler_scale == bbt_show_ticks_detail) && beats < 3) {
+ } else {
bbt_ruler_scale = bbt_show_ticks_super_detail;
}
}
@@ -1713,6 +1725,10 @@ Editor::metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>& marks, gdoubl
lower = 0;
}
+ if ( minsec_mark_interval== 0) { //we got here too early; divide-by-zero imminent
+ return;
+ }
+
pos = (((1000 * (samplepos_t) floor(lower)) + (minsec_mark_interval/2))/minsec_mark_interval) * minsec_mark_interval;
switch (minsec_ruler_scale) {