mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-16 07:58:33 +00:00
Add basic slider examples
This commit is contained in:
parent
2922dabc8f
commit
dfbe4231a8
99
imgui-examples/examples/slider.rs
Normal file
99
imgui-examples/examples/slider.rs
Normal file
@ -0,0 +1,99 @@
|
||||
use imgui::*;
|
||||
|
||||
mod support;
|
||||
|
||||
fn main() {
|
||||
let mut state = State::default();
|
||||
let system = support::init(file!());
|
||||
system.main_loop(move |run, ui| {
|
||||
example_selector(run, ui, &mut state);
|
||||
match state.example {
|
||||
1 => example_1(ui, &mut state),
|
||||
2 => example_2(ui, &mut state),
|
||||
_ => (),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn example_selector(run: &mut bool, ui: &mut Ui, state: &mut State) {
|
||||
let w = Window::new(im_str!("Slider examples"))
|
||||
.opened(run)
|
||||
.position([20.0, 20.0], Condition::Appearing)
|
||||
.size([700.0, 80.0], Condition::Appearing)
|
||||
.resizable(false);
|
||||
w.build(&ui, || {
|
||||
let mut clicked = false;
|
||||
clicked |= ui.radio_button(im_str!("Example 1: Basic sliders"), &mut state.example, 1);
|
||||
clicked |= ui.radio_button(im_str!("Example 2: Slider arrays"), &mut state.example, 2);
|
||||
if clicked {
|
||||
state.reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn example_1(ui: &Ui, state: &mut State) {
|
||||
let w = Window::new(im_str!("Example 1: Basic sliders"))
|
||||
.size([700.0, 340.0], Condition::Appearing)
|
||||
.position([20.0, 120.0], Condition::Appearing);
|
||||
w.build(&ui, || {
|
||||
ui.text("All of the following data types are supported:");
|
||||
ui.text("Signed: i8 i16 i32 i64");
|
||||
ui.text("Unsigned: u8 u16 u32 u64");
|
||||
ui.text("Floats: f32 f64");
|
||||
|
||||
Slider::new(im_str!("u8 value"))
|
||||
.build(&ui, &mut state.u8_value);
|
||||
|
||||
Slider::new(im_str!("f32 value"))
|
||||
.build(&ui, &mut state.f32_value);
|
||||
|
||||
ui.separator();
|
||||
ui.text("Slider range can be limited:");
|
||||
Slider::new(im_str!("i32 value with range"))
|
||||
.range(-999 ..= 999)
|
||||
.build(&ui, &mut state.i32_value);
|
||||
ui.text("Note that for 32-bit/64-bit types, sliders are always limited to half of the natural type range!");
|
||||
|
||||
ui.separator();
|
||||
ui.text("Value formatting can be customized with a C-style printf string:");
|
||||
Slider::new(im_str!("f64 value with custom formatting"))
|
||||
.range(-999_999_999.0 ..= 999_999_999.0)
|
||||
.display_format(im_str!("%09.0f"))
|
||||
.build(&ui, &mut state.f64_formatted);
|
||||
|
||||
ui.separator();
|
||||
ui.text("Vertical sliders require a size parameter but otherwise work in a similar way:");
|
||||
VerticalSlider::new(im_str!("vertical\nu8 value"), [50.0, 50.0])
|
||||
.build(&ui, &mut state.u8_value);
|
||||
});
|
||||
}
|
||||
|
||||
fn example_2(ui: &Ui, state: &mut State) {
|
||||
let w = Window::new(im_str!("Example 2: Slider arrays"))
|
||||
.size([700.0, 260.0], Condition::Appearing)
|
||||
.position([20.0, 120.0], Condition::Appearing);
|
||||
w.build(&ui, || {
|
||||
ui.text("You can easily build a slider group from an array of values:");
|
||||
Slider::new(im_str!("[u8; 4]"))
|
||||
.build_array(&ui, &mut state.array);
|
||||
|
||||
ui.text("You don't need to use arrays with known length; arbitrary slices can be used:");
|
||||
let slice: &mut [u8] = &mut state.array[1..=2];
|
||||
Slider::new(im_str!("subslice"))
|
||||
.build_array(&ui, slice);
|
||||
});
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct State {
|
||||
example: u32,
|
||||
i32_value: i32,
|
||||
u8_value: u8,
|
||||
f32_value: f32,
|
||||
f64_formatted: f64,
|
||||
array: [u8; 4],
|
||||
}
|
||||
|
||||
impl State {
|
||||
fn reset(&mut self) {}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user