From b1f8767b38913d2d3b7057c079555ceda53e3b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20For=C3=A9?= Date: Tue, 3 Mar 2020 14:03:07 -0800 Subject: [PATCH 1/3] Use CSS for muted-blocking animation --- data/indicator.css | 18 ++++++++++++++++++ src/Indicator.vala | 25 +++++-------------------- src/Widgets/DisplayWidget.vala | 4 ++++ 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/data/indicator.css b/data/indicator.css index 628f2217..e289bf81 100644 --- a/data/indicator.css +++ b/data/indicator.css @@ -17,6 +17,16 @@ * Boston, MA 02110-1301 USA. */ +.volume-icon { + transition: cubic-bezier(0.4, 0.0, 0.2, 1) 5s; +} + +.blocking .volume-icon { + animation: volume-blocking 0.4s ease-in-out 1; + color: @warning_color; + transition: cubic-bezier(0.4, 0.0, 0.2, 1) 200ms; +} + .mic-icon { animation: none; min-width: 24px; @@ -30,6 +40,14 @@ -gtk-icon-source: -gtk-icontheme("microphone-sensitivity-muted-symbolic"); } +@keyframes volume-blocking { + 0% { -gtk-icon-transform: rotate(20deg); } + 25% { -gtk-icon-transform: rotate(-20deg); } + 50% { -gtk-icon-transform: rotate(10deg); } + 75% { -gtk-icon-transform: rotate(-10deg); } + 100% { -gtk-icon-transform: rotate(5deg); } +} + @keyframes microphone-disabled { 0% { -gtk-icon-source: -gtk-icontheme("audio-input-microphone-symbolic"); } 10% { -gtk-icon-source: -gtk-icontheme("microphone-sensitivity-muted-10-symbolic"); opacity: 0.94; } diff --git a/src/Indicator.vala b/src/Indicator.vala index 36636123..e41ece08 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -28,7 +28,6 @@ public class Sound.Indicator : Wingpanel.Indicator { private Services.VolumeControlPulse volume_control; private bool open = false; - private bool mute_blocks_sound = false; private uint sound_was_blocked_timeout_id; private double max_volume = 1.0; @@ -168,24 +167,10 @@ public class Sound.Indicator : Wingpanel.Indicator { } private void on_is_playing_change () { - if (!volume_control.mute) { - mute_blocks_sound = false; - return; - } - if (volume_control.is_playing) { - mute_blocks_sound = true; - } else if (mute_blocks_sound) { - /* Continue to show the blocking icon five seconds after a player has tried to play something */ - if (sound_was_blocked_timeout_id > 0) { - Source.remove (sound_was_blocked_timeout_id); - } - - sound_was_blocked_timeout_id = Timeout.add_seconds (5, () => { - mute_blocks_sound = false; - sound_was_blocked_timeout_id = 0; - display_widget.icon_name = get_volume_icon (volume_control.volume.volume); - return false; - }); + if (volume_control.is_playing && volume_control.mute) { + display_widget.get_style_context ().add_class ("blocking"); + } else { + display_widget.get_style_context ().remove_class ("blocking"); } display_widget.icon_name = get_volume_icon (volume_control.volume.volume); @@ -223,7 +208,7 @@ public class Sound.Indicator : Wingpanel.Indicator { private unowned string get_volume_icon (double volume) { if (volume <= 0 || this.volume_control.mute) { - return this.mute_blocks_sound ? "audio-volume-muted-blocking-symbolic" : "audio-volume-muted-symbolic"; + return "audio-volume-muted-symbolic"; } else if (volume <= 0.3) { return "audio-volume-low-symbolic"; } else if (volume <= 0.7) { diff --git a/src/Widgets/DisplayWidget.vala b/src/Widgets/DisplayWidget.vala index b910e11a..79f35526 100644 --- a/src/Widgets/DisplayWidget.vala +++ b/src/Widgets/DisplayWidget.vala @@ -33,6 +33,10 @@ public class DisplayWidget : Gtk.Grid { var volume_icon = new Gtk.Image (); volume_icon.pixel_size = 24; + var volume_style_context = volume_icon.get_style_context (); + volume_style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + volume_style_context.add_class ("volume-icon"); + var mic_icon = new Gtk.Spinner (); mic_icon.margin_end = 18; From d9096325d42689ee8feb4d1a71e2d0d8774baf5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20For=C3=A9?= Date: Tue, 3 Mar 2020 14:22:44 -0800 Subject: [PATCH 2/3] Style more often and faster --- data/indicator.css | 2 +- src/Indicator.vala | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/data/indicator.css b/data/indicator.css index e289bf81..fb932ebc 100644 --- a/data/indicator.css +++ b/data/indicator.css @@ -18,7 +18,7 @@ */ .volume-icon { - transition: cubic-bezier(0.4, 0.0, 0.2, 1) 5s; + transition: cubic-bezier(0.4, 0.0, 0.2, 1) 3s; } .blocking .volume-icon { diff --git a/src/Indicator.vala b/src/Indicator.vala index e41ece08..8c680310 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -132,6 +132,8 @@ public class Sound.Indicator : Wingpanel.Indicator { volume_scale.scale_widget.set_value (volume); display_widget.icon_name = get_volume_icon (volume); } + + style_blocking (); } private void on_mic_volume_change () { @@ -147,12 +149,9 @@ public class Sound.Indicator : Wingpanel.Indicator { string volume_icon = get_volume_icon (volume_control.volume.volume); display_widget.icon_name = volume_icon; + volume_scale.icon = volume_icon; - if (volume_control.mute) { - volume_scale.icon = "audio-volume-muted-symbolic"; - } else { - volume_scale.icon = volume_icon; - } + style_blocking (); } private void on_mic_mute_change () { @@ -167,13 +166,15 @@ public class Sound.Indicator : Wingpanel.Indicator { } private void on_is_playing_change () { - if (volume_control.is_playing && volume_control.mute) { + style_blocking (); + } + + private void style_blocking () { + if (volume_control.is_playing && (volume_control.mute || volume_control.volume.volume == 0)) { display_widget.get_style_context ().add_class ("blocking"); } else { display_widget.get_style_context ().remove_class ("blocking"); } - - display_widget.icon_name = get_volume_icon (volume_control.volume.volume); } private void on_volume_icon_scroll_event (Gdk.EventScroll e) { From addc78eda777cad5fd1cf10260947a68c10ca781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20For=C3=A9?= Date: Tue, 3 Mar 2020 14:29:06 -0800 Subject: [PATCH 3/3] revert volume 0 because false positives --- src/Indicator.vala | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Indicator.vala b/src/Indicator.vala index 8c680310..5a1c54d4 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -66,7 +66,7 @@ public class Sound.Indicator : Wingpanel.Indicator { volume_control.notify["mic-volume"].connect (on_mic_volume_change); volume_control.notify["mute"].connect (on_mute_change); volume_control.notify["micMute"].connect (on_mic_mute_change); - volume_control.notify["is-playing"].connect (on_is_playing_change); + volume_control.notify["is-playing"].connect (style_blocking); volume_control.notify["is-listening"].connect (update_mic_visibility); Notify.init ("wingpanel-indicator-sound"); @@ -165,12 +165,8 @@ public class Sound.Indicator : Wingpanel.Indicator { } } - private void on_is_playing_change () { - style_blocking (); - } - private void style_blocking () { - if (volume_control.is_playing && (volume_control.mute || volume_control.volume.volume == 0)) { + if (volume_control.is_playing && volume_control.mute) { display_widget.get_style_context ().add_class ("blocking"); } else { display_widget.get_style_context ().remove_class ("blocking");