summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_rulers.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2018-02-09 09:59:39 -0600
committerBen Loftis <ben@harrisonconsoles.com>2018-02-09 09:59:39 -0600
commitdc61256466cb02daa4c6de0dbaebf4b9ed1325d6 (patch)
tree13e1527c49174afbfdc85f4f49aa04b6a63eeb42 /gtk2_ardour/editor_rulers.cc
parentd6eb1c826f364a8dc2db1786bc4bb7eb11f92be6 (diff)
new_grid: Rewrite of Snap and Grid. (squashed commit)
Separate Snap from Grid. Lots of naming changes. Multiple simultaneous snap options allowed. Grid is one of the possible Snap options. Grid uses the same data as the rulers. Replace complicated tempo_lines with simple grid_lines. The Grid is zoom-scale-sensitive along with the rulers. If you are zoomed out, grid becomes coarser.
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) {