imgui_ext/
drag.rs

1//!
2//! ## Optional params
3//!
4//! * `min` maximum value
5//! * `max` minmum value
6//! * `speed`
7//! * `power`
8//! * `format` (format string in `printf` format)
9//! * `catch` override widget label.
10//! * `map` Applies a mapping function to `&mut Self` (works the same as in the
11//!   [input example](../input/index.html#mapping))
12//!
13use imgui::sys;
14use imgui::{ImStr, Ui};
15
16pub struct DragParams<'a, T> {
17    pub label: &'a ImStr,
18    pub format: Option<&'a ImStr>,
19    pub min: Option<T>,
20    pub max: Option<T>,
21    pub speed: Option<f32>,
22    pub power: Option<f32>,
23}
24
25pub trait Drag<T> {
26    fn build(ui: &imgui::Ui, elem: &mut Self, params: DragParams<T>) -> bool;
27}
28
29impl<T, D: Drag<T>> Drag<T> for Option<D> {
30    fn build(ui: &Ui, elem: &mut Self, params: DragParams<T>) -> bool {
31        if let Some(ref mut elem) = elem {
32            D::build(ui, elem, params)
33        } else {
34            false
35        }
36    }
37}
38
39impl<T, D: Drag<T>> Drag<T> for Box<D> {
40    #[inline]
41    fn build(ui: &Ui, elem: &mut Self, params: DragParams<T>) -> bool {
42        D::build(ui, elem, params)
43    }
44}
45
46imgui_drag_scalar! { (f32, f32, f32, f32, f32, f32, f32, f32, ), 8, sys::ImGuiDataType_Float }
47imgui_drag_scalar! { (f64, f64, f64, f64, f64, f64, f64, f64, ), 8, sys::ImGuiDataType_Double }
48imgui_drag_scalar! { (u32, u32, u32, u32, u32, u32, u32, u32, ), 8, sys::ImGuiDataType_U32 }
49imgui_drag_scalar! { (i32, i32, i32, i32, i32, i32, i32, i32, ), 8, sys::ImGuiDataType_S32 }
50
51// matrix
52
53imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 8, sys::ImGuiDataType_Float }
54imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 7, sys::ImGuiDataType_Float }
55imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 6, sys::ImGuiDataType_Float }
56imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 5, sys::ImGuiDataType_Float }
57imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 4, sys::ImGuiDataType_Float }
58imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 3, sys::ImGuiDataType_Float }
59imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 2, sys::ImGuiDataType_Float }
60imgui_drag_matrix! { (f32, f32, f32, f32, f32, f32, f32, f32), 8, 1, sys::ImGuiDataType_Float }
61
62imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 8, sys::ImGuiDataType_Double }
63imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 7, sys::ImGuiDataType_Double }
64imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 6, sys::ImGuiDataType_Double }
65imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 5, sys::ImGuiDataType_Double }
66imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 4, sys::ImGuiDataType_Double }
67imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 3, sys::ImGuiDataType_Double }
68imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 2, sys::ImGuiDataType_Double }
69imgui_drag_matrix! { (f64, f64, f64, f64, f64, f64, f64, f64), 8, 1, sys::ImGuiDataType_Double }
70
71imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 8, sys::ImGuiDataType_U32 }
72imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 7, sys::ImGuiDataType_U32 }
73imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 6, sys::ImGuiDataType_U32 }
74imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 5, sys::ImGuiDataType_U32 }
75imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 4, sys::ImGuiDataType_U32 }
76imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 3, sys::ImGuiDataType_U32 }
77imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 2, sys::ImGuiDataType_U32 }
78imgui_drag_matrix! { (u32, u32, u32, u32, u32, u32, u32, u32), 8, 1, sys::ImGuiDataType_U32 }
79
80imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 8, sys::ImGuiDataType_S32 }
81imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 7, sys::ImGuiDataType_S32 }
82imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 6, sys::ImGuiDataType_S32 }
83imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 5, sys::ImGuiDataType_S32 }
84imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 4, sys::ImGuiDataType_S32 }
85imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 3, sys::ImGuiDataType_S32 }
86imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 2, sys::ImGuiDataType_S32 }
87imgui_drag_matrix! { (i32, i32, i32, i32, i32, i32, i32, i32), 8, 1, sys::ImGuiDataType_S32 }