cushy/examples/slider.rs
Jonathan Johnson 4a4bc5de1a
Added slidable enum demo
Also moved into_button to MakeWidget
2023-11-14 11:44:32 -08:00

67 lines
1.8 KiB
Rust

use gooey::animation::{LinearInterpolate, PercentBetween};
use gooey::value::{Dynamic, StringValue};
use gooey::widget::MakeWidget;
use gooey::widgets::slider::Slidable;
use gooey::Run;
use kludgine::figures::units::Lp;
use kludgine::figures::Ranged;
fn main() -> gooey::Result {
u8_slider()
.and(enum_slider())
.into_rows()
.expand_horizontally()
.width(..Lp::points(800))
.centered()
.expand()
.run()
}
fn u8_slider() -> impl MakeWidget {
let min_text = Dynamic::new(u8::MIN.to_string());
let min = min_text.map_each(|min| min.parse().unwrap_or(u8::MIN));
let max_text = Dynamic::new(u8::MAX.to_string());
let max = max_text.map_each(|max| max.parse().unwrap_or(u8::MAX));
let value = Dynamic::new(128_u8);
let value_text = value.map_each(ToString::to_string);
"Min"
.and(min_text.into_input())
.and("Max")
.and(max_text.into_input())
.into_columns()
.centered()
.and(value.slider_between(min, max))
.and(value_text.centered())
.into_rows()
}
#[derive(LinearInterpolate, Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)]
enum SlidableEnum {
A,
B,
C,
}
impl PercentBetween for SlidableEnum {
fn percent_between(&self, min: &Self, max: &Self) -> gooey::animation::ZeroToOne {
let min = *min as u8;
let max = *max as u8;
let value = *self as u8;
value.percent_between(&min, &max)
}
}
impl Ranged for SlidableEnum {
const MAX: Self = Self::C;
const MIN: Self = Self::A;
}
fn enum_slider() -> impl MakeWidget {
let enum_value = Dynamic::new(SlidableEnum::A);
let enum_text = enum_value.map_each(|value| format!("{value:?}"));
"Custom Enum"
.and(enum_value.slider())
.and(enum_text)
.into_rows()
}