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:
parent
14517e13ec
commit
0e79253412
@ -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
|
||||
|
@ -102,6 +102,7 @@ private:
|
||||
sigc::connection _screen_update_connection;
|
||||
PBD::ScopedConnectionList _changed_connections;
|
||||
bool _ignore_change;
|
||||
bool _grabbed;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user