trying to make config work
This commit is contained in:
parent
2abbacf66e
commit
670f7a5c70
7 changed files with 187 additions and 58 deletions
115
build.rs
115
build.rs
|
|
@ -1,6 +1,21 @@
|
|||
fn main() {
|
||||
let lib = pkg_config::probe_library("libqalculate").expect("libqalculate not found");
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use quote::quote;
|
||||
use serde::Deserialize;
|
||||
|
||||
fn main() {
|
||||
let lib = probe_libqalculate();
|
||||
build_cxx_bridge(&lib);
|
||||
emit_cargo_metadata();
|
||||
load_config();
|
||||
}
|
||||
|
||||
fn probe_libqalculate() -> pkg_config::Library {
|
||||
pkg_config::probe_library("libqalculate")
|
||||
.expect("libqalculate not found — install it via your package manager")
|
||||
}
|
||||
|
||||
fn build_cxx_bridge(lib: &pkg_config::Library) {
|
||||
cxx_build::bridge("src/update.rs")
|
||||
.file("src/qalc_bridge.cc")
|
||||
.includes(&lib.include_paths)
|
||||
|
|
@ -8,14 +23,96 @@ fn main() {
|
|||
.flag_if_supported("-std=c++17")
|
||||
.compiler("g++")
|
||||
.compile("qalc-bridge");
|
||||
}
|
||||
|
||||
println!(
|
||||
"cargo:rustc-link-search=native={}",
|
||||
std::env::var("OUT_DIR").unwrap()
|
||||
);
|
||||
fn emit_cargo_metadata() {
|
||||
let out_dir = std::env::var("OUT_DIR").unwrap();
|
||||
println!("cargo:rustc-link-search=native={out_dir}");
|
||||
println!("cargo:rustc-link-lib=static=qalc-bridge");
|
||||
|
||||
println!("cargo:rerun-if-changed=src/update.rs");
|
||||
println!("cargo:rerun-if-changed=src/qalc_bridge.cc");
|
||||
println!("cargo:rerun-if-changed=src/qalc_bridge.h");
|
||||
for file in &["src/update.rs", "src/qalc_bridge.cc", "src/qalc_bridge.h"] {
|
||||
println!("cargo:rerun-if-changed={file}");
|
||||
}
|
||||
}
|
||||
|
||||
fn load_config() {
|
||||
println!("cargo:rerun-if-changed=config.toml");
|
||||
|
||||
let config: Config =
|
||||
toml::from_str(&fs::read_to_string(Path::new("./config.toml")).unwrap_or_default())
|
||||
.unwrap_or_default();
|
||||
|
||||
let theme = if !config.enable {
|
||||
quote! {
|
||||
use iced::Theme;
|
||||
use crate::state::State;
|
||||
|
||||
pub const BORDER_RADIUS: f32 = 15.;
|
||||
pub const BORDER_WIDTH: f32 = 2.;
|
||||
pub const PADDING: f32 = 8.;
|
||||
pub const WINDOW_SIZE: (u32, u32) = (400, 400);
|
||||
pub const BG_ALPHA: f32 = 0.75;
|
||||
|
||||
pub fn theme(_state: &State) -> Theme {
|
||||
match dark_light::detect() {
|
||||
Ok(dark_light::Mode::Light) => Theme::Light,
|
||||
_ => Theme::CatppuccinMocha,
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
quote! {
|
||||
use iced::Theme;
|
||||
use crate::state::State;
|
||||
|
||||
pub const BORDER_RADIUS: f32 = #&config.border.radius;
|
||||
pub const BORDER_WIDTH: f32 = #&config.border.width;
|
||||
pub const PADDING: f32 = #&config.border.padding;
|
||||
pub const WINDOW_SIZE: (u32, u32) = (#(&config.window_size.width), #&config.window_size.height);
|
||||
pub const BG_ALPHA: f32 = 0.75;
|
||||
|
||||
pub fn theme(_state: &State) -> Theme {
|
||||
match dark_light::detect() {
|
||||
Ok(dark_light::Mode::Light) => Theme::Light,
|
||||
_ => Theme::CatppuccinMocha,
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let out_dir = std::env::var("OUT_DIR").unwrap();
|
||||
std::fs::write(format!("{out_dir}/theme.rs"), theme.to_string()).unwrap();
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct WindowSize {
|
||||
width: u32,
|
||||
height: u32,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct Border {
|
||||
radius: f32,
|
||||
width: f32,
|
||||
padding: f32,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct Palette {
|
||||
background: String,
|
||||
text: String,
|
||||
primary: String,
|
||||
success: String,
|
||||
warning: String,
|
||||
danger: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct Config {
|
||||
enable: bool,
|
||||
transparency: f32,
|
||||
|
||||
window_size: WindowSize,
|
||||
border: Border,
|
||||
palette: Palette,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue