From 3c4ccd2504e49944768734e5b21cfe750174a2a9 Mon Sep 17 00:00:00 2001 From: Csaba Date: Thu, 3 Apr 2025 22:26:38 +0200 Subject: [PATCH] feat(bar): changing battery icons This commit is changing the icon on the battery widget based on the current level. level | icon ------------ 100 - 75: discharging 75 - 50: high 50 - 25: medium 25 - 10: low 10 - 0: warning PR: #1398 --- komorebi-bar/src/widgets/battery.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/komorebi-bar/src/widgets/battery.rs b/komorebi-bar/src/widgets/battery.rs index 50e31f06..94976ca1 100644 --- a/komorebi-bar/src/widgets/battery.rs +++ b/komorebi-bar/src/widgets/battery.rs @@ -55,6 +55,10 @@ impl From for Battery { pub enum BatteryState { Charging, Discharging, + High, + Medium, + Low, + Warning, } #[derive(Clone, Debug)] @@ -85,14 +89,22 @@ impl Battery { if let Ok(mut batteries) = self.manager.batteries() { if let Some(Ok(first)) = batteries.nth(0) { - let percentage = first.state_of_charge().get::() as u8; + let percentage = first.state_of_charge().get::().round() as u8; if percentage == 100 && self.hide_on_full_charge { output = None } else { match first.state() { State::Charging => self.state = BatteryState::Charging, - State::Discharging => self.state = BatteryState::Discharging, + State::Discharging => { + self.state = match percentage { + p if p > 75 => BatteryState::Discharging, + p if p > 50 => BatteryState::High, + p if p > 25 => BatteryState::Medium, + p if p > 10 => BatteryState::Low, + _ => BatteryState::Warning, + } + } _ => {} } @@ -129,6 +141,10 @@ impl BarWidget for Battery { let emoji = match self.state { BatteryState::Charging => egui_phosphor::regular::BATTERY_CHARGING, BatteryState::Discharging => egui_phosphor::regular::BATTERY_FULL, + BatteryState::High => egui_phosphor::regular::BATTERY_HIGH, + BatteryState::Medium => egui_phosphor::regular::BATTERY_MEDIUM, + BatteryState::Low => egui_phosphor::regular::BATTERY_LOW, + BatteryState::Warning => egui_phosphor::regular::BATTERY_WARNING, }; let auto_text_color = config.auto_select_text.filter(|_| output.selected);