- /* TODO: This should be more generic (use ParameterDescriptor) */
- if (alist->parameter().type() == GainAutomation ||
- alist->parameter().type() == EnvelopeAutomation) {
- y = slider_position_to_gain_with_max (y, Config->get_max_gain());
+ /* TODO: This should be more generic (use ParameterDescriptor)
+ * or better yet: Controllable -> set_interface();
+ */
+
+ if ( alist->parameter().type() == GainAutomation
+ || alist->parameter().type() == EnvelopeAutomation
+ || (_desc.logarithmic && _desc.lower == 0. && _desc.upper > _desc.lower)) {
+ y = slider_position_to_gain_with_max (y, _desc.upper);
+ y = max ((double)_desc.lower, y);
+ y = min ((double)_desc.upper, y);
+ } else if (alist->parameter().type() == TrimAutomation
+ || (_desc.logarithmic && _desc.lower * _desc.upper > 0 && _desc.upper > _desc.lower)) {
+ const double lower_db = accurate_coefficient_to_dB (_desc.lower);
+ const double range_db = accurate_coefficient_to_dB (_desc.upper) - lower_db;