From 663fbda90cd4bf7c5de973333094a5e1d290b57f Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 25 Apr 2020 11:01:57 +0200 Subject: [PATCH] Use min..=max syntax for slider ranges --- emigui/src/emigui.rs | 2 +- emigui/src/example_app.rs | 14 +++++++------- emigui/src/style.rs | 20 ++++++++++---------- emigui/src/widgets.rs | 38 +++++++++++++++++++------------------- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/emigui/src/emigui.rs b/emigui/src/emigui.rs index 2b378547..f551b243 100644 --- a/emigui/src/emigui.rs +++ b/emigui/src/emigui.rs @@ -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)), ); diff --git a/emigui/src/example_app.rs b/emigui/src/example_app.rs index 182ea5b2..09e9ab16 100644 --- a/emigui/src/example_app.rs +++ b/emigui/src/example_app.rs @@ -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( diff --git a/emigui/src/style.rs b/emigui/src/style.rs index ae2c3d49..7598f983 100644 --- a/emigui/src/style.rs +++ b/emigui/src/style.rs @@ -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)); } } diff --git a/emigui/src/widgets.rs b/emigui/src/widgets.rs index 79189e09..428171c2 100644 --- a/emigui/src/widgets.rs +++ b/emigui/src/widgets.rs @@ -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) -> f32>; pub struct Slider<'a> { get_set_value: SliderGetSet<'a>, - min: f32, - max: f32, + range: RangeInclusive, text: Option, precision: usize, text_color: Option, @@ -320,11 +321,13 @@ pub struct Slider<'a> { } impl<'a> Slider<'a> { - fn from_get_set(get_set_value: impl 'a + FnMut(Option) -> f32) -> Self { + fn from_get_set( + range: RangeInclusive, + get_set_value: impl 'a + FnMut(Option) -> 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) -> Self { Slider { - min, - max, precision: 3, - ..Self::from_get_set(move |v: Option| { + ..Self::from_get_set(range, move |v: Option| { 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) -> 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| { + ..Self::from_get_set(range, move |v: Option| { 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) -> 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| { + ..Self::from_get_set(range, move |v: Option| { 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 {