imgui_ext/
slider.rs

1//! ## fields
2//!
3//! * `min` maximum value.
4//! * `max` minimum value.
5//!
6//! ## Optional fields
7//!
8//! * `label`
9//! * `format` format string (in `printf` format)
10//! * `power`
11//! * `catch` override widget label.
12//! * `map` applies a mapping function to `&mut Self` (works the same as in the
13//!   [input example](../input/index.html#mapping))
14//!
15//! ## Example
16//!
17//! ```
18//! #[derive(imgui_ext::Gui)]
19//! struct Sliders {
20//!     #[imgui(slider(min = 0.0, max = 1.0))]
21//!     foo: f32,
22//!     #[imgui(slider(min = 0, max = 16, format = "bar = %.02f"))]
23//!     bar: [i32; 2],
24//! }
25//! ```
26//!
27//! ### Result
28//!
29//! ![][result]
30//!
31//! [result]: https://i.imgur.com/X2ue0dS.png
32use imgui::sys;
33use imgui::{ImStr, Ui};
34
35pub struct SliderParams<'a, T> {
36    pub min: T,
37    pub max: T,
38    pub label: &'a ImStr,
39    pub format: Option<&'a ImStr>,
40    pub power: Option<f32>,
41}
42
43pub trait Slider<T> {
44    fn build(ui: &imgui::Ui, elem: &mut Self, params: SliderParams<T>) -> bool;
45}
46
47impl<T, S: Slider<T>> Slider<T> for Option<S> {
48    fn build(ui: &Ui, elem: &mut Self, params: SliderParams<T>) -> bool {
49        if let Some(ref mut elem) = elem {
50            S::build(ui, elem, params)
51        } else {
52            false
53        }
54    }
55}
56
57impl<T, S: Slider<T>> Slider<T> for Box<S> {
58    #[inline]
59    fn build(ui: &Ui, elem: &mut Self, params: SliderParams<T>) -> bool {
60        S::build(ui, elem, params)
61    }
62}
63
64imgui_slider_scalar! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, sys::ImGuiDataType_Float }
65imgui_slider_scalar! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, sys::ImGuiDataType_Double }
66imgui_slider_scalar! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, sys::ImGuiDataType_U32 }
67imgui_slider_scalar! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, sys::ImGuiDataType_S32 }
68
69// matrix types
70// TODO macro Y expansion
71
72imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 8, sys::ImGuiDataType_Float }
73imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 7, sys::ImGuiDataType_Float }
74imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 6, sys::ImGuiDataType_Float }
75imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 5, sys::ImGuiDataType_Float }
76imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 4, sys::ImGuiDataType_Float }
77imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 3, sys::ImGuiDataType_Float }
78imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 2, sys::ImGuiDataType_Float }
79imgui_slider_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 1, sys::ImGuiDataType_Float }
80
81imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 8, sys::ImGuiDataType_Double }
82imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 7, sys::ImGuiDataType_Double }
83imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 6, sys::ImGuiDataType_Double }
84imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 5, sys::ImGuiDataType_Double }
85imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 4, sys::ImGuiDataType_Double }
86imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 3, sys::ImGuiDataType_Double }
87imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 2, sys::ImGuiDataType_Double }
88imgui_slider_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 1, sys::ImGuiDataType_Double }
89
90imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 8, sys::ImGuiDataType_U32 }
91imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 7, sys::ImGuiDataType_U32 }
92imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 6, sys::ImGuiDataType_U32 }
93imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 5, sys::ImGuiDataType_U32 }
94imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 4, sys::ImGuiDataType_U32 }
95imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 3, sys::ImGuiDataType_U32 }
96imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 2, sys::ImGuiDataType_U32 }
97imgui_slider_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 1, sys::ImGuiDataType_U32 }
98
99imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 8, sys::ImGuiDataType_S32 }
100imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 7, sys::ImGuiDataType_S32 }
101imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 6, sys::ImGuiDataType_S32 }
102imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 5, sys::ImGuiDataType_S32 }
103imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 4, sys::ImGuiDataType_S32 }
104imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 3, sys::ImGuiDataType_S32 }
105imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 2, sys::ImGuiDataType_S32 }
106imgui_slider_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 1, sys::ImGuiDataType_S32 }