Fondle Port 8
authorRobin Gareus <robin@gareus.org>
Fri, 14 Apr 2017 21:00:28 +0000 (23:00 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 14 Apr 2017 21:03:31 +0000 (23:03 +0200)
* only start touch on parameters in "Touch" mode.
* fix "mute clear" (also affect mute-automation in touch)

libs/surfaces/faderport8/actions.cc
libs/surfaces/faderport8/fp8_strip.cc

index 536257ca38bd845a72334c72f14dcfed58fd4d2e..0d95b3cdc75c6eeca10e84cd3324ee8cc8015a68 100644 (file)
@@ -240,7 +240,10 @@ FaderPort8::button_mute_clear ()
                        continue;
                }
                boost::shared_ptr<AutomationControl> ac = (*i)->mute_control();
-               if (ac) {
+               if (ac && ac->get_value () > 0) {
+                       if (ac->automation_state() == Touch && !ac->touching ()) {
+                               ac->start_touch (ac->session().transport_frame());
+                       }
                        cl->push_back (ac);
                }
        }
@@ -332,7 +335,7 @@ FaderPort8::button_encoder ()
                                        ac = session->master_out()->gain_control ();
                                }
                                if (ac) {
-                                       if (!ac->touching ()) {
+                                       if (ac->automation_state() == Touch && !ac->touching ()) {
                                                ac->start_touch (ac->session().transport_frame());
                                        }
                                        ac->set_value (ac->normal(), PBD::Controllable::NoGroup);
@@ -412,7 +415,7 @@ FaderPort8::encoder_navigate (bool neg, int steps)
                                if (ac) {
                                        double v = ac->internal_to_interface (ac->get_value());
                                        v = std::max (0.0, std::min (1.0, v + steps * (neg ? -.01 : .01)));
-                                       if (!ac->touching ()) {
+                                       if (ac->automation_state() == Touch && !ac->touching ()) {
                                                ac->start_touch (ac->session().transport_frame());
                                        }
                                        ac->set_value (ac->interface_to_internal(v), PBD::Controllable::NoGroup);
@@ -446,7 +449,7 @@ FaderPort8::button_parameter ()
                                                ac = s->pan_azimuth_control ();
                                        }
                                        if (ac) {
-                                               if (!ac->touching ()) {
+                                               if (ac->automation_state() == Touch && !ac->touching ()) {
                                                        ac->start_touch (ac->session().transport_frame());
                                                }
                                                ac->set_value (ac->normal(), PBD::Controllable::UseGroup);
@@ -480,7 +483,7 @@ FaderPort8::encoder_parameter (bool neg, int steps)
                                        if (ac) {
                                                double v = ac->internal_to_interface (ac->get_value());
                                                v = std::max (0.0, std::min (1.0, v + steps * (neg ? -.01 : .01)));
-                                               if (!ac->touching ()) {
+                                               if (ac->automation_state() == Touch && !ac->touching ()) {
                                                        ac->start_touch (ac->session().transport_frame());
                                                }
                                                ac->set_value (ac->interface_to_internal(v), PBD::Controllable::UseGroup);
index ba3ba318f423a47ab1bce4c1de8d400971350b5f..3bedf0e85c03d01d8d777b27050379e2c1325bd4 100644 (file)
 #include "ardour/automation_control.h"
 #include "ardour/gain_control.h"
 #include "ardour/meter.h"
-#include "ardour/mute_control.h"
 #include "ardour/plugin_insert.h"
 #include "ardour/session.h"
-#include "ardour/solo_control.h"
 #include "ardour/stripable.h"
 #include "ardour/track.h"
 #include "ardour/value_as_string.h"
@@ -281,7 +279,7 @@ FP8Strip::midi_fader (float val)
        if (!ac) {
                return false;
        }
-       if (!ac->touching ()) {
+       if (ac->automation_state() == Touch && !ac->touching ()) {
                ac->start_touch (ac->session().transport_frame());
        }
        ac->set_value (ac->interface_to_internal (val), group_mode ());
@@ -306,7 +304,7 @@ void
 FP8Strip::set_mute (bool on)
 {
        if (_mute_ctrl) {
-               if (!_mute_ctrl->touching ()) {
+               if (_mute_ctrl->automation_state() == Touch && !_mute_ctrl->touching ()) {
                        _mute_ctrl->start_touch (_mute_ctrl->session().transport_frame());
                }
                _mute_ctrl->set_value (on ? 1.0 : 0.0, group_mode ());
@@ -317,7 +315,7 @@ void
 FP8Strip::set_solo (bool on)
 {
        if (_solo_ctrl) {
-               if (!_solo_ctrl->touching ()) {
+               if (_solo_ctrl->automation_state() == Touch && !_solo_ctrl->touching ()) {
                        _solo_ctrl->start_touch (_solo_ctrl->session().transport_frame());
                }
                _solo_ctrl->set_value (on ? 1.0 : 0.0, group_mode ());
@@ -340,7 +338,7 @@ FP8Strip::set_select ()
                assert (!_x_select_ctrl);
                _select_plugin_functor ();
        } else if (_x_select_ctrl) {
-               if (!_x_select_ctrl->touching ()) {
+               if (_x_select_ctrl->automation_state() == Touch && !_x_select_ctrl->touching ()) {
                        _x_select_ctrl->start_touch (_x_select_ctrl->session().transport_frame());
                }
                const bool on = !select_button ().is_active();