DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 000a96765a8ebae0e1c53dc04ad6a6bf7a2eb836
parent 51290314da3b448ec99df90baafd042a3389107c
Author: falkTX <falktx@falktx.com>
Date:   Tue,  3 Jan 2023 22:33:04 +0000

Ensure LV2 control ports with log hint do not use 0 in its range

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginLV2export.cpp | 32+++++++++++++++++++++++++++-----
1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/distrho/src/DistrhoPluginLV2export.cpp b/distrho/src/DistrhoPluginLV2export.cpp @@ -756,6 +756,8 @@ void lv2_generate_ttl(const char* const basename) if (! designated) { + const uint32_t hints = plugin.getParameterHints(i); + // name and symbol const String& paramName(plugin.getParameterName(i)); @@ -780,13 +782,35 @@ void lv2_generate_ttl(const char* const basename) // ranges const ParameterRanges& ranges(plugin.getParameterRanges(i)); - if (plugin.getParameterHints(i) & kParameterIsInteger) + if (hints & kParameterIsInteger) { if (plugin.isParameterInput(i)) pluginString += " lv2:default " + String(int(ranges.def)) + " ;\n"; pluginString += " lv2:minimum " + String(int(ranges.min)) + " ;\n"; pluginString += " lv2:maximum " + String(int(ranges.max)) + " ;\n"; } + else if (hints & kParameterIsLogarithmic) + { + if (plugin.isParameterInput(i)) + { + if (d_isNotZero(ranges.def)) + pluginString += " lv2:default " + String(ranges.def) + " ;\n"; + else if (d_isEqual(ranges.def, ranges.max)) + pluginString += " lv2:default -0.0001 ;\n"; + else + pluginString += " lv2:default 0.0001 ;\n"; + } + + if (d_isNotZero(ranges.min)) + pluginString += " lv2:minimum " + String(ranges.min) + " ;\n"; + else + pluginString += " lv2:minimum 0.0001 ;\n"; + + if (d_isNotZero(ranges.max)) + pluginString += " lv2:maximum " + String(ranges.max) + " ;\n"; + else + pluginString += " lv2:maximum -0.0001 ;\n"; + } else { if (plugin.isParameterInput(i)) @@ -817,7 +841,7 @@ void lv2_generate_ttl(const char* const basename) else pluginString += " rdfs:label \"" + enumValue.label + "\" ;\n"; - if (plugin.getParameterHints(i) & kParameterIsInteger) + if (hints & kParameterIsInteger) { const int rounded = (int)(enumValue.value + (enumValue.value < 0.0f ? -0.5f : 0.5f)); pluginString += " rdf:value " + String(rounded) + " ;\n"; @@ -885,7 +909,7 @@ void lv2_generate_ttl(const char* const basename) pluginString += " a unit:Unit ;\n"; pluginString += " rdfs:label \"" + unit + "\" ;\n"; pluginString += " unit:symbol \"" + unit + "\" ;\n"; - if (plugin.getParameterHints(i) & kParameterIsInteger) + if (hints & kParameterIsInteger) pluginString += " unit:render \"%d " + unit + "\" ;\n"; else pluginString += " unit:render \"%f " + unit + "\" ;\n"; @@ -905,8 +929,6 @@ void lv2_generate_ttl(const char* const basename) } // hints - const uint32_t hints = plugin.getParameterHints(i); - if (hints & kParameterIsBoolean) { if ((hints & kParameterIsTrigger) == kParameterIsTrigger)