Fix generic UI sliders w/rangesteps
authorRobin Gareus <robin@gareus.org>
Wed, 18 Jul 2018 08:55:41 +0000 (10:55 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 18 Jul 2018 08:57:57 +0000 (10:57 +0200)
Leave the user in control while the slider is being dragged.

Previously there was a feedback loop:
User-drags slider -> value changes -> value is rounded
-> slider is updated with rounded value (while the user still drags)

gtk2_ardour/automation_controller.cc
gtk2_ardour/automation_controller.h

index 0b040a30d9f7d283224c7cd5c5cde0135045c135..c7860c53cb5f5e89179ea8cc96980cc4dbae5731 100644 (file)
@@ -70,6 +70,7 @@ AutomationController::AutomationController(boost::shared_ptr<AutomationControl>
        , _controllable(ac)
        , _adjustment(adj)
        , _ignore_change(false)
+       , _grabbed(false)
 {
        if (ac->toggled()) {
                ArdourButton* but = manage(new ArdourButton());
@@ -165,6 +166,13 @@ AutomationController::display_effective_value ()
 {
        double const interface_value = _controllable->internal_to_interface(_controllable->get_value());
 
+       if (_grabbed) {
+               /* we cannot use _controllable->touching() here
+                * because that's only set in Write or Touch mode.
+                * Besides ctrl-surfaces may also set touching()
+                */
+               return;
+       }
        if (_adjustment->get_value () != interface_value) {
                _ignore_change = true;
                _adjustment->set_value (interface_value);
@@ -197,6 +205,7 @@ AutomationController::value_adjusted ()
 void
 AutomationController::start_touch()
 {
+       _grabbed = true;
        _controllable->start_touch (_controllable->session().transport_sample());
 }
 
@@ -204,6 +213,10 @@ void
 AutomationController::end_touch ()
 {
        _controllable->stop_touch (_controllable->session().transport_sample());
+       if (_grabbed) {
+               _grabbed = false;
+               display_effective_value ();
+       }
 }
 
 bool
index 12b31f6d86a067cafa4b7f937b53189dd3685062..ac87ee300f068827e47146bb86f4631b2278b501 100644 (file)
@@ -102,6 +102,7 @@ private:
        sigc::connection                             _screen_update_connection;
        PBD::ScopedConnectionList                    _changed_connections;
        bool                                         _ignore_change;
+       bool                                         _grabbed;
 };