Consolidate ParameterDescriptor settings+ranges
This commit is contained in:
parent
df6655ac68
commit
7ab15def2b
@ -2125,31 +2125,11 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
|
||||
desc.enumeration = lilv_port_has_property(_impl->plugin, port, _world.lv2_enumeration);
|
||||
desc.scale_points = get_scale_points(which);
|
||||
|
||||
desc.update_steps();
|
||||
|
||||
if (steps) {
|
||||
//override auto-calculated steps in update_steps()
|
||||
float s = lilv_node_as_float (steps);
|
||||
const float delta = desc.upper - desc.lower;
|
||||
|
||||
desc.step = desc.smallstep = (delta / s);
|
||||
desc.largestep = std::min ((delta / 5.0f), 10.f * desc.smallstep);
|
||||
|
||||
if (desc.logarithmic) {
|
||||
// TODO marry AutomationControl::internal_to_interface () with
|
||||
// http://lv2plug.in/ns/ext/port-props/#rangeSteps
|
||||
desc.smallstep = desc.smallstep / logf(s);
|
||||
desc.step = desc.step / logf(s);
|
||||
desc.largestep = desc.largestep / logf(s);
|
||||
} else if (desc.integer_step) {
|
||||
desc.smallstep = 1.0;
|
||||
desc.step = std::max(1.f, rintf (desc.step));
|
||||
desc.largestep = std::max(1.f, rintf (desc.largestep));
|
||||
}
|
||||
DEBUG_TRACE(DEBUG::LV2, string_compose("parameter %1 small: %2, step: %3 largestep: %4\n",
|
||||
which, desc.smallstep, desc.step, desc.largestep));
|
||||
desc.rangesteps = lilv_node_as_float (steps);
|
||||
}
|
||||
|
||||
desc.update_steps();
|
||||
|
||||
lilv_node_free(def);
|
||||
lilv_node_free(min);
|
||||
|
@ -143,6 +143,17 @@ ParameterDescriptor::ParameterDescriptor()
|
||||
void
|
||||
ParameterDescriptor::update_steps()
|
||||
{
|
||||
/* sanitize flags */
|
||||
if (toggled || enumeration) {
|
||||
logarithmic = false;
|
||||
}
|
||||
if (logarithmic && (upper <= lower || lower * upper <= 0)) {
|
||||
logarithmic = false;
|
||||
}
|
||||
if (rangesteps < 2) {
|
||||
rangesteps = 0;
|
||||
}
|
||||
|
||||
if (unit == ParameterDescriptor::MIDI_NOTE) {
|
||||
step = smallstep = 1; // semitone
|
||||
largestep = 12; // octave
|
||||
@ -153,10 +164,22 @@ ParameterDescriptor::update_steps()
|
||||
largestep = position_to_gain (dB_coeff_step(upper));
|
||||
step = position_to_gain (largestep / 10.0);
|
||||
smallstep = step;
|
||||
} else if (rangesteps > 1) {
|
||||
const float delta = upper - lower;
|
||||
|
||||
step = smallstep = (delta / (rangesteps - 1)); // XXX
|
||||
largestep = std::min ((delta / 5.0f), 10.f * smallstep); // XXX
|
||||
|
||||
if (logarithmic) {
|
||||
smallstep = smallstep / logf (rangesteps); // XXX
|
||||
step = step / logf (rangesteps);
|
||||
largestep = largestep / logf (rangesteps);
|
||||
} else if (integer_step) {
|
||||
smallstep = 1.0;
|
||||
step = std::max(1.f, rintf (rangesteps));
|
||||
largestep = std::max(1.f, rintf (largestep));
|
||||
}
|
||||
} else {
|
||||
/* note that LV2Plugin::get_parameter_descriptor ()
|
||||
* overrides this is lv2:rangeStep is set for a port.
|
||||
*/
|
||||
const float delta = upper - lower;
|
||||
|
||||
/* 30 happens to be the total number of steps for a fader with default
|
||||
|
@ -321,7 +321,6 @@ VSTPlugin::set_state (const XMLNode& node, int version)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc) const
|
||||
{
|
||||
@ -348,12 +347,14 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
||||
desc.step = prop.stepInteger;
|
||||
desc.smallstep = prop.stepInteger;
|
||||
desc.largestep = prop.stepInteger;
|
||||
desc.integer_step = true;
|
||||
|
||||
} else if (prop.flags & kVstParameterUsesFloatStep) {
|
||||
|
||||
desc.step = prop.stepFloat;
|
||||
desc.smallstep = prop.smallStepFloat;
|
||||
desc.largestep = prop.largeStepFloat;
|
||||
// desc.rangesteps = (desc.upper - desc.lower) / prop.smallStepFloat; // XXX
|
||||
|
||||
} else {
|
||||
|
||||
@ -369,8 +370,6 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
||||
}
|
||||
|
||||
desc.toggled = prop.flags & kVstParameterIsSwitch;
|
||||
desc.logarithmic = false;
|
||||
desc.sr_dependent = false;
|
||||
desc.label = Glib::locale_to_utf8 (prop.label);
|
||||
|
||||
} else {
|
||||
@ -384,15 +383,11 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
||||
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
|
||||
|
||||
desc.label = Glib::locale_to_utf8 (label);
|
||||
desc.integer_step = false;
|
||||
desc.lower = 0.0f;
|
||||
desc.upper = 1.0f;
|
||||
desc.step = 0.01f;
|
||||
desc.smallstep = 0.005f;
|
||||
desc.largestep = 0.1f;
|
||||
desc.toggled = false;
|
||||
desc.logarithmic = false;
|
||||
desc.sr_dependent = false;
|
||||
}
|
||||
|
||||
desc.normal = get_parameter (which);
|
||||
|
Loading…
Reference in New Issue
Block a user