diff options
author | 2021-08-14 21:31:51 +0700 | |
---|---|---|
committer | 2021-08-14 21:31:51 +0700 | |
commit | 1b2e66ec4f856e95d2655d2d41b840deee01080e (patch) | |
tree | 6e537984031d4142de06a4c0f37957d5880ebe60 /examples/integration_wgpu/src/controls.rs | |
parent | 187413b4521bc13e270919b2bc101b83d8397956 (diff) | |
parent | 6da71f90077f1a1261aa522ff38133011dc5ddb5 (diff) | |
download | iced-1b2e66ec4f856e95d2655d2d41b840deee01080e.tar.gz iced-1b2e66ec4f856e95d2655d2d41b840deee01080e.tar.bz2 iced-1b2e66ec4f856e95d2655d2d41b840deee01080e.zip |
Merge pull request #617 from sztomi/integration_gl
Add integration_gl example
Diffstat (limited to 'examples/integration_wgpu/src/controls.rs')
-rw-r--r-- | examples/integration_wgpu/src/controls.rs | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/examples/integration_wgpu/src/controls.rs b/examples/integration_wgpu/src/controls.rs new file mode 100644 index 00000000..36ee9b7e --- /dev/null +++ b/examples/integration_wgpu/src/controls.rs @@ -0,0 +1,110 @@ +use iced_wgpu::Renderer; +use iced_winit::{ + slider, Align, Clipboard, 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; + type Clipboard = Clipboard; + + fn update( + &mut self, + message: Message, + _clipboard: &mut Clipboard, + ) -> 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() + } +} |