summaryrefslogtreecommitdiff
path: root/libs/ardour/gain_control.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-08 16:49:47 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:40 -0400
commit653ae4acd639fef149314fe6f8c7a0d862afae40 (patch)
treeba32ff0efd9b105c207ad7e3b2e89d73e76b4355 /libs/ardour/gain_control.cc
parentc107f1ab56270f4485ca2a787d575c2b5b53cfcf (diff)
universal change in the design of the way Route/Track controls are designed and used. The controls now own their own state, rather than proxy for state in their owners.
Massive changes all over the code to accomodate this. Many things are not finished. Consider this a backup safety commit
Diffstat (limited to 'libs/ardour/gain_control.cc')
-rw-r--r--libs/ardour/gain_control.cc42
1 files changed, 22 insertions, 20 deletions
diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc
index 456fd9b248..3cb8230198 100644
--- a/libs/ardour/gain_control.cc
+++ b/libs/ardour/gain_control.cc
@@ -33,9 +33,9 @@ using namespace ARDOUR;
using namespace std;
GainControl::GainControl (Session& session, const Evoral::Parameter &param, boost::shared_ptr<AutomationList> al)
- : AutomationControl (session, param, ParameterDescriptor(param),
- al ? al : boost::shared_ptr<AutomationList> (new AutomationList (param)),
- param.type() == GainAutomation ? X_("gaincontrol") : X_("trimcontrol")) {
+ : SlavableAutomationControl (session, param, ParameterDescriptor(param),
+ al ? al : boost::shared_ptr<AutomationList> (new AutomationList (param)),
+ param.type() == GainAutomation ? X_("gaincontrol") : X_("trimcontrol")) {
alist()->reset_default (1.0);
@@ -44,22 +44,7 @@ GainControl::GainControl (Session& session, const Evoral::Parameter &param, boos
}
void
-GainControl::set_value (double val, PBD::Controllable::GroupControlDisposition group_override)
-{
- if (writable()) {
- _set_value (val, group_override);
- }
-}
-
-void
-GainControl::set_value_unchecked (double val)
-{
- /* used only automation playback */
- _set_value (val, Controllable::NoGroup);
-}
-
-void
-GainControl::_set_value (double val, Controllable::GroupControlDisposition group_override)
+GainControl::actually_set_value (double val, Controllable::GroupControlDisposition group_override)
{
val = std::max (std::min (val, (double)_desc.upper), (double)_desc.lower);
@@ -75,7 +60,7 @@ GainControl::_set_value (double val, Controllable::GroupControlDisposition group
be retrieved by AutomationControl::get_value ()
*/
- AutomationControl::set_value (val, group_override);
+ AutomationControl::actually_set_value (val, group_override);
_session.set_dirty ();
}
@@ -120,6 +105,23 @@ GainControl::get_user_string () const
}
void
+GainControl::inc_gain (gain_t factor)
+{
+ /* To be used ONLY when doing group-relative gain adjustment, from
+ * ControlGroup::set_group_values().
+ */
+
+ const float desired_gain = user_double();
+
+ if (fabsf (desired_gain) < GAIN_COEFF_SMALL) {
+ // really?! what's the idea here?
+ actually_set_value (0.000001f + (0.000001f * factor), Controllable::ForGroup);
+ } else {
+ actually_set_value (desired_gain + (desired_gain * factor), Controllable::ForGroup);
+ }
+}
+
+void
GainControl::recompute_masters_ratios (double val)
{
/* Master WRITE lock must be held */