This is the constructor NormalisableRange.
auto range = NormalisableRange<double>(0.0, 100.0,
[] (auto rangeStart, auto rangeEnd, auto normalised)
{ return rangeStart + (1.0 - normalised) * (rangeEnd - rangeStart); },
[] (auto rangeStart, auto rangeEnd, auto value)
{ return 1.0 - (value - rangeStart) / (rangeEnd - rangeStart); },
[] (auto rangeStart, auto rangeEnd, auto value)
{ return roundToInt (value); });
slider.setNormalisableRange (range);
or use the range in the AudioParameterFloat constructor.
N.B. the AudioParameterFloat uses NormalisableRange<float>
, vs. the Slider uses NormalisableRange<double>
.
If I did it right, this slider should go from 100 to 0 in integer steps…
EDIT: actually much easier to use jmap:
auto range = NormalisableRange<double>(0.0, 100.0,
[] (auto rangeStart, auto rangeEnd, auto normalised)
{ return jmap (normalised, rangeEnd, rangeStart); },
[] (auto rangeStart, auto rangeEnd, auto value)
{ return jmap (value, rangeEnd, rangeStart, 0.0, 1.0); },
[] (auto rangeStart, auto rangeEnd, auto value)
{ return roundToInt (value); });