use iced_glow::Renderer; use iced_glutin::widget::Slider; use iced_glutin::widget::{Column, Row, Text}; use iced_glutin::{Alignment, Color, Command, Element, Length, Program}; pub struct Controls { background_color: Color, } #[derive(Debug, Clone)] pub enum Message { BackgroundColorChanged(Color), } impl Controls { pub fn new() -> Controls { Controls { background_color: Color::BLACK, } } pub fn background_color(&self) -> Color { self.background_color } } impl Program for Controls { type Renderer = Renderer; type Message = Message; fn update(&mut self, message: Message) -> Command { match message { Message::BackgroundColorChanged(color) => { self.background_color = color; } } Command::none() } fn view(&self) -> Element { let background_color = self.background_color; let sliders = Row::new() .width(500) .spacing(20) .push( Slider::new(0.0..=1.0, background_color.r, move |r| { Message::BackgroundColorChanged(Color { r, ..background_color }) }) .step(0.01), ) .push( Slider::new(0.0..=1.0, background_color.g, move |g| { Message::BackgroundColorChanged(Color { g, ..background_color }) }) .step(0.01), ) .push( Slider::new(0.0..=1.0, background_color.b, move |b| { Message::BackgroundColorChanged(Color { b, ..background_color }) }) .step(0.01), ); Row::new() .width(Length::Fill) .height(Length::Fill) .align_items(Alignment::End) .push( Column::new() .width(Length::Fill) .align_items(Alignment::End) .push( Column::new() .padding(10) .spacing(10) .push( Text::new("Background color") .style(Color::WHITE), ) .push(sliders) .push( Text::new(format!("{background_color:?}")) .size(14) .style(Color::WHITE), ), ), ) .into() } }