Use generic Slider in tour example
This commit is contained in:
parent
c71d83fe0e
commit
4aed3ede92
1 changed files with 37 additions and 40 deletions
|
|
@ -190,7 +190,7 @@ enum Step {
|
||||||
Welcome,
|
Welcome,
|
||||||
Slider {
|
Slider {
|
||||||
state: slider::State,
|
state: slider::State,
|
||||||
value: u16,
|
value: u8,
|
||||||
},
|
},
|
||||||
RowsAndColumns {
|
RowsAndColumns {
|
||||||
layout: Layout,
|
layout: Layout,
|
||||||
|
|
@ -222,13 +222,13 @@ enum Step {
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum StepMessage {
|
pub enum StepMessage {
|
||||||
SliderChanged(f32),
|
SliderChanged(u8),
|
||||||
LayoutChanged(Layout),
|
LayoutChanged(Layout),
|
||||||
SpacingChanged(f32),
|
SpacingChanged(u16),
|
||||||
TextSizeChanged(f32),
|
TextSizeChanged(u16),
|
||||||
TextColorChanged(Color),
|
TextColorChanged(Color),
|
||||||
LanguageSelected(Language),
|
LanguageSelected(Language),
|
||||||
ImageWidthChanged(f32),
|
ImageWidthChanged(u16),
|
||||||
InputChanged(String),
|
InputChanged(String),
|
||||||
ToggleSecureInput(bool),
|
ToggleSecureInput(bool),
|
||||||
DebugToggled(bool),
|
DebugToggled(bool),
|
||||||
|
|
@ -249,12 +249,12 @@ impl<'a> Step {
|
||||||
}
|
}
|
||||||
StepMessage::SliderChanged(new_value) => {
|
StepMessage::SliderChanged(new_value) => {
|
||||||
if let Step::Slider { value, .. } = self {
|
if let Step::Slider { value, .. } = self {
|
||||||
*value = new_value.round() as u16;
|
*value = new_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StepMessage::TextSizeChanged(new_size) => {
|
StepMessage::TextSizeChanged(new_size) => {
|
||||||
if let Step::Text { size, .. } = self {
|
if let Step::Text { size, .. } = self {
|
||||||
*size = new_size.round() as u16;
|
*size = new_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StepMessage::TextColorChanged(new_color) => {
|
StepMessage::TextColorChanged(new_color) => {
|
||||||
|
|
@ -269,12 +269,12 @@ impl<'a> Step {
|
||||||
}
|
}
|
||||||
StepMessage::SpacingChanged(new_spacing) => {
|
StepMessage::SpacingChanged(new_spacing) => {
|
||||||
if let Step::RowsAndColumns { spacing, .. } = self {
|
if let Step::RowsAndColumns { spacing, .. } = self {
|
||||||
*spacing = new_spacing.round() as u16;
|
*spacing = new_spacing;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StepMessage::ImageWidthChanged(new_width) => {
|
StepMessage::ImageWidthChanged(new_width) => {
|
||||||
if let Step::Image { width, .. } = self {
|
if let Step::Image { width, .. } = self {
|
||||||
*width = new_width.round() as u16;
|
*width = new_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StepMessage::InputChanged(new_value) => {
|
StepMessage::InputChanged(new_value) => {
|
||||||
|
|
@ -384,7 +384,7 @@ impl<'a> Step {
|
||||||
|
|
||||||
fn slider(
|
fn slider(
|
||||||
state: &'a mut slider::State,
|
state: &'a mut slider::State,
|
||||||
value: u16,
|
value: u8,
|
||||||
) -> Column<'a, StepMessage> {
|
) -> Column<'a, StepMessage> {
|
||||||
Self::container("Slider")
|
Self::container("Slider")
|
||||||
.push(Text::new(
|
.push(Text::new(
|
||||||
|
|
@ -397,8 +397,8 @@ impl<'a> Step {
|
||||||
))
|
))
|
||||||
.push(Slider::new(
|
.push(Slider::new(
|
||||||
state,
|
state,
|
||||||
0.0..=100.0,
|
0..=100,
|
||||||
value as f32,
|
value,
|
||||||
StepMessage::SliderChanged,
|
StepMessage::SliderChanged,
|
||||||
))
|
))
|
||||||
.push(
|
.push(
|
||||||
|
|
@ -444,8 +444,8 @@ impl<'a> Step {
|
||||||
.spacing(10)
|
.spacing(10)
|
||||||
.push(Slider::new(
|
.push(Slider::new(
|
||||||
spacing_slider,
|
spacing_slider,
|
||||||
0.0..=80.0,
|
0..=80,
|
||||||
spacing as f32,
|
spacing,
|
||||||
StepMessage::SpacingChanged,
|
StepMessage::SpacingChanged,
|
||||||
))
|
))
|
||||||
.push(
|
.push(
|
||||||
|
|
@ -486,39 +486,25 @@ impl<'a> Step {
|
||||||
)
|
)
|
||||||
.push(Slider::new(
|
.push(Slider::new(
|
||||||
size_slider,
|
size_slider,
|
||||||
10.0..=70.0,
|
10..=70,
|
||||||
size as f32,
|
size,
|
||||||
StepMessage::TextSizeChanged,
|
StepMessage::TextSizeChanged,
|
||||||
));
|
));
|
||||||
|
|
||||||
let [red, green, blue] = color_sliders;
|
let [red, green, blue] = color_sliders;
|
||||||
|
|
||||||
|
let color_sliders = Row::new()
|
||||||
|
.spacing(10)
|
||||||
|
.push(color_slider(red, color.r, move |r| Color { r, ..color }))
|
||||||
|
.push(color_slider(green, color.g, move |g| Color { g, ..color }))
|
||||||
|
.push(color_slider(blue, color.b, move |b| Color { b, ..color }));
|
||||||
|
|
||||||
let color_section = Column::new()
|
let color_section = Column::new()
|
||||||
.padding(20)
|
.padding(20)
|
||||||
.spacing(20)
|
.spacing(20)
|
||||||
.push(Text::new("And its color:"))
|
.push(Text::new("And its color:"))
|
||||||
.push(Text::new(&format!("{:?}", color)).color(color))
|
.push(Text::new(&format!("{:?}", color)).color(color))
|
||||||
.push(
|
.push(color_sliders);
|
||||||
Row::new()
|
|
||||||
.spacing(10)
|
|
||||||
.push(
|
|
||||||
Slider::new(red, 0.0..=1.0, color.r, move |r| {
|
|
||||||
StepMessage::TextColorChanged(Color { r, ..color })
|
|
||||||
})
|
|
||||||
.step(0.01),
|
|
||||||
)
|
|
||||||
.push(
|
|
||||||
Slider::new(green, 0.0..=1.0, color.g, move |g| {
|
|
||||||
StepMessage::TextColorChanged(Color { g, ..color })
|
|
||||||
})
|
|
||||||
.step(0.01),
|
|
||||||
)
|
|
||||||
.push(
|
|
||||||
Slider::new(blue, 0.0..=1.0, color.b, move |b| {
|
|
||||||
StepMessage::TextColorChanged(Color { b, ..color })
|
|
||||||
})
|
|
||||||
.step(0.01),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
Self::container("Text")
|
Self::container("Text")
|
||||||
.push(Text::new(
|
.push(Text::new(
|
||||||
|
|
@ -568,8 +554,8 @@ impl<'a> Step {
|
||||||
.push(ferris(width))
|
.push(ferris(width))
|
||||||
.push(Slider::new(
|
.push(Slider::new(
|
||||||
slider,
|
slider,
|
||||||
100.0..=500.0,
|
100..=500,
|
||||||
width as f32,
|
width,
|
||||||
StepMessage::ImageWidthChanged,
|
StepMessage::ImageWidthChanged,
|
||||||
))
|
))
|
||||||
.push(
|
.push(
|
||||||
|
|
@ -715,6 +701,17 @@ fn button<'a, Message>(
|
||||||
.min_width(100)
|
.min_width(100)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn color_slider(
|
||||||
|
state: &mut slider::State,
|
||||||
|
component: f32,
|
||||||
|
update: impl Fn(f32) -> Color + 'static,
|
||||||
|
) -> Slider<f64, StepMessage> {
|
||||||
|
Slider::new(state, 0.0..=1.0, f64::from(component), move |c| {
|
||||||
|
StepMessage::TextColorChanged(update(c as f32))
|
||||||
|
})
|
||||||
|
.step(0.01)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub enum Language {
|
pub enum Language {
|
||||||
Rust,
|
Rust,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue