diff options
author | 2024-03-19 23:58:17 +0100 | |
---|---|---|
committer | 2024-03-20 00:02:46 +0100 | |
commit | 9db6ac8f202ebdc1453edee01da0b30aee0949d8 (patch) | |
tree | 3df829ecf6128115800a8f44c899b1743383c7f1 /core | |
parent | af6bc4643df83c4695f0954aa3fdd258988a77cf (diff) | |
download | iced-9db6ac8f202ebdc1453edee01da0b30aee0949d8.tar.gz iced-9db6ac8f202ebdc1453edee01da0b30aee0949d8.tar.bz2 iced-9db6ac8f202ebdc1453edee01da0b30aee0949d8.zip |
Introduce `auto-detect-theme` feature
Diffstat (limited to 'core')
-rw-r--r-- | core/Cargo.toml | 6 | ||||
-rw-r--r-- | core/src/theme.rs | 25 |
2 files changed, 29 insertions, 2 deletions
diff --git a/core/Cargo.toml b/core/Cargo.toml index c273fcb4..29a95ad7 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -10,6 +10,9 @@ homepage.workspace = true categories.workspace = true keywords.workspace = true +[features] +auto-detect-theme = ["dep:dark-light"] + [dependencies] bitflags.workspace = true glam.workspace = true @@ -22,6 +25,9 @@ thiserror.workspace = true web-time.workspace = true xxhash-rust.workspace = true +dark-light.workspace = true +dark-light.optional = true + [target.'cfg(windows)'.dependencies] raw-window-handle.workspace = true diff --git a/core/src/theme.rs b/core/src/theme.rs index 948aaf83..6b2c04da 100644 --- a/core/src/theme.rs +++ b/core/src/theme.rs @@ -7,10 +7,9 @@ use std::fmt; use std::sync::Arc; /// A built-in theme. -#[derive(Debug, Clone, PartialEq, Default)] +#[derive(Debug, Clone, PartialEq)] pub enum Theme { /// The built-in light variant. - #[default] Light, /// The built-in dark variant. Dark, @@ -161,6 +160,28 @@ impl Theme { } } +impl Default for Theme { + fn default() -> Self { + #[cfg(feature = "auto-detect-theme")] + { + use once_cell::sync::Lazy; + + static DEFAULT: Lazy<Theme> = + Lazy::new(|| match dark_light::detect() { + dark_light::Mode::Dark => Theme::Dark, + dark_light::Mode::Light | dark_light::Mode::Default => { + Theme::Light + } + }); + + DEFAULT.clone() + } + + #[cfg(not(feature = "auto-detect-theme"))] + Theme::Light + } +} + impl fmt::Display for Theme { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { |