diff options
| author | 2022-05-26 05:31:55 +0200 | |
|---|---|---|
| committer | 2022-05-26 05:31:55 +0200 | |
| commit | 3e8f4cdd138d3f927ce8a3ea451cbfcca52af0d9 (patch) | |
| tree | 78a16a6f34022c62f2b8f59f975ba66550f94e19 | |
| parent | 5a39dad506a1614fd0ccacb1f56e83acbaf4961a (diff) | |
| download | iced-3e8f4cdd138d3f927ce8a3ea451cbfcca52af0d9.tar.gz iced-3e8f4cdd138d3f927ce8a3ea451cbfcca52af0d9.tar.bz2 iced-3e8f4cdd138d3f927ce8a3ea451cbfcca52af0d9.zip  | |
Add "Theming" section to the `tour` example
Diffstat (limited to '')
| -rw-r--r-- | examples/tour/src/main.rs | 70 | 
1 files changed, 60 insertions, 10 deletions
diff --git a/examples/tour/src/main.rs b/examples/tour/src/main.rs index c7ca8534..155592d5 100644 --- a/examples/tour/src/main.rs +++ b/examples/tour/src/main.rs @@ -7,7 +7,7 @@ use iced::theme;  use iced::{      Button, Checkbox, Color, Column, Container, ContentFit, Element, Image,      Length, Radio, Row, Sandbox, Scrollable, Settings, Slider, Space, Text, -    TextInput, Toggler, +    TextInput, Theme, Toggler,  };  pub fn main() -> iced::Result { @@ -21,6 +21,7 @@ pub struct Tour {      scroll: scrollable::State,      back_button: button::State,      next_button: button::State, +    theme: Theme,      debug: bool,  } @@ -33,6 +34,7 @@ impl Sandbox for Tour {              scroll: scrollable::State::new(),              back_button: button::State::new(),              next_button: button::State::new(), +            theme: Theme::default(),              debug: false,          }      } @@ -50,7 +52,8 @@ impl Sandbox for Tour {                  self.steps.advance();              }              Message::StepMessage(step_msg) => { -                self.steps.update(step_msg, &mut self.debug); +                self.steps +                    .update(step_msg, &mut self.theme, &mut self.debug);              }          }      } @@ -88,7 +91,7 @@ impl Sandbox for Tour {              .max_width(540)              .spacing(20)              .padding(20) -            .push(steps.view(self.debug).map(Message::StepMessage)) +            .push(steps.view(self.theme, self.debug).map(Message::StepMessage))              .push(controls)              .into(); @@ -106,6 +109,10 @@ impl Sandbox for Tour {              .center_y()              .into()      } + +    fn theme(&self) -> Theme { +        self.theme +    }  }  #[derive(Debug, Clone)] @@ -125,6 +132,7 @@ impl Steps {          Steps {              steps: vec![                  Step::Welcome, +                Step::Theming,                  Step::Slider {                      state: slider::State::new(),                      value: 50, @@ -138,7 +146,7 @@ impl Steps {                      size_slider: slider::State::new(),                      size: 30,                      color_sliders: [slider::State::new(); 3], -                    color: Color::BLACK, +                    color: Color::from_rgb(0.5, 0.5, 0.5),                  },                  Step::Radio { selection: None },                  Step::Toggler { @@ -162,12 +170,17 @@ impl Steps {          }      } -    fn update(&mut self, msg: StepMessage, debug: &mut bool) { -        self.steps[self.current].update(msg, debug); +    fn update( +        &mut self, +        msg: StepMessage, +        theme: &mut Theme, +        debug: &mut bool, +    ) { +        self.steps[self.current].update(msg, theme, debug);      } -    fn view(&mut self, debug: bool) -> Element<StepMessage> { -        self.steps[self.current].view(debug) +    fn view(&mut self, theme: Theme, debug: bool) -> Element<StepMessage> { +        self.steps[self.current].view(theme, debug)      }      fn advance(&mut self) { @@ -198,6 +211,7 @@ impl Steps {  enum Step {      Welcome, +    Theming,      Slider {          state: slider::State,          value: u8, @@ -236,6 +250,7 @@ enum Step {  #[derive(Debug, Clone)]  pub enum StepMessage { +    ThemeSelected(Theme),      SliderChanged(u8),      LayoutChanged(Layout),      SpacingChanged(u16), @@ -251,8 +266,16 @@ pub enum StepMessage {  }  impl<'a> Step { -    fn update(&mut self, msg: StepMessage, debug: &mut bool) { +    fn update( +        &mut self, +        msg: StepMessage, +        theme: &mut Theme, +        debug: &mut bool, +    ) {          match msg { +            StepMessage::ThemeSelected(new_theme) => { +                *theme = new_theme; +            }              StepMessage::DebugToggled(value) => {                  if let Step::Debugger = self {                      *debug = value; @@ -319,6 +342,7 @@ impl<'a> Step {      fn title(&self) -> &str {          match self {              Step::Welcome => "Welcome", +            Step::Theming => "Theming",              Step::Radio { .. } => "Radio button",              Step::Toggler { .. } => "Toggler",              Step::Slider { .. } => "Slider", @@ -335,6 +359,7 @@ impl<'a> Step {      fn can_continue(&self) -> bool {          match self {              Step::Welcome => true, +            Step::Theming => true,              Step::Radio { selection } => *selection == Some(Language::Rust),              Step::Toggler { can_continue } => *can_continue,              Step::Slider { .. } => true, @@ -348,9 +373,10 @@ impl<'a> Step {          }      } -    fn view(&mut self, debug: bool) -> Element<StepMessage> { +    fn view(&mut self, theme: Theme, debug: bool) -> Element<StepMessage> {          match self {              Step::Welcome => Self::welcome(), +            Step::Theming => Self::theme(theme),              Step::Radio { selection } => Self::radio(*selection),              Step::Toggler { can_continue } => Self::toggler(*can_continue),              Step::Slider { state, value } => Self::slider(state, *value), @@ -415,6 +441,30 @@ impl<'a> Step {              ))      } +    fn theme(theme: Theme) -> Column<'a, StepMessage> { +        let light_radio = Radio::new( +            Theme::Light, +            "Light", +            Some(theme), +            StepMessage::ThemeSelected, +        ); + +        let dark_radio = Radio::new( +            Theme::Dark, +            "Dark", +            Some(theme), +            StepMessage::ThemeSelected, +        ); + +        Self::container("Theming") +            .push(Text::new( +                "You can easily change the appearance of an application made \ +                with Iced by selecting a different theme!", +            )) +            .push(light_radio) +            .push(dark_radio) +    } +      fn slider(          state: &'a mut slider::State,          value: u8,  | 
