1use 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
51imgui_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 }