diff --git a/src/app/command.rs b/src/app/command.rs index ff51a7d3..9daa9ca9 100644 --- a/src/app/command.rs +++ b/src/app/command.rs @@ -92,3 +92,14 @@ impl crate::app::Core { pub fn set_theme(theme: crate::Theme) -> iced::Task> { message::cosmic(super::cosmic::Message::AppThemeChange(theme)) } + +pub fn set_transparent( + theme: cosmic_theme::Theme, + alpha: f32, +) -> iced::Task> { + message::cosmic(super::cosmic::Message::EnableTransparency(theme, alpha)) +} + +pub fn enable_blur() -> iced::Task> { + message::cosmic(super::cosmic::Message::EnableBlur) +} diff --git a/src/app/cosmic.rs b/src/app/cosmic.rs index a2b229e6..e1ba9a75 100644 --- a/src/app/cosmic.rs +++ b/src/app/cosmic.rs @@ -25,6 +25,10 @@ use palette::color_difference::EuclideanDistance; pub enum Message { /// Application requests theme change. AppThemeChange(Theme), + /// Enables blur support. + EnableBlur, + /// Enables transparency. + EnableTransparency(cosmic_theme::Theme, f32), /// Requests to close the window. Close, /// Closes or shows the context drawer. @@ -429,7 +433,17 @@ impl Cosmic { THEME.lock().unwrap().set_theme(theme.theme_type); } - + Message::EnableBlur => { + if let Some(id) = self.app.core().main_window_id() { + return Task::batch(vec![iced::runtime::window::enable_blur(id)]); + } + } + Message::EnableTransparency(mut theme, alpha) => { + theme.background.base.alpha *= alpha; + return self.cosmic_update(Message::AppThemeChange(crate::Theme::custom( + std::sync::Arc::new(theme), + ))); + } Message::SystemThemeChange(keys, theme) => { let cur_is_dark = THEME.lock().unwrap().theme_type.is_dark(); // Ignore updates if the current theme mode does not match.