From 34d9bd9f8b6cf5f1ad335c98f2403ff10660c0f0 Mon Sep 17 00:00:00 2001 From: Matthieu Mota Date: Sun, 21 May 2017 15:30:26 +0200 Subject: [PATCH] Fix large size button --- panel-plugin/pulseaudio-plugin.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/panel-plugin/pulseaudio-plugin.c b/panel-plugin/pulseaudio-plugin.c index ff2c254..6a756c3 100644 --- a/panel-plugin/pulseaudio-plugin.c +++ b/panel-plugin/pulseaudio-plugin.c @@ -241,13 +241,38 @@ pulseaudio_plugin_size_changed (XfcePanelPlugin *plugin, { PulseaudioPlugin *pulseaudio_plugin = PULSEAUDIO_PLUGIN (plugin); gint icon_size; + GtkStyleContext *context; + GtkBorder padding; + GtkBorder border; + gint width; + gint xthickness; + gint ythickness; /* The plugin only occupies a single row */ size /= xfce_panel_plugin_get_nrows (plugin); #if LIBXFCE4PANEL_CHECK_VERSION (4,13,0) icon_size = xfce_panel_plugin_get_icon_size (plugin); #else - icon_size = size - 2; // fall-back for older panel versions + // fall-back for older panel versions + /* Get widget's padding and border to correctly calculate the button's icon size */ + context = gtk_widget_get_style_context (GTK_WIDGET (pulseaudio_plugin->button)); + gtk_style_context_get_padding (context, gtk_widget_get_state_flags (GTK_WIDGET (pulseaudio_plugin->button)), &padding); + gtk_style_context_get_border (context, gtk_widget_get_state_flags (GTK_WIDGET (pulseaudio_plugin->button)), &border); + xthickness = padding.left+padding.right+border.left+border.right; + ythickness = padding.top+padding.bottom+border.top+border.bottom; + + width = size - 2 * MAX (xthickness, ythickness); + /* Since symbolic icons are usually only provided in 16px we + * try to be clever and use size steps */ + + if (width <= 21) + icon_size = 16; + else if (width >=22 && width <= 29) + icon_size = 24; + else if (width >= 30 && width <= 40) + icon_size = 32; + else + icon_size = width; #endif pulseaudio_button_set_size (pulseaudio_plugin->button, size, icon_size); -- 2.13.0