Fix generic UI sliders w/rangesteps

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)
This commit is contained in:
Robin Gareus 2018-07-18 10:55:41 +02:00
parent 14517e13ec
commit 0e79253412
2 changed files with 14 additions and 0 deletions

View file

@ -70,6 +70,7 @@ AutomationController::AutomationController(boost::shared_ptr<AutomationControl>
, _controllable(ac) , _controllable(ac)
, _adjustment(adj) , _adjustment(adj)
, _ignore_change(false) , _ignore_change(false)
, _grabbed(false)
{ {
if (ac->toggled()) { if (ac->toggled()) {
ArdourButton* but = manage(new ArdourButton()); ArdourButton* but = manage(new ArdourButton());
@ -165,6 +166,13 @@ AutomationController::display_effective_value ()
{ {
double const interface_value = _controllable->internal_to_interface(_controllable->get_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) { if (_adjustment->get_value () != interface_value) {
_ignore_change = true; _ignore_change = true;
_adjustment->set_value (interface_value); _adjustment->set_value (interface_value);
@ -197,6 +205,7 @@ AutomationController::value_adjusted ()
void void
AutomationController::start_touch() AutomationController::start_touch()
{ {
_grabbed = true;
_controllable->start_touch (_controllable->session().transport_sample()); _controllable->start_touch (_controllable->session().transport_sample());
} }
@ -204,6 +213,10 @@ void
AutomationController::end_touch () AutomationController::end_touch ()
{ {
_controllable->stop_touch (_controllable->session().transport_sample()); _controllable->stop_touch (_controllable->session().transport_sample());
if (_grabbed) {
_grabbed = false;
display_effective_value ();
}
} }
bool bool

View file

@ -102,6 +102,7 @@ private:
sigc::connection _screen_update_connection; sigc::connection _screen_update_connection;
PBD::ScopedConnectionList _changed_connections; PBD::ScopedConnectionList _changed_connections;
bool _ignore_change; bool _ignore_change;
bool _grabbed;
}; };