summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-05-03 18:58:38 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-05-03 18:58:38 +0000
commite33d4553b2b333c30835b00741fc5c1fd0e2b36d (patch)
tree9bf8b6839f5078f1918113191689a0535ede52ae /libs/ardour
parent1b9bf21aa40eee32eb4c7ab49d1ad8ab51d09b11 (diff)
more solo model work, including a GUI fix for mute button state when the route is self-soloed
git-svn-id: svn://localhost/ardour2/branches/3.0@7048 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/mute_master.h2
-rw-r--r--libs/ardour/delivery.cc2
-rw-r--r--libs/ardour/mute_master.cc15
-rw-r--r--libs/ardour/route.cc8
4 files changed, 23 insertions, 4 deletions
diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h
index a0207f9817..ad383d8833 100644
--- a/libs/ardour/ardour/mute_master.h
+++ b/libs/ardour/ardour/mute_master.h
@@ -72,6 +72,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful
MutePoint mute_points() const { return _mute_point; }
void set_solo_level (SoloLevel);
+ void set_solo_ignore (bool yn) { _solo_ignore = yn; }
PBD::Signal0<void> MutePointChanged;
@@ -83,6 +84,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful
volatile bool _self_muted;
volatile uint32_t _muted_by_others;
volatile SoloLevel _solo_level;
+ volatile bool _solo_ignore;
};
} // namespace ARDOUR
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc
index 5861e5ea2c..a1aa968a04 100644
--- a/libs/ardour/delivery.cc
+++ b/libs/ardour/delivery.cc
@@ -500,7 +500,7 @@ Delivery::target_gain ()
break;
}
- // cerr << name() << ' ';
+ //cerr << name() << ' ';
desired_gain = _mute_master->mute_gain_at (mp);
if (_role == Listen && _session.monitor_out() && !_session.listening()) {
diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc
index df9a66ef7f..5e49a11875 100644
--- a/libs/ardour/mute_master.cc
+++ b/libs/ardour/mute_master.cc
@@ -40,6 +40,7 @@ MuteMaster::MuteMaster (Session& s, const std::string&)
, _mute_point (AllPoints)
, _self_muted (false)
, _muted_by_others (0)
+ , _solo_ignore (false)
{
}
@@ -107,7 +108,11 @@ MuteMaster::mute_gain_at (MutePoint mp) const
} else if (muted_by_others_at (mp)) { // muted by others
gain = Config->get_solo_mute_gain ();
} else {
- gain = 1.0;
+ if (!_solo_ignore && _session.soloing()) {
+ gain = 0.0;
+ } else {
+ gain = 1.0;
+ }
}
} else {
if (self_muted_at (mp)) { // self-muted
@@ -119,10 +124,14 @@ MuteMaster::mute_gain_at (MutePoint mp) const
} else if (l == UpstreamSoloed) { // soloed by others
gain = 1.0;
} else {
- gain = 1.0;
+ if (!_solo_ignore && _session.soloing()) {
+ gain = 0.0;
+ } else {
+ gain = 1.0;
+ }
}
}
-
+
// cerr << "\tgain = " << gain << endl;
return gain;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index ddb227c6bb..33af0f8abf 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -165,6 +165,10 @@ Route::init ()
_main_outs->panner()->set_bypassed (true);
}
+ if (is_master() || is_monitor() || is_hidden()) {
+ _mute_master->set_solo_ignore (true);
+ }
+
/* now that we have _meter, its safe to connect to this */
Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this)));
@@ -1795,6 +1799,10 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
_flags = Flag (0);
}
+ if (is_master() || is_monitor() || is_hidden()) {
+ _mute_master->set_solo_ignore (true);
+ }
+
/* add all processors (except amp, which is always present) */
nlist = node.children();