From d0dca7daf0aa4ce17efef39d459cba73666d0e49 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 1 May 2015 14:45:45 +0200 Subject: [PATCH] constrain initial custom meter positions. The processor-box GUI only allows to move the custom meter position between trim and main_out/panner. Previously an initial switch from In -> custom or Out -> Custom left the meter at a position that can otherwise not be reached by manually repositioning the custom meter. --- libs/ardour/ardour/route.h | 2 -- libs/ardour/route.cc | 58 +++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index ba0acbc38f..2d35211f47 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -672,8 +672,6 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou or 0. */ boost::weak_ptr _processor_after_last_custom_meter; - /** true if the last custom meter position was at the end of the processor list */ - bool _last_custom_meter_was_at_end; void reset_instrument_info (); diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 6409fb5bf0..b28f83c477 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -111,7 +111,6 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type) , _in_configure_processors (false) , _initial_io_setup (false) , _custom_meter_position_noted (false) - , _last_custom_meter_was_at_end (false) { if (is_master()) { _meter_type = MeterK20; @@ -2237,8 +2236,6 @@ Route::state(bool full_state) after->id().print (buf, sizeof (buf)); node->add_property (X_("processor-after-last-custom-meter"), buf); } - - node->add_property (X_("last-custom-meter-was-at-end"), _last_custom_meter_was_at_end ? "yes" : "no"); } return *node; @@ -2431,10 +2428,6 @@ Route::set_state (const XMLNode& node, int version) } } - if ((prop = node.property (X_("last-custom-meter-was-at-end"))) != 0) { - _last_custom_meter_was_at_end = string_is_affirmative (prop->value ()); - } - for (niter = nlist.begin(); niter != nlist.end(); ++niter){ child = *niter; @@ -3482,7 +3475,9 @@ Route::set_meter_point_unlocked () bool meter_was_visible_to_user = _meter->display_to_user (); - maybe_note_meter_position (); + if (!_custom_meter_position_noted) { + maybe_note_meter_position (); + } if (_meter_point != MeterCustom) { @@ -3491,23 +3486,20 @@ Route::set_meter_point_unlocked () setup_invisible_processors (); } else { - _meter->set_display_to_user (true); /* If we have a previous position for the custom meter, try to put it there */ - if (_custom_meter_position_noted) { - boost::shared_ptr after = _processor_after_last_custom_meter.lock (); - - if (after) { - ProcessorList::iterator i = find (_processors.begin(), _processors.end(), after); - if (i != _processors.end ()) { - _processors.remove (_meter); - _processors.insert (i, _meter); - } - } else if (_last_custom_meter_was_at_end) { + boost::shared_ptr after = _processor_after_last_custom_meter.lock (); + if (after) { + ProcessorList::iterator i = find (_processors.begin(), _processors.end(), after); + if (i != _processors.end ()) { _processors.remove (_meter); - _processors.push_back (_meter); + _processors.insert (i, _meter); } + } else {// at end, right before the mains_out/panner + _processors.remove (_meter); + ProcessorList::iterator main = _processors.end(); + _processors.insert (--main, _meter); } } @@ -4537,18 +4529,32 @@ Route::maybe_note_meter_position () } _custom_meter_position_noted = true; + /* custom meter points range from after trim to before panner/main_outs + * this is a limitation by the current processor UI + */ + bool seen_trim = false; + _processor_after_last_custom_meter.reset(); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { + if ((*i) == _trim) { + seen_trim = true; + } + if ((*i) == _main_outs) { + _processor_after_last_custom_meter = *i; + break; + } if (boost::dynamic_pointer_cast (*i)) { - ProcessorList::iterator j = i; - ++j; - if (j != _processors.end ()) { - _processor_after_last_custom_meter = *j; - _last_custom_meter_was_at_end = false; + if (!seen_trim) { + _processor_after_last_custom_meter = _trim; } else { - _last_custom_meter_was_at_end = true; + ProcessorList::iterator j = i; + ++j; + assert(j != _processors.end ()); // main_outs should be before + _processor_after_last_custom_meter = *j; } + break; } } + assert(_processor_after_last_custom_meter.lock()); } boost::shared_ptr -- 2.30.2