summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2018-08-21 20:45:41 +0200
committerfalkTX <falktx@gmail.com>2018-08-21 20:45:41 +0200
commit3bbbef19fe12ef5d68f2810510da1fae6fdd35ff (patch)
tree7dfb8473021223d71df14d86cfc2bd3ed9387941
parent59895e9f8fcc1b035907eab29926e46827648ffc (diff)
Fix VST values from host if parameter if integer or boolean
-rw-r--r--distrho/src/DistrhoPluginVST.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp
index 2f389ed5..a4543daa 100644
--- a/distrho/src/DistrhoPluginVST.cpp
+++ b/distrho/src/DistrhoPluginVST.cpp
@@ -906,9 +906,22 @@ public:
return ranges.getNormalizedValue(fPlugin.getParameterValue(index));
}
- void vst_setParameter(const int32_t index, const float value)
+ void vst_setParameter(const int32_t index, float value)
{
+ const uint32_t hints(fPlugin.getParameterHints(index));
const ParameterRanges& ranges(fPlugin.getParameterRanges(index));
+
+ if (hints & kParameterIsBoolean)
+ {
+ const float midRange = ranges.min + (ranges.max - ranges.min) / 2.0f;
+
+ value = value > midRange ? ranges.max : ranges.min;
+ }
+ else if (hints & kParameterIsInteger)
+ {
+ value = std::round(value);
+ }
+
const float realValue(ranges.getUnnormalizedValue(value));
fPlugin.setParameterValue(index, realValue);