diff options
Diffstat (limited to 'distrho/src/DistrhoPluginVST.cpp')
-rw-r--r-- | distrho/src/DistrhoPluginVST.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp index 00f46b2f..7c6ad521 100644 --- a/distrho/src/DistrhoPluginVST.cpp +++ b/distrho/src/DistrhoPluginVST.cpp @@ -468,15 +468,26 @@ public: value = value > midRange ? ranges.max : ranges.min; } + else if (hints & kParameterIsInteger) + { + value = std::round(value); + } - if (hints & kParameterIsInteger) + const ParameterEnumerationValues& enumValues(fPlugin.getParameterEnumValues(index)); + + for (uint8_t i = 0; i < enumValues.count; ++i) { - DISTRHO_NAMESPACE::snprintf_iparam((char*)ptr, (int32_t)std::round(value), 24); + if (d_isNotEqual(value, enumValues.values[i].value)) + continue; + + DISTRHO_NAMESPACE::strncpy((char*)ptr, enumValues.values[i].label.buffer(), 24); + return 1; } + + if (hints & kParameterIsInteger) + DISTRHO_NAMESPACE::snprintf_iparam((char*)ptr, (int32_t)value, 24); else - { DISTRHO_NAMESPACE::snprintf_param((char*)ptr, value, 24); - } return 1; } |