diff options
author | Robin Gareus <robin@gareus.org> | 2018-03-28 00:13:30 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2018-03-28 00:18:13 +0200 |
commit | 1de68d791725ca80da08261676a4edbe96600ed4 (patch) | |
tree | eab187c28f0bb7073f6cc80cc36871a702e09654 /gtk2_ardour/automation_controller.cc | |
parent | 9840f848301aec81241b63b597c871a12cfcf571 (diff) |
Sparse update for granular controls on sliders
Don't call ::set_value() if the actual value has not changed.
e.g. MIDI-CC or integer controls. Moving the Bar-controller was able to
create events even though the actual value remained unchanged.
This check has to be done UI-side, since the underlying API is also used
for state-restore and automation. e.g.
"old value" (user-set) may be default "0", "new value" may also be "0" but
libardour still needs to send an event (a synth's internal state may not
default to "0")
Diffstat (limited to 'gtk2_ardour/automation_controller.cc')
-rw-r--r-- | gtk2_ardour/automation_controller.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gtk2_ardour/automation_controller.cc b/gtk2_ardour/automation_controller.cc index 5502cf5001..0b040a30d9 100644 --- a/gtk2_ardour/automation_controller.cc +++ b/gtk2_ardour/automation_controller.cc @@ -177,7 +177,10 @@ void AutomationController::value_adjusted () { if (!_ignore_change) { - _controllable->set_value (_controllable->interface_to_internal(_adjustment->get_value()), Controllable::NoGroup); + const double new_val = _controllable->interface_to_internal(_adjustment->get_value()); + if (_controllable->user_double() != new_val) { + _controllable->set_value (new_val, Controllable::NoGroup); + } } /* A bar controller will automatically follow the adjustment, but for a |