mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-17 04:06:26 +01:00
properly handle integer steps in plugin controls
The integer steps min/max are inclusive. e.g the integer range -1 to +1 has three possible values (not two).
This commit is contained in:
parent
42915c19a4
commit
dd07428c48
4 changed files with 49 additions and 35 deletions
|
|
@ -89,6 +89,9 @@ public:
|
||||||
double normal() const { return _desc.normal; }
|
double normal() const { return _desc.normal; }
|
||||||
bool toggled() const { return _desc.toggled; }
|
bool toggled() const { return _desc.toggled; }
|
||||||
|
|
||||||
|
double internal_to_interface (double i) const;
|
||||||
|
double interface_to_internal (double i) const;
|
||||||
|
|
||||||
const ParameterDescriptor& desc() const { return _desc; }
|
const ParameterDescriptor& desc() const { return _desc; }
|
||||||
|
|
||||||
const ARDOUR::Session& session() const { return _session; }
|
const ARDOUR::Session& session() const { return _session; }
|
||||||
|
|
|
||||||
|
|
@ -97,9 +97,6 @@ class LIBARDOUR_API PluginInsert : public Processor
|
||||||
double get_value (void) const;
|
double get_value (void) const;
|
||||||
XMLNode& get_state();
|
XMLNode& get_state();
|
||||||
|
|
||||||
double internal_to_interface (double) const;
|
|
||||||
double interface_to_internal (double) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PluginInsert* _plugin;
|
PluginInsert* _plugin;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -139,3 +139,49 @@ AutomationControl::stop_touch(bool mark, double when)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double
|
||||||
|
AutomationControl::internal_to_interface (double val) const
|
||||||
|
{
|
||||||
|
if (_desc.integer_step) {
|
||||||
|
// both upper and lower are inclusive.
|
||||||
|
val = (val - lower()) / (1 + upper() - lower());
|
||||||
|
} else {
|
||||||
|
val = (val - lower()) / (upper() - lower());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_desc.logarithmic) {
|
||||||
|
if (val > 0) {
|
||||||
|
val = pow (val, 1/1.5);
|
||||||
|
} else {
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
double
|
||||||
|
AutomationControl::interface_to_internal (double val) const
|
||||||
|
{
|
||||||
|
if (_desc.logarithmic) {
|
||||||
|
if (val <= 0) {
|
||||||
|
val = 0;
|
||||||
|
} else {
|
||||||
|
val = pow (val, 1.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_desc.integer_step) {
|
||||||
|
val = lower() + val * (1 + upper() - lower());
|
||||||
|
} else {
|
||||||
|
val = lower() + val * (upper() - lower());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val < lower()) val = lower();
|
||||||
|
if (val > upper()) val = upper();
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1296,38 +1296,6 @@ PluginInsert::PluginControl::set_value (double user_val)
|
||||||
AutomationControl::set_value (user_val);
|
AutomationControl::set_value (user_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
|
||||||
PluginInsert::PluginControl::internal_to_interface (double val) const
|
|
||||||
{
|
|
||||||
val = Controllable::internal_to_interface(val);
|
|
||||||
|
|
||||||
if (_desc.logarithmic) {
|
|
||||||
if (val > 0) {
|
|
||||||
val = pow (val, 1/1.5);
|
|
||||||
} else {
|
|
||||||
val = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
double
|
|
||||||
PluginInsert::PluginControl::interface_to_internal (double val) const
|
|
||||||
{
|
|
||||||
if (_desc.logarithmic) {
|
|
||||||
if (val <= 0) {
|
|
||||||
val = 0;
|
|
||||||
} else {
|
|
||||||
val = pow (val, 1.5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val = Controllable::interface_to_internal(val);
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
XMLNode&
|
XMLNode&
|
||||||
PluginInsert::PluginControl::get_state ()
|
PluginInsert::PluginControl::get_state ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue