Write inverse master automation.
[ardour.git] / libs / ardour / ardour / slavable_automation_control.h
index b24409b0a52edae2d1f3a8ac28063ccc3d95cc39..3cfc22405c88c4e1311784b1cef7173e9e18b18b 100644 (file)
@@ -45,11 +45,18 @@ public:
        void clear_masters ();
        bool slaved_to (boost::shared_ptr<AutomationControl>) const;
        bool slaved () const;
+
        double get_masters_value () const {
                Glib::Threads::RWLock::ReaderLock lm (master_lock);
                return get_masters_value_locked ();
        }
 
+       /* factor out get_masters_value() */
+       double reduce_by_masters (double val, bool ignore_automation_state = false) const {
+               Glib::Threads::RWLock::ReaderLock lm (master_lock);
+               return reduce_by_masters_locked (val, ignore_automation_state);
+       }
+
        bool get_masters_curve (framepos_t s, framepos_t e, float* v, framecnt_t l) const {
                Glib::Threads::RWLock::ReaderLock lm (master_lock);
                return get_masters_curve_locked (s, e, v, l);
@@ -130,6 +137,8 @@ protected:
        virtual bool get_masters_curve_locked (framepos_t, framepos_t, float*, framecnt_t) const;
        bool masters_curve_multiply (framepos_t, framepos_t, float*, framecnt_t) const;
 
+       virtual double reduce_by_masters_locked (double val, bool) const;
+
        virtual bool handle_master_change (boost::shared_ptr<AutomationControl>);
        virtual bool boolean_automation_run_locked (framepos_t start, pframes_t len);
        bool boolean_automation_run (framepos_t start, pframes_t len);