Merge pull request #2343 from iced-rs/auto-detect-theme
Introduce `auto-detect-theme` feature
This commit is contained in:
commit
2b00e8b145
3 changed files with 34 additions and 3 deletions
|
|
@ -18,7 +18,7 @@ all-features = true
|
||||||
maintenance = { status = "actively-developed" }
|
maintenance = { status = "actively-developed" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["wgpu", "fira-sans"]
|
default = ["wgpu", "fira-sans", "auto-detect-theme"]
|
||||||
# Enable the `wgpu` GPU-accelerated renderer backend
|
# Enable the `wgpu` GPU-accelerated renderer backend
|
||||||
wgpu = ["iced_renderer/wgpu", "iced_widget/wgpu"]
|
wgpu = ["iced_renderer/wgpu", "iced_widget/wgpu"]
|
||||||
# Enables the `Image` widget
|
# Enables the `Image` widget
|
||||||
|
|
@ -53,8 +53,11 @@ multi-window = ["iced_winit/multi-window"]
|
||||||
advanced = []
|
advanced = []
|
||||||
# Enables embedding Fira Sans as the default font on Wasm builds
|
# Enables embedding Fira Sans as the default font on Wasm builds
|
||||||
fira-sans = ["iced_renderer/fira-sans"]
|
fira-sans = ["iced_renderer/fira-sans"]
|
||||||
|
# Enables auto-detecting light/dark mode for the built-in theme
|
||||||
|
auto-detect-theme = ["iced_core/auto-detect-theme"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
iced_core.workspace = true
|
||||||
iced_futures.workspace = true
|
iced_futures.workspace = true
|
||||||
iced_renderer.workspace = true
|
iced_renderer.workspace = true
|
||||||
iced_widget.workspace = true
|
iced_widget.workspace = true
|
||||||
|
|
@ -121,6 +124,7 @@ async-std = "1.0"
|
||||||
bitflags = "2.0"
|
bitflags = "2.0"
|
||||||
bytemuck = { version = "1.0", features = ["derive"] }
|
bytemuck = { version = "1.0", features = ["derive"] }
|
||||||
cosmic-text = "0.10"
|
cosmic-text = "0.10"
|
||||||
|
dark-light = "1.0"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
glam = "0.25"
|
glam = "0.25"
|
||||||
glyphon = "0.5"
|
glyphon = "0.5"
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ homepage.workspace = true
|
||||||
categories.workspace = true
|
categories.workspace = true
|
||||||
keywords.workspace = true
|
keywords.workspace = true
|
||||||
|
|
||||||
|
[features]
|
||||||
|
auto-detect-theme = ["dep:dark-light"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags.workspace = true
|
bitflags.workspace = true
|
||||||
glam.workspace = true
|
glam.workspace = true
|
||||||
|
|
@ -22,6 +25,9 @@ thiserror.workspace = true
|
||||||
web-time.workspace = true
|
web-time.workspace = true
|
||||||
xxhash-rust.workspace = true
|
xxhash-rust.workspace = true
|
||||||
|
|
||||||
|
dark-light.workspace = true
|
||||||
|
dark-light.optional = true
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
raw-window-handle.workspace = true
|
raw-window-handle.workspace = true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,9 @@ use std::fmt;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// A built-in theme.
|
/// A built-in theme.
|
||||||
#[derive(Debug, Clone, PartialEq, Default)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub enum Theme {
|
pub enum Theme {
|
||||||
/// The built-in light variant.
|
/// The built-in light variant.
|
||||||
#[default]
|
|
||||||
Light,
|
Light,
|
||||||
/// The built-in dark variant.
|
/// The built-in dark variant.
|
||||||
Dark,
|
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 {
|
impl fmt::Display for Theme {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue