summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/styling/Cargo.toml1
-rw-r--r--examples/styling/src/main.rs24
-rw-r--r--native/src/widget/helpers.rs2
-rw-r--r--native/src/widget/radio.rs2
-rw-r--r--style/src/theme.rs9
-rw-r--r--style/src/theme/palette.rs8
6 files changed, 39 insertions, 7 deletions
diff --git a/examples/styling/Cargo.toml b/examples/styling/Cargo.toml
index f771708c..344cd0d6 100644
--- a/examples/styling/Cargo.toml
+++ b/examples/styling/Cargo.toml
@@ -7,3 +7,4 @@ publish = false
[dependencies]
iced = { path = "../.." }
+once_cell = "1.14.0" \ No newline at end of file
diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs
index cda53e87..36ab0c0c 100644
--- a/examples/styling/src/main.rs
+++ b/examples/styling/src/main.rs
@@ -1,14 +1,28 @@
+use iced::theme::Palette;
+use iced::theme::palette::Extended;
use iced::widget::{
button, checkbox, column, container, horizontal_rule, progress_bar, radio,
row, scrollable, slider, text, text_input, toggler, vertical_rule,
vertical_space,
};
-use iced::{Alignment, Element, Length, Sandbox, Settings, Theme};
+use iced::{Alignment, Element, Length, Sandbox, Settings, Theme, Color};
+use once_cell::sync::OnceCell;
pub fn main() -> iced::Result {
+ let palette = 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),
+ };
+ let extended = Extended::generate(palette);
+ CUSTOM_THEME.set(Theme::Custom { palette, extended }).unwrap();
Styling::run(Settings::default())
}
+static CUSTOM_THEME: OnceCell<Theme> = OnceCell::new();
+
#[derive(Default)]
struct Styling {
theme: Theme,
@@ -51,11 +65,15 @@ impl Sandbox for Styling {
}
fn view(&self) -> Element<Message> {
- let choose_theme = [Theme::Light, Theme::Dark].iter().fold(
+ let choose_theme = [Theme::Light, Theme::Dark, *CUSTOM_THEME.get().unwrap()].iter().fold(
column![text("Choose a theme:")].spacing(10),
|column, theme| {
column.push(radio(
- format!("{:?}", theme),
+ match theme {
+ Theme::Light => "Light",
+ Theme::Dark => "Dark",
+ Theme::Custom { .. } => "Custom",
+ },
*theme,
Some(self.theme),
Message::ThemeChanged,
diff --git a/native/src/widget/helpers.rs b/native/src/widget/helpers.rs
index 79751878..7dbe8538 100644
--- a/native/src/widget/helpers.rs
+++ b/native/src/widget/helpers.rs
@@ -143,7 +143,7 @@ where
Message: Clone,
Renderer: crate::text::Renderer,
Renderer::Theme: widget::radio::StyleSheet,
- V: Copy + Eq,
+ V: Copy + PartialEq,
{
widget::Radio::new(value, label, selected, on_click)
}
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index cb83f745..204247f8 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -84,7 +84,7 @@ where
f: F,
) -> Self
where
- V: Eq + Copy,
+ V: PartialEq + Copy,
F: FnOnce(V) -> Message,
{
Radio {
diff --git a/style/src/theme.rs b/style/src/theme.rs
index ea538c3a..7d47f1a1 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -1,5 +1,6 @@
pub mod palette;
+use self::palette::Extended;
pub use self::palette::Palette;
use crate::application;
@@ -20,10 +21,14 @@ use crate::toggler;
use iced_core::{Background, Color};
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Theme {
Light,
Dark,
+ Custom {
+ palette: Palette,
+ extended: Extended
+ }
}
impl Theme {
@@ -31,6 +36,7 @@ impl Theme {
match self {
Self::Light => Palette::LIGHT,
Self::Dark => Palette::DARK,
+ Self::Custom { palette, .. } => palette
}
}
@@ -38,6 +44,7 @@ impl Theme {
match self {
Self::Light => &palette::EXTENDED_LIGHT,
Self::Dark => &palette::EXTENDED_DARK,
+ Self::Custom { extended, .. } => extended,
}
}
}
diff --git a/style/src/theme/palette.rs b/style/src/theme/palette.rs
index 4fb5e4c8..b3a10d28 100644
--- a/style/src/theme/palette.rs
+++ b/style/src/theme/palette.rs
@@ -58,6 +58,7 @@ impl Palette {
};
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Extended {
pub background: Background,
pub primary: Primary,
@@ -95,7 +96,7 @@ impl Extended {
}
}
-#[derive(Debug, Clone, Copy)]
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Pair {
pub color: Color,
pub text: Color,
@@ -110,6 +111,7 @@ impl Pair {
}
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Background {
pub base: Pair,
pub weak: Pair,
@@ -129,6 +131,7 @@ impl Background {
}
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Primary {
pub base: Pair,
pub weak: Pair,
@@ -148,6 +151,7 @@ impl Primary {
}
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Secondary {
pub base: Pair,
pub weak: Pair,
@@ -168,6 +172,7 @@ impl Secondary {
}
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Success {
pub base: Pair,
pub weak: Pair,
@@ -187,6 +192,7 @@ impl Success {
}
}
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Danger {
pub base: Pair,
pub weak: Pair,