Make Theme::Custom fields opaque
This commit is contained in:
parent
09a531cd44
commit
9966c6f883
2 changed files with 64 additions and 55 deletions
|
|
@ -1,17 +1,23 @@
|
||||||
use iced::theme::Palette;
|
use iced::theme::{self, Theme};
|
||||||
use iced::theme::palette::Extended;
|
|
||||||
use iced::widget::{
|
use iced::widget::{
|
||||||
button, checkbox, column, container, horizontal_rule, progress_bar, radio,
|
button, checkbox, column, container, horizontal_rule, progress_bar, radio,
|
||||||
row, scrollable, slider, text, text_input, toggler, vertical_rule,
|
row, scrollable, slider, text, text_input, toggler, vertical_rule,
|
||||||
vertical_space,
|
vertical_space,
|
||||||
};
|
};
|
||||||
use iced::{Alignment, Element, Length, Sandbox, Settings, Theme, Color};
|
use iced::{Alignment, Color, Element, Length, Sandbox, Settings};
|
||||||
|
|
||||||
pub fn main() -> iced::Result {
|
pub fn main() -> iced::Result {
|
||||||
|
|
||||||
Styling::run(Settings::default())
|
Styling::run(Settings::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
struct Styling {
|
||||||
|
theme: Theme,
|
||||||
|
input_value: String,
|
||||||
|
slider_value: f32,
|
||||||
|
checkbox_value: bool,
|
||||||
|
toggler_value: bool,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||||
enum ThemeType {
|
enum ThemeType {
|
||||||
|
|
@ -20,16 +26,6 @@ enum ThemeType {
|
||||||
Custom,
|
Custom,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
struct Styling {
|
|
||||||
custom_theme: Theme,
|
|
||||||
theme: Theme,
|
|
||||||
input_value: String,
|
|
||||||
slider_value: f32,
|
|
||||||
checkbox_value: bool,
|
|
||||||
toggler_value: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
enum Message {
|
enum Message {
|
||||||
ThemeChanged(ThemeType),
|
ThemeChanged(ThemeType),
|
||||||
|
|
@ -44,21 +40,7 @@ impl Sandbox for Styling {
|
||||||
type Message = Message;
|
type Message = Message;
|
||||||
|
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
let palette = Palette {
|
Styling::default()
|
||||||
background: Color::from_rgb(1.0, 0.9, 1.0),
|
|
||||||
text: Color::BLACK,
|
|
||||||
primary: Color::from_rgb(0.5, 0.5, 0.0),
|
|
||||||
success: Color::from_rgb(0.0, 1.0, 0.0),
|
|
||||||
danger: Color::from_rgb(1.0, 0.0, 0.0),
|
|
||||||
};
|
|
||||||
let extended = Extended::generate(palette);
|
|
||||||
Styling {
|
|
||||||
custom_theme: Theme::Custom {
|
|
||||||
palette: Box::new(palette),
|
|
||||||
extended: Box::new(extended)
|
|
||||||
},
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn title(&self) -> String {
|
fn title(&self) -> String {
|
||||||
|
|
@ -67,11 +49,19 @@ impl Sandbox for Styling {
|
||||||
|
|
||||||
fn update(&mut self, message: Message) {
|
fn update(&mut self, message: Message) {
|
||||||
match message {
|
match message {
|
||||||
Message::ThemeChanged(theme) => self.theme = match theme {
|
Message::ThemeChanged(theme) => {
|
||||||
ThemeType::Light => Theme::Light,
|
self.theme = match theme {
|
||||||
ThemeType::Dark => Theme::Dark,
|
ThemeType::Light => Theme::Light,
|
||||||
ThemeType::Custom => self.custom_theme.clone(),
|
ThemeType::Dark => Theme::Dark,
|
||||||
},
|
ThemeType::Custom => Theme::custom(theme::Palette {
|
||||||
|
background: Color::from_rgb(1.0, 0.9, 1.0),
|
||||||
|
text: Color::BLACK,
|
||||||
|
primary: Color::from_rgb(0.5, 0.5, 0.0),
|
||||||
|
success: Color::from_rgb(0.0, 1.0, 0.0),
|
||||||
|
danger: Color::from_rgb(1.0, 0.0, 0.0),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
Message::InputChanged(value) => self.input_value = value,
|
Message::InputChanged(value) => self.input_value = value,
|
||||||
Message::ButtonPressed => {}
|
Message::ButtonPressed => {}
|
||||||
Message::SliderChanged(value) => self.slider_value = value,
|
Message::SliderChanged(value) => self.slider_value = value,
|
||||||
|
|
@ -81,21 +71,24 @@ impl Sandbox for Styling {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn view(&self) -> Element<Message> {
|
fn view(&self) -> Element<Message> {
|
||||||
let choose_theme = [ThemeType::Light, ThemeType::Dark, ThemeType::Custom].iter().fold(
|
let choose_theme =
|
||||||
column![text("Choose a theme:")].spacing(10),
|
[ThemeType::Light, ThemeType::Dark, ThemeType::Custom]
|
||||||
|column, theme| {
|
.iter()
|
||||||
column.push(radio(
|
.fold(
|
||||||
format!("{:?}", theme),
|
column![text("Choose a theme:")].spacing(10),
|
||||||
*theme,
|
|column, theme| {
|
||||||
Some(match self.theme {
|
column.push(radio(
|
||||||
Theme::Light => ThemeType::Light,
|
format!("{:?}", theme),
|
||||||
Theme::Dark => ThemeType::Dark,
|
*theme,
|
||||||
Theme::Custom { .. } => ThemeType::Custom,
|
Some(match self.theme {
|
||||||
}),
|
Theme::Light => ThemeType::Light,
|
||||||
Message::ThemeChanged,
|
Theme::Dark => ThemeType::Dark,
|
||||||
))
|
Theme::Custom { .. } => ThemeType::Custom,
|
||||||
},
|
}),
|
||||||
);
|
Message::ThemeChanged,
|
||||||
|
))
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let text_input = text_input(
|
let text_input = text_input(
|
||||||
"Type something...",
|
"Type something...",
|
||||||
|
|
|
||||||
|
|
@ -25,18 +25,19 @@ use iced_core::{Background, Color};
|
||||||
pub enum Theme {
|
pub enum Theme {
|
||||||
Light,
|
Light,
|
||||||
Dark,
|
Dark,
|
||||||
Custom {
|
Custom(Custom),
|
||||||
palette: Box<Palette>,
|
|
||||||
extended: Box<Extended>,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Theme {
|
impl Theme {
|
||||||
|
pub fn custom(palette: Palette) -> Self {
|
||||||
|
Self::Custom(Custom::new(palette))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn palette(self) -> Palette {
|
pub fn palette(self) -> Palette {
|
||||||
match self {
|
match self {
|
||||||
Self::Light => Palette::LIGHT,
|
Self::Light => Palette::LIGHT,
|
||||||
Self::Dark => Palette::DARK,
|
Self::Dark => Palette::DARK,
|
||||||
Self::Custom { palette, .. } => *palette
|
Self::Custom(custom) => custom.palette,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,7 +45,7 @@ impl Theme {
|
||||||
match self {
|
match self {
|
||||||
Self::Light => &palette::EXTENDED_LIGHT,
|
Self::Light => &palette::EXTENDED_LIGHT,
|
||||||
Self::Dark => &palette::EXTENDED_DARK,
|
Self::Dark => &palette::EXTENDED_DARK,
|
||||||
Self::Custom { extended, .. } => extended,
|
Self::Custom(custom) => &custom.extended,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -55,6 +56,21 @@ impl Default for Theme {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub struct Custom {
|
||||||
|
palette: Palette,
|
||||||
|
extended: Extended,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Custom {
|
||||||
|
pub fn new(palette: Palette) -> Self {
|
||||||
|
Self {
|
||||||
|
palette,
|
||||||
|
extended: Extended::generate(palette),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub enum Application {
|
pub enum Application {
|
||||||
Default,
|
Default,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue