diff --git a/src/modules/volume.rs b/src/modules/volume.rs index f11fa60..c9b6ef9 100644 --- a/src/modules/volume.rs +++ b/src/modules/volume.rs @@ -1,6 +1,7 @@ use crate::clients::volume::{self, Event}; use crate::config::CommonConfig; use crate::gtk_helpers::IronbarGtkExt; +use crate::image::ImageProvider; use crate::modules::{ Module, ModuleInfo, ModuleParts, ModulePopup, ModuleUpdateEvent, PopupButton, WidgetContext, }; @@ -8,81 +9,32 @@ use crate::{glib_recv, lock, module_impl, send_async, spawn, try_send}; use glib::Propagation; use gtk::pango::EllipsizeMode; use gtk::prelude::*; -use gtk::{Button, CellRendererText, ComboBoxText, Label, Orientation, Scale, ToggleButton}; +use gtk::{ + Box as GtkBox, Button, CellRendererText, ComboBoxText, Image, Label, Orientation, Scale, + ToggleButton, +}; use serde::Deserialize; use std::collections::HashMap; use tokio::sync::mpsc; #[derive(Debug, Clone, Deserialize)] pub struct VolumeModule { - #[serde(default = "default_format")] - format: String, - #[serde(default = "default_max_volume")] max_volume: f64, - #[serde(default)] - icons: Icons, + #[serde(default = "default_icon_size")] + icon_size: i32, #[serde(flatten)] pub common: Option, } -fn default_format() -> String { - String::from("{icon} {percentage}%") -} - -#[derive(Debug, Clone, Deserialize)] -pub struct Icons { - #[serde(default = "default_icon_volume_high")] - volume_high: String, - #[serde(default = "default_icon_volume_medium")] - volume_medium: String, - #[serde(default = "default_icon_volume_low")] - volume_low: String, - #[serde(default = "default_icon_muted")] - muted: String, -} - -impl Icons { - fn volume_icon(&self, volume_percent: f64) -> &str { - match volume_percent as u32 { - 0..=33 => &self.volume_low, - 34..=66 => &self.volume_medium, - 67.. => &self.volume_high, - } - } -} - -impl Default for Icons { - fn default() -> Self { - Self { - volume_high: default_icon_volume_high(), - volume_medium: default_icon_volume_medium(), - volume_low: default_icon_volume_low(), - muted: default_icon_muted(), - } - } -} - const fn default_max_volume() -> f64 { 100.0 } -fn default_icon_volume_high() -> String { - String::from("󰕾") -} - -fn default_icon_volume_medium() -> String { - String::from("󰖀") -} - -fn default_icon_volume_low() -> String { - String::from("󰕿") -} - -fn default_icon_muted() -> String { - String::from("󰝟") +const fn default_icon_size() -> i32 { + 24 } #[derive(Debug, Clone)] @@ -185,22 +137,23 @@ impl Module