diff --git a/config.json b/config.json index 058bbab..722e3ee 100644 --- a/config.json +++ b/config.json @@ -39,5 +39,11 @@ } }, "outputMode": "active", - "scale": 1 + "scale": 1, + "background": { + "red": 0, + "green": 0, + "blue": 0, + "opacity": 0.9 + } } \ No newline at end of file diff --git a/src/app.rs b/src/app.rs index 48f92ee..f01c6f9 100644 --- a/src/app.rs +++ b/src/app.rs @@ -203,6 +203,7 @@ pub struct App { event_queue: EventQueue, cmd_queue: Arc>>, widget: Option>, + bg: Color, inner: Arc>, last_damage: Option>, last_dim: (u32, u32), @@ -256,14 +257,13 @@ impl App { force = true; } - let bg = Color::new(0.0, 0.0, 0.0, 0.9); if force { - buf.memset(&bg); + buf.memset(&self.bg); } let report = widget.draw( &mut DrawContext { buf: &mut buf, - bg: &bg, + bg: &self.bg, time: &time, force, }, @@ -337,7 +337,7 @@ impl App { self.redraw(true) } - pub fn new(tx: Sender, output_mode: OutputMode, scale: u32) -> App { + pub fn new(tx: Sender, output_mode: OutputMode, bg: Color, scale: u32) -> App { let inner = Arc::new(Mutex::new(AppInner::new(tx.clone(), output_mode, scale))); // @@ -543,6 +543,7 @@ impl App { cmd_queue: cmd_queue, pools: pools, widget: None, + bg: bg, inner: inner, last_damage: None, last_dim: (0, 0), diff --git a/src/color.rs b/src/color.rs index 762810c..6273370 100644 --- a/src/color.rs +++ b/src/color.rs @@ -1,4 +1,6 @@ -#[derive(Debug, Clone, Copy)] +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)] pub struct Color { red: f32, green: f32, diff --git a/src/config.rs b/src/config.rs index 1da7020..4aacc91 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,7 @@ use crate::cmd::Cmd; use crate::widget; use crate::widgets; +use crate::color::Color; use serde::{Deserialize, Serialize}; use std::default::Default; use std::sync::mpsc::Sender; @@ -149,6 +150,7 @@ pub struct Config { pub widget: Widget, pub output_mode: OutputMode, pub scale: u32, + pub background: Color, } impl Default for Config { @@ -204,6 +206,7 @@ impl Default for Config { }, output_mode: Default::default(), scale: 1, + background: Color::new(0.0, 0.0, 0.0, 0.9), } } } diff --git a/src/main.rs b/src/main.rs index 389e0ed..8216c52 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,6 +107,9 @@ fn main() { config::OutputMode::Active => OutputMode::Active, }; + + let background = config.background; + let (tx_draw, rx_draw) = channel(); let tx_draw_mod = tx_draw.clone(); let (mod_tx, mod_rx) = channel(); @@ -118,7 +121,7 @@ fn main() { } }); - let mut app = App::new(tx_draw, output_mode, scale); + let mut app = App::new(tx_draw, output_mode, background, scale); let widget = mod_rx.recv().unwrap(); app.set_widget(widget).unwrap();