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:
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)