diff --git a/src/colors.rs b/src/colors.rs new file mode 100644 index 0000000..ce8d7c1 --- /dev/null +++ b/src/colors.rs @@ -0,0 +1,15 @@ +use i3monkit::ColorRGB; + +pub const WHITE: ColorRGB = ColorRGB(255, 255, 255); + +pub fn lerp(c1: ColorRGB, c2: ColorRGB, alpha: f32) -> ColorRGB { + ColorRGB( + (c1.0 as f32 * (1. - alpha) + c2.0 as f32 * alpha) as u8, + (c1.1 as f32 * (1. - alpha) + c2.1 as f32 * alpha) as u8, + (c1.2 as f32 * (1. - alpha) + c2.2 as f32 * alpha) as u8, + ) +} + +pub fn to_string(c: ColorRGB) -> String { + format!("#{:02x}{:02x}{:02x}", c.0, c.1, c.2) +} diff --git a/src/lib.rs b/src/lib.rs index 90f89c3..8df0b94 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,3 @@ +pub mod colors; pub mod spark; pub mod widgets; diff --git a/src/widgets/cpu.rs b/src/widgets/cpu.rs index 43bae81..3b39ba8 100644 --- a/src/widgets/cpu.rs +++ b/src/widgets/cpu.rs @@ -4,7 +4,7 @@ use std::io::{BufRead, BufReader, Result}; use i3monkit::{Block, ColorRGB, Widget, WidgetUpdate}; -use crate::spark; +use crate::{colors, spark}; #[derive(Debug)] struct Stat { @@ -20,18 +20,6 @@ pub struct CpuWidget { history: Vec>, } -fn color_lerp(c1: ColorRGB, c2: ColorRGB, alpha: f32) -> ColorRGB { - ColorRGB( - (c1.0 as f32 * (1. - alpha) + c2.0 as f32 * alpha) as u8, - (c1.1 as f32 * (1. - alpha) + c2.1 as f32 * alpha) as u8, - (c1.2 as f32 * (1. - alpha) + c2.2 as f32 * alpha) as u8, - ) -} - -fn color_to_string(c: ColorRGB) -> String { - format!("#{:02x}{:02x}{:02x}", c.0, c.1, c.2) -} - impl CpuWidget { fn read_status() -> Result> { let file = File::open("/proc/stat")?; @@ -92,10 +80,10 @@ impl CpuWidget { .iter() .zip(sg.chars()) .map(|(v, g)| { - let c = color_lerp(ColorRGB::green(), ColorRGB::red(), *v); + let c = colors::lerp(ColorRGB::green(), ColorRGB::red(), *v); format!( r##"{}"##, - color_to_string(c), + colors::to_string(c), g ) }) diff --git a/src/widgets/power.rs b/src/widgets/power.rs index cda7cdb..999ecd5 100644 --- a/src/widgets/power.rs +++ b/src/widgets/power.rs @@ -13,9 +13,11 @@ use std::collections::HashMap; use glob::glob; -use i3monkit::{Block, Widget, WidgetUpdate}; +use i3monkit::{Block, ColorRGB, Widget, WidgetUpdate}; use thiserror::Error; +use crate::colors; + #[derive(Debug, Default)] pub struct PowerSupply {} @@ -71,14 +73,24 @@ impl PowerSupply { } else { BATT_0 }; + + let color = if cap >= 50 { + colors::WHITE + } else if cap >= 25 { + ColorRGB::yellow() + } else { + ColorRGB::red() + }; res.push(format!( - "{} {}: {}", + r##"{} {}: {}% {}"##, values .get("POWER_SUPPLY_MANUFACTURER") .unwrap_or(&"Unknown mfg"), values .get("POWER_SUPPLY_MODEL_NAME") .unwrap_or(&"Unknown model"), + cap, + colors::to_string(color), power, )); }