diff options
-rw-r--r-- | distrho/src/DistrhoPluginVST.cpp | 15 |
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); |