give different Tracks + Ardour/Mixbus playhead priority functionality, and add missing set_track_loop() call for playhead priority

This commit is contained in:
Paul Davis 2015-05-12 23:17:14 -04:00
parent 30a698f42e
commit 016beaab9b
2 changed files with 45 additions and 0 deletions

View File

@ -163,7 +163,11 @@ CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
CONFIG_VARIABLE (float, shuttle_max_speed, "shuttle-max-speed", 8.0f)
CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false)
CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false)
#ifdef USE_TRACKS_CODE_FEATURES
CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate) )
#else
CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate|RangeSelectionStart|Loop|RegionSelectionStart))
#endif
/* metering */

View File

@ -505,17 +505,47 @@ Session::select_playhead_priority_target (framepos_t& jump_to)
return false;
}
if (Profile->get_trx() && transport_rolling() ) {
// We're playing, so do nothing.
// Next stop will put us where we need to be.
return false;
}
/* Note that the order of checking each AutoReturnTarget flag defines
the priority each flag.
Ardour/Mixbus: Last Locate
Range Selection
Loop Range
Region Selection
Tracks: Range Selection
Loop Range
Region Selection
Last Locate
*/
#ifndef USE_TRACKS_CODE_FEATURES
if (autoreturn & LastLocate) {
jump_to = _last_roll_location;
}
if (jump_to < 0 && (autoreturn & RangeSelectionStart)) {
#else
if (autoreturn & RangeSelectionStart) {
#endif
if (!_range_selection.empty()) {
jump_to = _range_selection.from;
} else {
if (Profile->get_trx()) {
if (transport_rolling ()) {
/* Range selection no longer exists, but we're playing,
so do nothing. Next stop will put us where
we need to be.
*/
return false;
}
}
}
}
@ -527,6 +557,11 @@ Session::select_playhead_priority_target (framepos_t& jump_to)
if (location) {
jump_to = location->start();
if (Config->get_seamless_loop()) {
/* need to get track buffers reloaded */
set_track_loop (true);
}
}
}
}
@ -537,6 +572,12 @@ Session::select_playhead_priority_target (framepos_t& jump_to)
}
}
#ifdef USE_TRACKS_CODE_FEATURES
if (jump_to < 0 && (autoreturn & LastLocate)) {
jump_to = _last_roll_location;
}
#endif
return jump_to >= 0;
}