feat: theme management (#46)

This commit is contained in:
Ashley Wulber 2023-06-12 11:49:22 -04:00 committed by GitHub
parent ddc176ea89
commit 9e299db491
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 39 deletions

72
Cargo.lock generated
View file

@ -731,7 +731,7 @@ dependencies = [
[[package]]
name = "cosmic-config"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"atomicwrites",
"calloop",
@ -746,7 +746,7 @@ dependencies = [
[[package]]
name = "cosmic-config-derive"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"quote",
"syn 1.0.109",
@ -874,7 +874,7 @@ dependencies = [
[[package]]
name = "cosmic-theme"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"anyhow",
"cosmic-config",
@ -2123,7 +2123,7 @@ dependencies = [
[[package]]
name = "iced"
version = "0.9.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_accessibility",
"iced_core",
@ -2139,7 +2139,7 @@ dependencies = [
[[package]]
name = "iced_accessibility"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"accesskit",
"accesskit_unix",
@ -2148,7 +2148,7 @@ dependencies = [
[[package]]
name = "iced_core"
version = "0.9.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"bitflags 1.3.2",
"iced_accessibility",
@ -2163,7 +2163,7 @@ dependencies = [
[[package]]
name = "iced_futures"
version = "0.6.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"futures",
"iced_core",
@ -2176,7 +2176,7 @@ dependencies = [
[[package]]
name = "iced_graphics"
version = "0.8.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
@ -2193,7 +2193,7 @@ dependencies = [
[[package]]
name = "iced_renderer"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_graphics",
"iced_tiny_skia",
@ -2205,7 +2205,7 @@ dependencies = [
[[package]]
name = "iced_runtime"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_accessibility",
"iced_core",
@ -2217,7 +2217,7 @@ dependencies = [
[[package]]
name = "iced_sctk"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"enum-repr",
"float-cmp",
@ -2238,7 +2238,7 @@ dependencies = [
[[package]]
name = "iced_style"
version = "0.8.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_core",
"once_cell",
@ -2248,7 +2248,7 @@ dependencies = [
[[package]]
name = "iced_tiny_skia"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"bytemuck",
"cosmic-text",
@ -2266,7 +2266,7 @@ dependencies = [
[[package]]
name = "iced_wgpu"
version = "0.10.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
@ -2288,7 +2288,7 @@ dependencies = [
[[package]]
name = "iced_widget"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_renderer",
"iced_runtime",
@ -2303,7 +2303,7 @@ dependencies = [
[[package]]
name = "iced_winit"
version = "0.9.1"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"iced_graphics",
"iced_runtime",
@ -2617,7 +2617,7 @@ checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
[[package]]
name = "libcosmic"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#31d7c75098a9ea4857bc16321306aa40ed14eac2"
source = "git+https://github.com/pop-os/libcosmic#6699aa475646fd044b5233dc918e3b0e3604c8ed"
dependencies = [
"apply",
"cosmic-config",
@ -2703,9 +2703,9 @@ dependencies = [
[[package]]
name = "log"
version = "0.4.18"
version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
[[package]]
name = "lru"
@ -3438,9 +3438,9 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "png"
version = "0.17.8"
version = "0.17.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
@ -3507,9 +3507,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.59"
version = "1.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
dependencies = [
"unicode-ident",
]
@ -3771,9 +3771,9 @@ dependencies = [
[[package]]
name = "rust-embed"
version = "6.6.1"
version = "6.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b68543d5527e158213414a92832d2aab11a84d2571a5eb021ebe22c43aab066"
checksum = "b73e721f488c353141288f223b599b4ae9303ecf3e62923f40a492f0634a4dc3"
dependencies = [
"rust-embed-impl",
"rust-embed-utils",
@ -3782,14 +3782,14 @@ dependencies = [
[[package]]
name = "rust-embed-impl"
version = "6.5.0"
version = "6.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d4e0f0ced47ded9a68374ac145edd65a6c1fa13a96447b873660b2a568a0fd7"
checksum = "e22ce362f5561923889196595504317a4372b84210e6e335da529a65ea5452b5"
dependencies = [
"proc-macro2",
"quote",
"rust-embed-utils",
"syn 1.0.109",
"syn 2.0.18",
"walkdir",
]
@ -3827,9 +3827,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustix"
version = "0.37.19"
version = "0.37.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
dependencies = [
"bitflags 1.3.2",
"errno",
@ -3912,18 +3912,18 @@ checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
[[package]]
name = "serde"
version = "1.0.163"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.163"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
dependencies = [
"proc-macro2",
"quote",
@ -4290,9 +4290,9 @@ dependencies = [
[[package]]
name = "sysinfo"
version = "0.29.1"
version = "0.29.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c72130613601f6aad275f8bb9a1d4bf953df8e9c7891029f30e5fdc405ad07c4"
checksum = "9557d0845b86eea8182f7b10dff120214fb6cd9fd937b6f4917714e546a38695"
dependencies = [
"cfg-if",
"core-foundation-sys",

View file

@ -7,7 +7,8 @@ use cosmic_panel_config::CosmicPanelConfig;
use cosmic_settings_page::{self as page, section};
use cosmic::{
cosmic_config::config_subscription,
cosmic_config::{config_subscription, CosmicConfigEntry},
cosmic_theme::util::CssColor,
iced::{
self,
event::wayland::{self, WindowEvent, WindowState},
@ -28,6 +29,7 @@ use cosmic::{
},
Element, ElementExt,
};
use tracing::error;
use crate::{
config::Config,
@ -45,7 +47,7 @@ use crate::{
widget::{page_title, parent_page_button, search_header, sub_page_button},
};
use std::{borrow::Cow, process};
use std::{borrow::Cow, process, sync::Arc};
#[allow(clippy::struct_excessive_bools)]
#[allow(clippy::module_name_repetitions)]
@ -88,6 +90,7 @@ pub enum Message {
WindowState(WindowState),
PanelConfig(CosmicPanelConfig),
DesktopInfo,
ThemeChanged(Theme),
}
impl Application for SettingsApp {
@ -116,8 +119,8 @@ impl Application for SettingsApp {
search_selections: Vec::default(),
show_maximize: true,
show_minimize: true,
theme: Theme::dark(),
window_width: 0,
theme: theme(),
};
// app.insert_page::<wifi::Page>();
@ -199,6 +202,23 @@ impl Application for SettingsApp {
}
},
),
config_subscription::<u64, cosmic::cosmic_theme::Theme<CssColor>>(
0,
cosmic::cosmic_theme::NAME.into(),
cosmic::cosmic_theme::Theme::<CssColor>::version() as u64,
)
.map(|(_, res)| {
let theme = res.map_or_else(
|(errors, theme)| {
for err in errors {
error!("{:?}", err);
}
theme.into_srgba()
},
cosmic::cosmic_theme::Theme::into_srgba,
);
Message::ThemeChanged(cosmic::theme::Theme::custom(Arc::new(theme)))
}),
])
}
@ -313,6 +333,9 @@ impl Application for SettingsApp {
));
}
}
Message::ThemeChanged(theme) => {
self.theme = theme;
}
}
ret
}
@ -602,3 +625,22 @@ impl SettingsApp {
.map(Message::Page)
}
}
fn theme() -> Theme {
let Ok(helper) = cosmic::cosmic_config::Config::new(
cosmic::cosmic_theme::NAME,
cosmic::cosmic_theme::Theme::<CssColor>::version() as u64,
) else {
return cosmic::theme::Theme::dark();
};
let t = cosmic::cosmic_theme::Theme::get_entry(&helper).map_or_else(
|(errors, theme)| {
for err in errors {
tracing::error!("{:?}", err);
}
theme.into_srgba()
},
cosmic::cosmic_theme::Theme::into_srgba,
);
cosmic::theme::Theme::custom(Arc::new(t))
}