switch (t) {
case MarkerBarItem:
- ruler_items.push_back (MenuElem (_("New location marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, false)));
+ ruler_items.push_back (MenuElem (_("New location marker"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, 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)));
break;
case CdMarkerBarItem:
// TODO
- ruler_items.push_back (MenuElem (_("New CD track marker"), sigc::bind ( sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, true)));
+ ruler_items.push_back (MenuElem (_("New CD track marker"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, true)));
break;
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 (_("New Tempo"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_tempo_event), where)));
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 (_("New Meter"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_meter_event), where)));
break;
case VideoBarItem:
*/
//ruler_items.push_back (MenuElem (_("Timeline height"))); // heading
//static_cast<MenuItem*>(&ruler_items.back())->set_sensitive(false);
- ruler_items.push_back (CheckMenuElem (_("Large"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 6)));
+ ruler_items.push_back (CheckMenuElem (_("Large"), sigc::bind (sigc::mem_fun(*this, &Editor::set_video_timeline_height), 6)));
if (videotl_bar_height == 6) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
- ruler_items.push_back (CheckMenuElem (_("Normal"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 4)));
+ ruler_items.push_back (CheckMenuElem (_("Normal"), sigc::bind (sigc::mem_fun(*this, &Editor::set_video_timeline_height), 4)));
if (videotl_bar_height == 4) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
- ruler_items.push_back (CheckMenuElem (_("Small"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 3)));
+ ruler_items.push_back (CheckMenuElem (_("Small"), sigc::bind (sigc::mem_fun(*this, &Editor::set_video_timeline_height), 3)));
if (videotl_bar_height == 3) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
ruler_items.push_back (SeparatorElem ());
node->set_property (X_("videotl"), ruler_video_action->get_active());
_session->add_extra_xml (*node);
- _session->set_dirty ();
}
void
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) {
switch (timecode_ruler_scale) {
case timecode_show_bits:
// Find timecode time of this sample (pos) with subframe accuracy
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, true /* use_subframes */ );
+ _session->sample_to_timecode(pos, timecode, true /* use_offset */, true /* use_subframes */);
for (n = 0; n < timecode_nmarks; n++) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, true /* use_subframes */ );
+ _session->timecode_to_sample(timecode, pos, true /* use_offset */, true /* use_subframes */);
if ((timecode.subframes % timecode_mark_modulo) == 0) {
if (timecode.subframes == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
mark.position = pos;
marks.push_back (mark);
// Increment subframes by one
- Timecode::increment_subframes( timecode, _session->config.get_subframes_per_frame() );
+ Timecode::increment_subframes (timecode, _session->config.get_subframes_per_frame());
}
break;
case timecode_show_samples:
// Find timecode time of this sample (pos)
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode (pos, timecode, true /* use_offset */, false /* use_subframes */);
// Go to next whole sample down
- Timecode::frames_floot( timecode );
+ Timecode::frames_floot (timecode);
for (n = 0; n < timecode_nmarks; n++) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample (timecode, pos, true /* use_offset */, false /* use_subframes */);
if ((timecode.frames % timecode_mark_modulo) == 0) {
if (timecode.frames == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
}
mark.label = buf;
marks.push_back (mark);
- Timecode::increment( timecode, _session->config.get_subframes_per_frame() );
+ Timecode::increment (timecode, _session->config.get_subframes_per_frame());
}
break;
case timecode_show_seconds:
// Find timecode time of this sample (pos)
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode (pos, timecode, true /* use_offset */, false /* use_subframes */);
// Go to next whole second down
- Timecode::seconds_floor( timecode );
+ Timecode::seconds_floor (timecode);
for (n = 0; n < timecode_nmarks; n++) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample (timecode, pos, true /* use_offset */, false /* use_subframes */);
if ((timecode.seconds % timecode_mark_modulo) == 0) {
if (timecode.seconds == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
}
mark.label = buf;
marks.push_back (mark);
- Timecode::increment_seconds( timecode, _session->config.get_subframes_per_frame() );
+ Timecode::increment_seconds (timecode, _session->config.get_subframes_per_frame());
}
break;
case timecode_show_minutes:
//Find timecode time of this sample (pos)
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode (pos, timecode, true /* use_offset */, false /* use_subframes */);
// Go to next whole minute down
- Timecode::minutes_floor( timecode );
+ Timecode::minutes_floor (timecode);
for (n = 0; n < timecode_nmarks; n++) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample (timecode, pos, true /* use_offset */, false /* use_subframes */);
if ((timecode.minutes % timecode_mark_modulo) == 0) {
if (timecode.minutes == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
mark.label = buf;
mark.position = pos;
marks.push_back (mark);
- Timecode::increment_minutes( timecode, _session->config.get_subframes_per_frame() );
+ Timecode::increment_minutes (timecode, _session->config.get_subframes_per_frame());
}
break;
case timecode_show_hours:
// Find timecode time of this sample (pos)
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode (pos, timecode, true /* use_offset */, false /* use_subframes */);
// Go to next whole hour down
- Timecode::hours_floor( timecode );
+ Timecode::hours_floor (timecode);
for (n = 0; n < timecode_nmarks; n++) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ _session->timecode_to_sample (timecode, pos, true /* use_offset */, false /* use_subframes */);
if ((timecode.hours % timecode_mark_modulo) == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
mark.label = buf;
mark.position = pos;
marks.push_back (mark);
- Timecode::increment_hours( timecode, _session->config.get_subframes_per_frame() );
+ Timecode::increment_hours (timecode, _session->config.get_subframes_per_frame());
}
break;
case timecode_show_many_hours:
// Find timecode time of this sample (pos)
- _session->sample_to_timecode(pos, timecode, true /* use_offset */, false /* use_subframes */ );
+ _session->sample_to_timecode (pos, timecode, true /* use_offset */, false /* use_subframes */);
// Go to next whole hour down
Timecode::hours_floor (timecode);
- for (n = 0; n < timecode_nmarks; ) {
- _session->timecode_to_sample(timecode, pos, true /* use_offset */, false /* use_subframes */ );
+ for (n = 0; n < timecode_nmarks;) {
+ _session->timecode_to_sample (timecode, pos, true /* use_offset */, false /* use_subframes */);
if ((timecode.hours % timecode_mark_modulo) == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;
snprintf (buf, sizeof(buf), "%s%02u:%02u:%02u:%02u", timecode.negative ? "-" : "", timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
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:
- bbt_beat_subdivision = 6;
+ case GridTypeBeatDiv6:
+ bbt_beat_subdivision = 3;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv7:
+ case GridTypeBeatDiv7:
bbt_beat_subdivision = 7;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv8:
- bbt_beat_subdivision = 8;
+ case GridTypeBeatDiv8:
+ bbt_beat_subdivision = 4;
bbt_accent_modulo = 2;
break;
- case SnapToBeatDiv10:
- bbt_beat_subdivision = 10;
+ case GridTypeBeatDiv10:
+ bbt_beat_subdivision = 5;
bbt_accent_modulo = 2; // XXX YIKES
break;
- case SnapToBeatDiv12:
- bbt_beat_subdivision = 12;
+ case GridTypeBeatDiv12:
+ bbt_beat_subdivision = 3;
bbt_accent_modulo = 3;
break;
- case SnapToBeatDiv14:
- bbt_beat_subdivision = 14;
+ case GridTypeBeatDiv14:
+ bbt_beat_subdivision = 7;
bbt_accent_modulo = 3; // XXX YIKES!
break;
- case SnapToBeatDiv16:
- bbt_beat_subdivision = 16;
+ case GridTypeBeatDiv16:
+ bbt_beat_subdivision = 4;
bbt_accent_modulo = 4;
break;
- case SnapToBeatDiv20:
- bbt_beat_subdivision = 20;
+ case GridTypeBeatDiv20:
+ bbt_beat_subdivision = 5;
bbt_accent_modulo = 5;
break;
- case SnapToBeatDiv24:
- bbt_beat_subdivision = 24;
+ case GridTypeBeatDiv24:
+ bbt_beat_subdivision = 6;
bbt_accent_modulo = 6;
break;
- case SnapToBeatDiv28:
- bbt_beat_subdivision = 28;
+ case GridTypeBeatDiv28:
+ bbt_beat_subdivision = 7;
bbt_accent_modulo = 7;
break;
- case SnapToBeatDiv32:
- bbt_beat_subdivision = 32;
- bbt_accent_modulo = 8;
- break;
- case SnapToBeatDiv64:
- bbt_beat_subdivision = 64;
+ case GridTypeBeatDiv32:
+ bbt_beat_subdivision = 4;
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 GridTypeTimecode:
+ case GridTypeMinSec:
+ case GridTypeCDFrame:
bbt_beat_subdivision = 4;
break;
}
bbt_bar_helper_on = true;
}
- if (beat_density > 8192) {
+ //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.01);
+ } else if (_grid_type == GridTypeBeatDiv2) {
+ beat_density = fmax (beat_density, 2.01);
+ } else if (_grid_type == GridTypeBeatDiv4) {
+ beat_density = fmax (beat_density, 1.001);
+ } else if (_grid_type == GridTypeBeatDiv8) {
+ beat_density = fmax (beat_density, 0.501);
+ } 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 > 2048) {
bbt_ruler_scale = bbt_show_many;
- } else if (beat_density > 1024) {
- bbt_ruler_scale = bbt_show_64;
} else if (beat_density > 512) {
+ bbt_ruler_scale = bbt_show_64;
+ } else if (beat_density > 256) {
bbt_ruler_scale = bbt_show_16;
- } else if (beat_density > 128) {
+ } else if (beat_density > 64) {
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_beats;
- } else if (beat_density > 0.5) {
- bbt_ruler_scale = bbt_show_ticks;
+ bbt_ruler_scale = bbt_show_1;
+ } else if (beat_density > 4) {
+ bbt_ruler_scale = bbt_show_quarters;
+ } else if (beat_density > 2) {
+ bbt_ruler_scale = bbt_show_eighths;
+ } else if (beat_density > 1) {
+ bbt_ruler_scale = bbt_show_sixteenths;
} else {
- bbt_ruler_scale = bbt_show_ticks_detail;
- }
-
- if ((bbt_ruler_scale == bbt_show_ticks_detail) && beats < 3) {
- bbt_ruler_scale = bbt_show_ticks_super_detail;
+ bbt_ruler_scale = bbt_show_thirtyseconds;
}
}
switch (bbt_ruler_scale) {
- case bbt_show_beats:
+ case bbt_show_quarters:
beats = distance (grid.begin(), grid.end());
bbt_nmarks = beats + 2;
}
break;
- case bbt_show_ticks:
+ case bbt_show_eighths:
beats = distance (grid.begin(), grid.end());
bbt_nmarks = (beats + 2) * bbt_beat_subdivision;
break;
- case bbt_show_ticks_detail:
+ case bbt_show_sixteenths:
beats = distance (grid.begin(), grid.end());
bbt_nmarks = (beats + 2) * bbt_beat_subdivision;
break;
- case bbt_show_ticks_super_detail:
+ case bbt_show_thirtyseconds:
beats = distance (grid.begin(), grid.end());
bbt_nmarks = (beats + 2) * bbt_beat_subdivision;
case bbt_show_many:
bbt_nmarks = 1;
- snprintf (buf, sizeof(buf), "cannot handle %" PRIu32 " bars", bbt_bars );
+ snprintf (buf, sizeof(buf), "cannot handle %" PRIu32 " bars", bbt_bars);
mark.style = ArdourCanvas::Ruler::Mark::Major;
mark.label = buf;
mark.position = lower;
}
static void
-sample_to_clock_parts ( samplepos_t sample,
- samplepos_t sample_rate,
- long *hrs_p,
- long *mins_p,
- long *secs_p,
- long *millisecs_p)
-
+sample_to_clock_parts (samplepos_t sample,
+ samplepos_t sample_rate,
+ long* hrs_p,
+ long* mins_p,
+ long* secs_p,
+ long* millisecs_p)
{
samplepos_t left;
long hrs;
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) {
break;
case minsec_show_many_hours:
- for (n = 0; n < minsec_nmarks; ) {
+ for (n = 0; n < minsec_nmarks;) {
sample_to_clock_parts (pos, _session->sample_rate(), &hrs, &mins, &secs, &millisecs);
if (hrs % minsec_mark_modulo == 0) {
mark.style = ArdourCanvas::Ruler::Mark::Major;