Skip to main content

dear_imgui_rs/widget/slider/
ui.rs

1use crate::Ui;
2use crate::internal::DataTypeKind;
3
4use super::{AngleSlider, Slider, SliderFlags, VerticalSlider};
5
6impl Ui {
7    /// Creates a new slider widget. Returns true if the value has been edited.
8    pub fn slider<T: AsRef<str>, K: DataTypeKind>(
9        &self,
10        label: T,
11        min: K,
12        max: K,
13        value: &mut K,
14    ) -> bool {
15        self.slider_config(label, min, max).build(value)
16    }
17
18    /// Creates a new unbuilt Slider.
19    pub fn slider_config<T: AsRef<str>, K: DataTypeKind>(
20        &self,
21        label: T,
22        min: K,
23        max: K,
24    ) -> Slider<'_, T, K> {
25        Slider {
26            ui: self,
27            label,
28            min,
29            max,
30            display_format: Option::<&'static str>::None,
31            flags: SliderFlags::NONE,
32        }
33    }
34
35    /// Creates a float slider
36    #[doc(alias = "SliderFloat")]
37    pub fn slider_f32(&self, label: impl AsRef<str>, value: &mut f32, min: f32, max: f32) -> bool {
38        self.slider_config(label, min, max).build(value)
39    }
40
41    /// Creates an integer slider
42    #[doc(alias = "SliderInt")]
43    pub fn slider_i32(&self, label: impl AsRef<str>, value: &mut i32, min: i32, max: i32) -> bool {
44        self.slider_config(label, min, max).build(value)
45    }
46
47    /// Creates a float2 slider
48    #[doc(alias = "SliderFloat2")]
49    pub fn slider_float2(
50        &self,
51        label: impl AsRef<str>,
52        value: &mut [f32; 2],
53        min: f32,
54        max: f32,
55    ) -> bool {
56        self.slider_config(label, min, max)
57            .build_array(value.as_mut_slice())
58    }
59
60    /// Creates a float3 slider
61    #[doc(alias = "SliderFloat3")]
62    pub fn slider_float3(
63        &self,
64        label: impl AsRef<str>,
65        value: &mut [f32; 3],
66        min: f32,
67        max: f32,
68    ) -> bool {
69        self.slider_config(label, min, max)
70            .build_array(value.as_mut_slice())
71    }
72
73    /// Creates a float4 slider
74    #[doc(alias = "SliderFloat4")]
75    pub fn slider_float4(
76        &self,
77        label: impl AsRef<str>,
78        value: &mut [f32; 4],
79        min: f32,
80        max: f32,
81    ) -> bool {
82        self.slider_config(label, min, max)
83            .build_array(value.as_mut_slice())
84    }
85
86    /// Creates an int2 slider
87    #[doc(alias = "SliderInt2")]
88    pub fn slider_int2(
89        &self,
90        label: impl AsRef<str>,
91        value: &mut [i32; 2],
92        min: i32,
93        max: i32,
94    ) -> bool {
95        self.slider_config(label, min, max)
96            .build_array(value.as_mut_slice())
97    }
98
99    /// Creates an int3 slider
100    #[doc(alias = "SliderInt3")]
101    pub fn slider_int3(
102        &self,
103        label: impl AsRef<str>,
104        value: &mut [i32; 3],
105        min: i32,
106        max: i32,
107    ) -> bool {
108        self.slider_config(label, min, max)
109            .build_array(value.as_mut_slice())
110    }
111
112    /// Creates an int4 slider
113    #[doc(alias = "SliderInt4")]
114    pub fn slider_int4(
115        &self,
116        label: impl AsRef<str>,
117        value: &mut [i32; 4],
118        min: i32,
119        max: i32,
120    ) -> bool {
121        self.slider_config(label, min, max)
122            .build_array(value.as_mut_slice())
123    }
124
125    /// Creates a vertical slider
126    #[doc(alias = "VSliderFloat")]
127    pub fn v_slider_f32(
128        &self,
129        label: impl AsRef<str>,
130        size: impl Into<[f32; 2]>,
131        value: &mut f32,
132        min: f32,
133        max: f32,
134    ) -> bool {
135        VerticalSlider::new(label, size, min, max).build(self, value)
136    }
137
138    /// Creates a vertical integer slider
139    #[doc(alias = "VSliderInt")]
140    pub fn v_slider_i32(
141        &self,
142        label: impl AsRef<str>,
143        size: impl Into<[f32; 2]>,
144        value: &mut i32,
145        min: i32,
146        max: i32,
147    ) -> bool {
148        VerticalSlider::new(label, size, min, max).build(self, value)
149    }
150
151    /// Creates an angle slider (value in radians)
152    #[doc(alias = "SliderAngle")]
153    pub fn slider_angle(&self, label: impl AsRef<str>, value_rad: &mut f32) -> bool {
154        AngleSlider::new(label).build(self, value_rad)
155    }
156}