diff --git a/src/view/styles/mod.rs b/src/view/styles/mod.rs index 76b3b85..fd70f0b 100644 --- a/src/view/styles/mod.rs +++ b/src/view/styles/mod.rs @@ -1,14 +1,25 @@ use adw::gdk::Display; -use gtk4 as gtk; use gtk::{ - style_context_add_provider_for_display, CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION, + style_context_add_provider_for_display, CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION, Settings }; -pub fn load_css() { +pub fn load_css(settings: &Settings) { let style_provider = CssProvider::new(); - style_provider.load_from_string(include_str!("base.css")); + let theme = settings.gtk_theme_name(); + + match theme { + Some(theme_type) => { + let theme_string = theme_type.to_string(); + if theme_string.contains("dark") || settings.is_gtk_application_prefer_dark_theme() { + style_provider.load_from_string(include_str!("base_dark.css")); + } else { + style_provider.load_from_string(include_str!("base_light.css")); + } + }, + None => eprintln!("Theme hasn't been determined."), + } style_context_add_provider_for_display( &Display::default().expect("Could not connect to a display"), diff --git a/src/view/ui.rs b/src/view/ui.rs index 3ecd818..9d9bc77 100644 --- a/src/view/ui.rs +++ b/src/view/ui.rs @@ -1,7 +1,6 @@ use crate::model::builder_traits::*; use adw::HeaderBar; -use gtk4 as gtk; use gtk::{prelude::*, StackTransitionType::SlideLeftRight, *}; @@ -19,7 +18,14 @@ use crate::view::{ use super::{components::MenuActions, styles::load_css}; pub fn ui(application: &adw::Application) { - load_css(); + + let default_settings = Settings::default(); + + if let Some(settings) = default_settings { + settings.connect_gtk_application_prefer_dark_theme_notify(load_css); + settings.connect_gtk_theme_name_notify(load_css); + load_css(&settings); + } let hamming_code = Box::builder() .orientation(Orientation::Vertical) @@ -30,7 +36,7 @@ pub fn ui(application: &adw::Application) { let info_bar = InfoBar::builder() .set_text_label("Sample text") - .set_button_icon("close") + .set_button_icon("window-close-symbolic") .build(); hamming_code::hamming_code_page(&hamming_code);