forked from RepoMirrors/kami-blue
Fix floating point conversion errors for float settings
Not a pretty fix. This also fixes a visual bug with sliders and minimum values that are not equal to 0. Closes #145
This commit is contained in:
parent
d6f789f305
commit
0a7630c6c7
|
@ -81,17 +81,26 @@ public class SettingsPanel extends OrganisedContainer {
|
||||||
if (numberSetting.getMin() != null) slider.setMin(numberSetting.getMin().doubleValue());
|
if (numberSetting.getMin() != null) slider.setMin(numberSetting.getMin().doubleValue());
|
||||||
addChild(slider);
|
addChild(slider);
|
||||||
} else {
|
} else {
|
||||||
Slider slider = new Slider(numberSetting.getValue().doubleValue(), numberSetting.getMin().doubleValue(), numberSetting.getMax().doubleValue(), Slider.getDefaultStep(numberSetting.getMin().doubleValue(), numberSetting.getMax().doubleValue()), name, setting instanceof IntegerSetting);
|
// Terrible terrible bug fix.
|
||||||
|
// I know, these parseDoubles look awful, but any conversions I tried here would end up with weird floating point conversion errors.
|
||||||
|
// This is really the easiest solution..
|
||||||
|
double value = Double.parseDouble(numberSetting.getValue().toString());
|
||||||
|
double min = Double.parseDouble(numberSetting.getMin().toString());
|
||||||
|
double max = Double.parseDouble(numberSetting.getMax().toString());
|
||||||
|
Slider slider = new Slider(
|
||||||
|
value, min, max,
|
||||||
|
Slider.getDefaultStep(min, max),
|
||||||
|
name,
|
||||||
|
setting instanceof IntegerSetting);
|
||||||
slider.addPoof(new Slider.SliderPoof<Slider, Slider.SliderPoof.SliderPoofInfo>() {
|
slider.addPoof(new Slider.SliderPoof<Slider, Slider.SliderPoof.SliderPoofInfo>() {
|
||||||
@Override
|
@Override
|
||||||
public void execute(Slider component, SliderPoofInfo info) {
|
public void execute(Slider component, SliderPoofInfo info) {
|
||||||
if (setting instanceof IntegerSetting)
|
if (setting instanceof IntegerSetting)
|
||||||
setting.setValue(new Integer((int) info.getNewValue()));
|
setting.setValue((int) info.getNewValue());
|
||||||
else if (setting instanceof FloatSetting)
|
else if (setting instanceof FloatSetting)
|
||||||
setting.setValue(new Float(info.getNewValue()));
|
setting.setValue((float) info.getNewValue());
|
||||||
else if (setting instanceof DoubleSetting)
|
else if (setting instanceof DoubleSetting)
|
||||||
setting.setValue(info.getNewValue());
|
setting.setValue(info.getNewValue());
|
||||||
setModule(module);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
addChild(slider);
|
addChild(slider);
|
||||||
|
|
|
@ -21,7 +21,8 @@ public class RootSliderUI extends AbstractComponentUI<Slider> {
|
||||||
glColor4f(1,0.33f,0.33f,component.getOpacity());
|
glColor4f(1,0.33f,0.33f,component.getOpacity());
|
||||||
glLineWidth(2.5f);
|
glLineWidth(2.5f);
|
||||||
int height = component.getHeight();
|
int height = component.getHeight();
|
||||||
double w = component.getWidth() * (component.getValue() / component.getMaximum());
|
double value = component.getValue();
|
||||||
|
double w = component.getWidth() * ((value - component.getMinimum()) / (component.getMaximum() - component.getMinimum()));
|
||||||
float downscale = 1.1f;
|
float downscale = 1.1f;
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
{
|
{
|
||||||
|
@ -37,11 +38,7 @@ public class RootSliderUI extends AbstractComponentUI<Slider> {
|
||||||
glColor3f(1,0.33f,0.33f);
|
glColor3f(1,0.33f,0.33f);
|
||||||
RenderHelper.drawCircle((int)w,height/downscale,2f);
|
RenderHelper.drawCircle((int)w,height/downscale,2f);
|
||||||
|
|
||||||
String s = "";
|
String s = value + "";
|
||||||
if (Math.floor(component.getValue())==component.getValue())
|
|
||||||
s += (int) component.getValue();
|
|
||||||
else
|
|
||||||
s += component.getValue();
|
|
||||||
if (component.isPressed()){
|
if (component.isPressed()){
|
||||||
w -= smallFontRenderer.getStringWidth(s)/2;
|
w -= smallFontRenderer.getStringWidth(s)/2;
|
||||||
w = Math.max(0,Math.min(w, component.getWidth()-smallFontRenderer.getStringWidth(s)));
|
w = Math.max(0,Math.min(w, component.getWidth()-smallFontRenderer.getStringWidth(s)));
|
||||||
|
|
|
@ -102,7 +102,8 @@ public class Slider extends AbstractComponent {
|
||||||
public void setValue(double value) {
|
public void setValue(double value) {
|
||||||
SliderPoof.SliderPoofInfo info = new SliderPoof.SliderPoofInfo(this.value, value);
|
SliderPoof.SliderPoofInfo info = new SliderPoof.SliderPoofInfo(this.value, value);
|
||||||
callPoof(SliderPoof.class, info);
|
callPoof(SliderPoof.class, info);
|
||||||
this.value = integer ? (int) info.getNewValue() : info.getNewValue();
|
double newValue = info.getNewValue();
|
||||||
|
this.value = integer ? (int) newValue : newValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static abstract class SliderPoof<T extends Component, S extends SliderPoof.SliderPoofInfo> extends Poof<T,S> {
|
public static abstract class SliderPoof<T extends Component, S extends SliderPoof.SliderPoofInfo> extends Poof<T,S> {
|
||||||
|
|
Loading…
Reference in New Issue