Use min..=max syntax for slider ranges
This commit is contained in:
parent
02f3b6dddf
commit
663fbda90c
4 changed files with 37 additions and 37 deletions
|
@ -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)),
|
||||
);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue