Hello !

I’m only on my second day of JUCE (and C++ for that matter), so the issue might be very stupid, but please bear with me.

I want a a logarithmic Slider. I originally tried with a skew of 1/e, but it wasn’t right, so I went through a lot of posts to see how I could implement it.

I saw Jules said to override `proportionOfLengthToValue`

and `valueToProportionOfLength`

to achieve that.

So far, I’ve created a subclass of Slider, called, LogSlider, which implements all this in the following fashion:

```
/*
BELOW IS THE CORE DEAL OF THE LOGARITHMIC SLIDER
x: proportion (0) |-----------|(1)
y: value (minValue) |-----------|(maxValue)
To get a logarithmic scale, we have to solve the following:
y = a * exp(b * x)
(x1;y1) = (0;minValue)
(x2;y2) = (1;maxValue)
B and A have to be computed at instantiation and every time minValue or maxValue are changed.
b = (log(y2/y1)) / (x2 - x1)
a = y1 / (exp(b * x1)) OR a = y2 / (exp(b * x2))
So in our case,
b = log(maxValue/minValue)
a = minValue
*/
void LogSlider::updateLogCoefficients()
{
a = getMinimum();
b = log(getMaximum() / getMinimum());
}
// TODO: optimize with exp / log approximations
double LogSlider::proportionOfLengthToValue(double proportion)
{
double value = a * exp(b * proportion);
return value;
}
double LogSlider::valueToProportionOfLength(double value)
{
double proportion = log(value / a) / b;
return proportion;
}
void LogSlider::setRange(double newMinimum, double newMaximum, double newInterval)
{
Slider::setRange(newMinimum, newMaximum, newInterval);
updateLogCoefficients();
}
```

The issue I’m having now is the sliders have no “thumbs”.

~~I think the ~~`paint()`

method is broken because of the subclass, somehow.

~~How could I either fix the ~~`paint()`

method, or implement the scaling without overriding the Slider class ?

~~Thank you for your time. ~~

EDIT: I just realised I also need to change `LogSlider::setRange()`

to prevent non-strictly-positive values for `newMinimum`

and `newMaximum`

. Possible culprit right there.

EDIT2: It was that stupid. minimumValue was 0, and froze the component. I now have a working prototype. I’ll have to see how I can correctly prevent those non-strictly-positive values.