nmrs_gui/
style.rs

1use gtk::gdk::Display;
2use gtk::gio::File;
3use gtk::{CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION, STYLE_PROVIDER_PRIORITY_USER};
4use std::fs;
5use std::io::Write;
6
7fn load_user_css_if_exists(display: &Display, default: &str) {
8    let path = dirs::config_dir()
9        .unwrap_or_default()
10        .join("nmrs/style.css");
11
12    if path.exists() {
13        let provider = CssProvider::new();
14        let file = File::for_path(&path);
15
16        provider.load_from_file(&file);
17
18        gtk::style_context_add_provider_for_display(
19            display,
20            &provider,
21            STYLE_PROVIDER_PRIORITY_USER,
22        );
23    } else {
24        if let Some(parent) = path.parent() {
25            fs::create_dir_all(parent).ok();
26        }
27
28        let mut f = fs::File::create(&path).expect("Failed to create CSS file");
29        f.write_all(default.as_bytes())
30            .expect("Failed to write default CSS");
31    }
32}
33
34pub fn load_css() {
35    let provider = CssProvider::new();
36
37    let css = include_str!("style.css");
38    provider.load_from_data(css);
39
40    let display = Display::default().expect("No display found");
41
42    gtk::style_context_add_provider_for_display(
43        &display,
44        &provider,
45        STYLE_PROVIDER_PRIORITY_APPLICATION,
46    );
47
48    load_user_css_if_exists(&display, css);
49}