1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
use iced_wgpu::Renderer; use iced_winit::{ slider, Align, Color, Column, Command, Element, Length, Program, Row, Slider, Text, }; pub struct Controls { background_color: Color, sliders: [slider::State; 3], } #[derive(Debug, Clone)] pub enum Message { BackgroundColorChanged(Color), } impl Controls { pub fn new() -> Controls { Controls { background_color: Color::BLACK, sliders: Default::default(), } } 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<Message> { match message { Message::BackgroundColorChanged(color) => { self.background_color = color; } } Command::none() } fn view(&mut self) -> Element<Message, Renderer> { let [r, g, b] = &mut self.sliders; let background_color = self.background_color; let sliders = Row::new() .width(Length::Units(500)) .spacing(20) .push( Slider::new(r, 0.0..=1.0, background_color.r, move |r| { Message::BackgroundColorChanged(Color { r, ..background_color }) }) .step(0.01), ) .push( Slider::new(g, 0.0..=1.0, background_color.g, move |g| { Message::BackgroundColorChanged(Color { g, ..background_color }) }) .step(0.01), ) .push( Slider::new(b, 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(Align::End) .push( Column::new() .width(Length::Fill) .align_items(Align::End) .push( Column::new() .padding(10) .spacing(10) .push( Text::new("Background color") .color(Color::WHITE), ) .push(sliders) .push( Text::new(format!("{:?}", background_color)) .size(14) .color(Color::WHITE), ), ), ) .into() } }