| @@ -631,6 +631,7 @@ public: | |||
| if (pData->hints & PLUGIN_HAS_COCKOS_EXTENSIONS) | |||
| { | |||
| double vrange[2] = { 0.0, 1.0 }; | |||
| bool isInteger = false; | |||
| if (static_cast<uintptr_t>(dispatcher(effVendorSpecific, static_cast<int32_t>(0xdeadbef0), static_cast<int32_t>(j), vrange, 0.0f)) >= 0xbeef) | |||
| { | |||
| @@ -638,13 +639,19 @@ public: | |||
| max = static_cast<float>(vrange[1]); | |||
| if (min > max) | |||
| max = min; | |||
| if (max - min == 0.0f) | |||
| { | |||
| carla_stderr2("WARNING - Broken plugin parameter: max - min == 0.0f (with cockos extensions)"); | |||
| carla_stderr2("WARNING - Broken plugin parameter min > max (with cockos extensions)"); | |||
| min = max - 0.1f; | |||
| } | |||
| else if (min == max) | |||
| { | |||
| carla_stderr2("WARNING - Broken plugin parameter min == max (with cockos extensions)"); | |||
| max = min + 0.1f; | |||
| } | |||
| // only use values as integer if we have a proper range | |||
| if (max - min >= 1.0f) | |||
| isInteger = dispatcher(effVendorSpecific, kVstParameterUsesIntStep, static_cast<int32_t>(j), nullptr, 0.0f) >= 0xbeef; | |||
| } | |||
| else | |||
| { | |||
| @@ -652,7 +659,7 @@ public: | |||
| max = 1.0f; | |||
| } | |||
| if (dispatcher(effVendorSpecific, kVstParameterUsesIntStep, static_cast<int32_t>(j), nullptr, 0.0f) >= 0xbeef) | |||
| if (isInteger) | |||
| { | |||
| step = 1.0f; | |||
| stepSmall = 1.0f; | |||
| @@ -660,7 +667,7 @@ public: | |||
| } | |||
| else | |||
| { | |||
| float range = max - min; | |||
| const float range = max - min; | |||
| step = range/100.0f; | |||
| stepSmall = range/1000.0f; | |||
| stepLarge = range/10.0f; | |||
| @@ -670,17 +677,17 @@ public: | |||
| { | |||
| if (prop.flags & kVstParameterUsesIntegerMinMax) | |||
| { | |||
| min = float(prop.minInteger); | |||
| max = float(prop.maxInteger); | |||
| min = static_cast<float>(prop.minInteger); | |||
| max = static_cast<float>(prop.maxInteger); | |||
| if (min > max) | |||
| max = min; | |||
| else if (max < min) | |||
| min = max; | |||
| if (max - min == 0.0f) | |||
| { | |||
| carla_stderr2("WARNING - Broken plugin parameter: max - min == 0.0f"); | |||
| carla_stderr2("WARNING - Broken plugin parameter min > max"); | |||
| min = max - 0.1f; | |||
| } | |||
| else if (min == max) | |||
| { | |||
| carla_stderr2("WARNING - Broken plugin parameter min == max"); | |||
| max = min + 0.1f; | |||
| } | |||
| } | |||
| @@ -699,9 +706,9 @@ public: | |||
| } | |||
| else if (prop.flags & kVstParameterUsesIntStep) | |||
| { | |||
| step = float(prop.stepInteger); | |||
| stepSmall = float(prop.stepInteger)/10; | |||
| stepLarge = float(prop.largeStepInteger); | |||
| step = static_cast<float>(prop.stepInteger); | |||
| stepSmall = static_cast<float>(prop.stepInteger)/10.0f; | |||
| stepLarge = static_cast<float>(prop.largeStepInteger); | |||
| pData->param.data[j].hints |= PARAMETER_IS_INTEGER; | |||
| } | |||
| else if (prop.flags & kVstParameterUsesFloatStep) | |||
| @@ -712,7 +719,7 @@ public: | |||
| } | |||
| else | |||
| { | |||
| float range = max - min; | |||
| const float range = max - min; | |||
| step = range/100.0f; | |||
| stepSmall = range/1000.0f; | |||
| stepLarge = range/10.0f; | |||