summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);