From 51f1ca6a38b9a79bd5a6c83a61d08c5f23a79617 Mon Sep 17 00:00:00 2001 From: Hue Date: Sun, 9 Aug 2026 14:23:14 +0200 Subject: [PATCH] =?UTF-8?q?panel=C2=A0:=20mixer=C2=A0:=20use=20microphone?= =?UTF-8?q?=20icons=20for=20input=20devices?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/panel/widgets/mixer/mixer-control.cpp | 22 +++++++++++++--------- src/panel/widgets/mixer/mixer-control.hpp | 10 +++++++--- src/panel/widgets/mixer/mixer.cpp | 13 ++----------- src/panel/widgets/mixer/wp-common.cpp | 2 +- src/util/icon-select.hpp | 11 +++++++++++ 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/panel/widgets/mixer/mixer-control.cpp b/src/panel/widgets/mixer/mixer-control.cpp index 811d49459..2af5be4c1 100644 --- a/src/panel/widgets/mixer/mixer-control.cpp +++ b/src/panel/widgets/mixer/mixer-control.cpp @@ -2,14 +2,13 @@ #include #include "mixer-control.hpp" -#include "icon-select.hpp" -#define ICON(volume) icon_from_range(volume_icons, volume) - -MixerControl::MixerControl(WpPipewireObject *obj, WayfireMixer *parent_widget) +MixerControl::MixerControl(WpPipewireObject *obj, WayfireMixer *parent_widget, const std::map> _icon_set) { - object = obj; - parent = parent_widget; + object = obj; + parent = parent_widget; + icon_set = _icon_set; } MixerControl::~MixerControl() @@ -145,12 +144,17 @@ void MixerControl::update_icon() if (button.get_active()) { add_css_class("muted"); - volume_icon.set_from_icon_name(ICON(0)); // mute + volume_icon.set_from_icon_name(icon_from_range(icon_set, 0)); // mute return; } remove_css_class("muted"); - volume_icon.set_from_icon_name(ICON(get_scale_target_value())); + volume_icon.set_from_icon_name(icon_from_range(icon_set, get_scale_target_value())); +} + +std::string MixerControl::get_icon_name() +{ + return volume_icon.get_icon_name(); } double MixerControl::get_scale_target_value() @@ -214,7 +218,7 @@ void MixerControl::handle_config_reload() // used to make a copy to the face of the widget std::unique_ptr MixerControl::copy() { - return std::make_unique(object, parent); + return std::make_unique(object, parent, icon_set); } MixerControlDevice::~MixerControlDevice() diff --git a/src/panel/widgets/mixer/mixer-control.hpp b/src/panel/widgets/mixer/mixer-control.hpp index a1e9b4d22..577112f5f 100644 --- a/src/panel/widgets/mixer/mixer-control.hpp +++ b/src/panel/widgets/mixer/mixer-control.hpp @@ -1,10 +1,10 @@ #pragma once #include -#include #include "mixer.hpp" #include "animated-scale.hpp" +#include "icon-select.hpp" class WayfireMixer; @@ -22,10 +22,12 @@ class MixerControl : public Gtk::Grid std::vector signals; void update_gestures(); virtual void update_icons_pos(); + std::map> icon_set; WfOption slider_length{"panel/mixer_slider_length"}; public: - MixerControl(WpPipewireObject *obj, WayfireMixer *parent_widget); + MixerControl(WpPipewireObject *obj, WayfireMixer *parent_widget, const std::map> icon_set = volume_icons); ~MixerControl(); virtual void init(); @@ -36,6 +38,7 @@ class MixerControl : public Gtk::Grid void set_scale_target_value(double volume); double get_scale_target_value(); void update_icon(); + std::string get_icon_name(); // used to mark the control as the source of changes and stop useless/counterproductive updates bool ignore = false; // set when volume changes because of it to ignore refresh of ui @@ -57,7 +60,8 @@ class MixerControlDevice : public MixerControl void update_icons_pos(); public: - MixerControlDevice(WpPipewireObject *obj, WayfireMixer *parent_widget) : MixerControl(obj, parent_widget) + MixerControlDevice(WpPipewireObject *obj, WayfireMixer *parent_widget, const std::map> icon_set = volume_icons) : MixerControl(obj, parent_widget, icon_set) {} ~MixerControlDevice(); void init(); diff --git a/src/panel/widgets/mixer/mixer.cpp b/src/panel/widgets/mixer/mixer.cpp index 7528448a9..9242a604b 100644 --- a/src/panel/widgets/mixer/mixer.cpp +++ b/src/panel/widgets/mixer/mixer.cpp @@ -6,9 +6,6 @@ #include "mixer-control.hpp" #include "icon-select.hpp" -#define ICON(volume) icon_from_range(volume_icons, volume) - - void WayfireMixer::reload_config() { // adjust margins and spacing @@ -281,17 +278,11 @@ void WayfireMixer::update_icon() // depends on quick_target widget if (!quick_target) { - main_image.set_from_icon_name(ICON(-1)); // OOR - return; - } - - if (quick_target->button.get_active()) - { - main_image.set_from_icon_name(ICON(0)); // mute + main_image.set_from_icon_name(icon_from_range(volume_icons, -1)); // OOR return; } - main_image.set_from_icon_name(ICON(quick_target->get_scale_target_value())); + main_image.set_from_icon_name(quick_target->get_icon_name()); } void WayfireMixer::set_quick_target_from(MixerControl *from) diff --git a/src/panel/widgets/mixer/wp-common.cpp b/src/panel/widgets/mixer/wp-common.cpp index b3a994798..1dbee776e 100644 --- a/src/panel/widgets/mixer/wp-common.cpp +++ b/src/panel/widgets/mixer/wp-common.cpp @@ -148,7 +148,7 @@ void WpCommon::add_object_to_widget(WpPipewireObject *object, WayfireMixer *widg } else if (type == "Audio/Source") { which_box = &(widget->sources_box); - control = new MixerControlDevice(object, widget); + control = new MixerControlDevice(object, widget, mic_volume_icons); recheck_default = true; } else if (type == "Stream/Output/Audio") { diff --git a/src/util/icon-select.hpp b/src/util/icon-select.hpp index 107c40d24..8449246c1 100644 --- a/src/util/icon-select.hpp +++ b/src/util/icon-select.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include #include @@ -20,6 +22,15 @@ const std::map> volume_icons = { {std::numeric_limits::max(), {"audio-volume-high-danger", "dialog-warning"}} }; +const std::map> mic_volume_icons = { + {std::numeric_limits::min(), {"emblem-unreadable"}}, + {0.0, {"microphone-sensitivity-muted", "audio-volume-muted"}}, + {0.33, {"microphone-sensitivity-low", "audio-volume-low"}}, + {0.66, {"microphone-sensitivity-medium", "audio-volume-medium"}}, + {1.0, {"microphone-sensitivity-high", "audio-volume-high"}}, + {std::numeric_limits::max(), {"audio-volume-high-danger", "dialog-warning"}} +}; + const std::map> brightness_display_icons = { {std::numeric_limits::min(), {"display-brightness-invalid", "emblem-unreadable"}}, {0, {"display-brightness-low-symbolic", "display-brightness-low"}},