Use min..=max syntax for slider ranges

This commit is contained in:
Emil Ernerfeldt 2020-04-25 11:01:57 +02:00
parent 02f3b6dddf
commit 663fbda90c
4 changed files with 37 additions and 37 deletions

View file

@ -123,7 +123,7 @@ fn font_definitions_ui(font_definitions: &mut FontDefinitions, region: &mut Regi
for (text_style, (_family, size)) in font_definitions.iter_mut() {
// TODO: radiobutton for family
region.add(
Slider::f32(size, 4.0, 40.0)
Slider::f32(size, 4.0..=40.0)
.precision(0)
.text(format!("{:?}", text_style)),
);

View file

@ -93,14 +93,14 @@ impl ExampleApp {
));
});
region.add(Slider::usize(&mut self.slider_value, 1, 1000).text("value"));
region.add(Slider::usize(&mut self.slider_value, 1..=1000).text("value"));
if region.add(Button::new("Double it")).clicked {
self.slider_value *= 2;
}
});
region.collapsing("Layouts", |region| {
region.add(Slider::usize(&mut self.num_columns, 1, 10).text("Columns"));
region.add(Slider::usize(&mut self.num_columns, 1..=10).text("Columns"));
region.columns(self.num_columns, |cols| {
for (i, col) in cols.iter_mut().enumerate() {
col.add(label!("Column {} out of {}", i + 1, self.num_columns));
@ -112,11 +112,11 @@ impl ExampleApp {
});
region.collapsing("Test box rendering", |region| {
region.add(Slider::f32(&mut self.size.x, 0.0, 500.0).text("width"));
region.add(Slider::f32(&mut self.size.y, 0.0, 500.0).text("height"));
region.add(Slider::f32(&mut self.corner_radius, 0.0, 50.0).text("corner_radius"));
region.add(Slider::f32(&mut self.stroke_width, 0.0, 10.0).text("stroke_width"));
region.add(Slider::usize(&mut self.num_boxes, 0, 5).text("num_boxes"));
region.add(Slider::f32(&mut self.size.x, 0.0..=500.0).text("width"));
region.add(Slider::f32(&mut self.size.y, 0.0..=500.0).text("height"));
region.add(Slider::f32(&mut self.corner_radius, 0.0..=50.0).text("corner_radius"));
region.add(Slider::f32(&mut self.stroke_width, 0.0..=10.0).text("stroke_width"));
region.add(Slider::usize(&mut self.num_boxes, 0..=5).text("num_boxes"));
let pos = region
.reserve_space(

View file

@ -155,15 +155,15 @@ impl Style {
}
region.add(Slider::f32(&mut self.item_spacing.x, 0.0, 10.0).text("item_spacing.x").precision(0));
region.add(Slider::f32(&mut self.item_spacing.y, 0.0, 10.0).text("item_spacing.y").precision(0));
region.add(Slider::f32(&mut self.window_padding.x, 0.0, 10.0).text("window_padding.x").precision(0));
region.add(Slider::f32(&mut self.window_padding.y, 0.0, 10.0).text("window_padding.y").precision(0));
region.add(Slider::f32(&mut self.indent, 0.0, 100.0).text("indent").precision(0));
region.add(Slider::f32(&mut self.button_padding.x, 0.0, 20.0).text("button_padding.x").precision(0));
region.add(Slider::f32(&mut self.button_padding.y, 0.0, 20.0).text("button_padding.y").precision(0));
region.add(Slider::f32(&mut self.clickable_diameter, 0.0, 60.0).text("clickable_diameter").precision(0));
region.add(Slider::f32(&mut self.start_icon_width, 0.0, 60.0).text("start_icon_width").precision(0));
region.add(Slider::f32(&mut self.line_width, 0.0, 10.0).text("line_width").precision(0));
region.add(Slider::f32(&mut self.item_spacing.x, 0.0..=10.0).text("item_spacing.x").precision(0));
region.add(Slider::f32(&mut self.item_spacing.y, 0.0..=10.0).text("item_spacing.y").precision(0));
region.add(Slider::f32(&mut self.window_padding.x, 0.0..=10.0).text("window_padding.x").precision(0));
region.add(Slider::f32(&mut self.window_padding.y, 0.0..=10.0).text("window_padding.y").precision(0));
region.add(Slider::f32(&mut self.indent, 0.0..=100.0).text("indent").precision(0));
region.add(Slider::f32(&mut self.button_padding.x, 0.0..=20.0).text("button_padding.x").precision(0));
region.add(Slider::f32(&mut self.button_padding.y, 0.0..=20.0).text("button_padding.y").precision(0));
region.add(Slider::f32(&mut self.clickable_diameter, 0.0..=60.0).text("clickable_diameter").precision(0));
region.add(Slider::f32(&mut self.start_icon_width, 0.0..=60.0).text("start_icon_width").precision(0));
region.add(Slider::f32(&mut self.line_width, 0.0..=10.0).text("line_width").precision(0));
}
}

View file

@ -1,5 +1,7 @@
#![allow(clippy::new_without_default)]
use std::ops::RangeInclusive;
use crate::{
layout::{Direction, GuiResponse},
*,
@ -310,8 +312,7 @@ type SliderGetSet<'a> = Box<dyn 'a + FnMut(Option<f32>) -> f32>;
pub struct Slider<'a> {
get_set_value: SliderGetSet<'a>,
min: f32,
max: f32,
range: RangeInclusive<f32>,
text: Option<String>,
precision: usize,
text_color: Option<Color>,
@ -320,11 +321,13 @@ pub struct Slider<'a> {
}
impl<'a> Slider<'a> {
fn from_get_set(get_set_value: impl 'a + FnMut(Option<f32>) -> f32) -> Self {
fn from_get_set(
range: RangeInclusive<f32>,
get_set_value: impl 'a + FnMut(Option<f32>) -> f32,
) -> Self {
Slider {
get_set_value: Box::new(get_set_value),
min: f32::NAN,
max: f32::NAN,
range,
text: None,
precision: 3,
text_on_top: None,
@ -333,12 +336,11 @@ impl<'a> Slider<'a> {
}
}
pub fn f32(value: &'a mut f32, min: f32, max: f32) -> Self {
// TODO: use range syntax
pub fn f32(value: &'a mut f32, range: RangeInclusive<f32>) -> Self {
Slider {
min,
max,
precision: 3,
..Self::from_get_set(move |v: Option<f32>| {
..Self::from_get_set(range, move |v: Option<f32>| {
if let Some(v) = v {
*value = v
}
@ -347,12 +349,11 @@ impl<'a> Slider<'a> {
}
}
pub fn i32(value: &'a mut i32, min: i32, max: i32) -> Self {
pub fn i32(value: &'a mut i32, range: RangeInclusive<i32>) -> Self {
let range = (*range.start() as f32)..=(*range.end() as f32);
Slider {
min: min as f32,
max: max as f32,
precision: 0,
..Self::from_get_set(move |v: Option<f32>| {
..Self::from_get_set(range, move |v: Option<f32>| {
if let Some(v) = v {
*value = v.round() as i32
}
@ -361,12 +362,11 @@ impl<'a> Slider<'a> {
}
}
pub fn usize(value: &'a mut usize, min: usize, max: usize) -> Self {
pub fn usize(value: &'a mut usize, range: RangeInclusive<usize>) -> Self {
let range = (*range.start() as f32)..=(*range.end() as f32);
Slider {
min: min as f32,
max: max as f32,
precision: 0,
..Self::from_get_set(move |v: Option<f32>| {
..Self::from_get_set(range, move |v: Option<f32>| {
if let Some(v) = v {
*value = v.round() as usize
}
@ -457,8 +457,8 @@ impl<'a> Widget for Slider<'a> {
let left = interact.rect.left() + handle_radius;
let right = interact.rect.right() - handle_radius;
let min = self.min;
let max = self.max;
let min = *self.range.start();
let max = *self.range.end();
debug_assert!(min <= max);
if let Some(mouse_pos) = region.input().mouse_pos {