[slider] show full precision of value if value is very precise
This commit is contained in:
parent
fd95f8a146
commit
ecb703a696
1 changed files with 14 additions and 4 deletions
|
@ -183,12 +183,14 @@ impl<'a> Slider<'a> {
|
||||||
/// Just the text label
|
/// Just the text label
|
||||||
fn text_ui(&mut self, ui: &mut Ui, x_range: RangeInclusive<f32>) {
|
fn text_ui(&mut self, ui: &mut Ui, x_range: RangeInclusive<f32>) {
|
||||||
let aim_radius = ui.input().aim_radius();
|
let aim_radius = ui.input().aim_radius();
|
||||||
let text = self.format_text(aim_radius, x_range);
|
let value_text = self.format_value(aim_radius, x_range);
|
||||||
|
let label_text = self.text.as_ref().map(String::as_str).unwrap_or_default();
|
||||||
|
let text = format!("{}: {}", label_text, value_text);
|
||||||
let text_color = self.text_color.unwrap_or_else(|| ui.style().text_color);
|
let text_color = self.text_color.unwrap_or_else(|| ui.style().text_color);
|
||||||
ui.add(Label::new(text).multiline(false).text_color(text_color));
|
ui.add(Label::new(text).multiline(false).text_color(text_color));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_text(&mut self, aim_radius: f32, x_range: RangeInclusive<f32>) -> String {
|
fn format_value(&mut self, aim_radius: f32, x_range: RangeInclusive<f32>) -> String {
|
||||||
let value = (self.get_set_value)(None);
|
let value = (self.get_set_value)(None);
|
||||||
|
|
||||||
let precision = self.precision.unwrap_or_else(|| {
|
let precision = self.precision.unwrap_or_else(|| {
|
||||||
|
@ -201,8 +203,16 @@ impl<'a> Slider<'a> {
|
||||||
(-range.log10()).ceil().max(0.0) as usize
|
(-range.log10()).ceil().max(0.0) as usize
|
||||||
});
|
});
|
||||||
|
|
||||||
let text = self.text.as_ref().map(String::as_str).unwrap_or_default();
|
let text = format!("{:.*}", precision, value);
|
||||||
format!("{}: {:.*}", text, precision, value)
|
if (text.parse::<f32>().unwrap() - value).abs() <= std::f32::EPSILON {
|
||||||
|
// Enough precision to show the value accurately - good!
|
||||||
|
text
|
||||||
|
} else {
|
||||||
|
// The value has more precision than we expected.
|
||||||
|
// Probably the value was set not by the slider, but from outside.
|
||||||
|
// In any case: show the full value
|
||||||
|
value.to_string()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue