[Xfce4-commits] <xfce4-indicator-plugin:master> Use resizeable icons.
Mark Trompell
noreply at xfce.org
Mon Mar 19 08:52:03 CET 2012
Updating branch refs/heads/master
to 12875c15418900c11eb25bbd9acb82886e7175af (commit)
from 1ca015125fcc262035155b94ff500c6de7a0808c (commit)
commit 12875c15418900c11eb25bbd9acb82886e7175af
Author: Andrzej <ndrwrdck at gmail.com>
Date: Sun Mar 18 01:51:55 2012 +0900
Use resizeable icons.
panel-plugin/indicator-button.c | 137 +++++++++++++++++++++------------------
panel-plugin/indicator-button.h | 14 ++--
panel-plugin/indicator.c | 30 ++++----
3 files changed, 96 insertions(+), 85 deletions(-)
diff --git a/panel-plugin/indicator-button.c b/panel-plugin/indicator-button.c
index 78bbee3..709f79e 100644
--- a/panel-plugin/indicator-button.c
+++ b/panel-plugin/indicator-button.c
@@ -41,6 +41,8 @@ xfce_indicator_button_class_init (XfceIndicatorButtonClass *klass)
static void
xfce_indicator_button_init (XfceIndicatorButton *button)
{
+ GtkWidget *outer_container;
+
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT | GTK_CAN_FOCUS);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_button_set_use_underline (GTK_BUTTON (button),TRUE);
@@ -53,18 +55,21 @@ xfce_indicator_button_init (XfceIndicatorButton *button)
button->label = NULL;
button->icon = NULL;
- button->size = -1;
- button->panel_size = -1;
+
+ button->size = 0;
+ button->panel_size = 0;
+ button->orig_icon_size = 0;
button->panel_orientation = GTK_ORIENTATION_HORIZONTAL;
button->orientation = GTK_ORIENTATION_HORIZONTAL;
-
- button->outer_box = xfce_hvbox_new (GTK_ORIENTATION_VERTICAL, FALSE, 1);
- gtk_container_add (GTK_CONTAINER (button), button->outer_box);
- gtk_widget_show (button->outer_box);
+ outer_container = gtk_table_new (1, 1, FALSE);
+ gtk_container_add (GTK_CONTAINER (button), outer_container);
+ gtk_widget_show (outer_container);
button->box = xfce_hvbox_new (button->orientation, FALSE, 1);
- gtk_box_pack_start (GTK_BOX (button->outer_box), button->box, TRUE, FALSE, 0);
+ gtk_table_attach (GTK_TABLE (outer_container), button->box,
+ 0, 1, 0, 1,
+ GTK_EXPAND | GTK_SHRINK, GTK_EXPAND | GTK_SHRINK, 0, 0);
gtk_widget_show (button->box);
}
@@ -107,29 +112,34 @@ xfce_indicator_button_finalize (GObject *object)
static void
-xfce_indicator_button_check_label_size (XfceIndicatorButton *button)
+xfce_indicator_button_update_layout (XfceIndicatorButton *button)
{
GtkRequisition label_size;
- gint width, border_thickness;
+ gint border_thickness;
GtkStyle *style;
+ gint icon_size;
g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
- if (button->panel_orientation == GTK_ORIENTATION_VERTICAL &&
- button->orientation == GTK_ORIENTATION_HORIZONTAL &&
- button->icon != NULL &&
- button->label != NULL)
+ if (button->icon != NULL && button->size != 0)
{
- gtk_widget_size_request (button->label, &label_size);
-
- width = gdk_pixbuf_get_width (gtk_image_get_pixbuf (button->icon));
style = gtk_widget_get_style (GTK_WIDGET (button));
border_thickness = 2 * MAX (style->xthickness, style->ythickness) + 2;
+ icon_size = MIN (button->size - border_thickness, button->orig_icon_size);
+
+ if (button->label != NULL &&
+ button->panel_orientation == GTK_ORIENTATION_VERTICAL &&
+ button->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_widget_size_request (button->label, &label_size);
+
+ if (label_size.width > button->panel_size - icon_size - border_thickness)
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), GTK_ORIENTATION_VERTICAL);
+ else
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), GTK_ORIENTATION_HORIZONTAL);
+ }
- if (label_size.width > button->panel_size - width - border_thickness)
- gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), GTK_ORIENTATION_VERTICAL);
- else
- gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), GTK_ORIENTATION_HORIZONTAL);
+ xfce_panel_image_set_size (XFCE_PANEL_IMAGE (button->icon), icon_size);
}
}
@@ -154,7 +164,7 @@ xfce_indicator_button_set_label (XfceIndicatorButton *button,
g_object_ref (G_OBJECT (button->label));
gtk_box_pack_end (GTK_BOX (button->box), button->label, TRUE, FALSE, 1);
}
- xfce_indicator_button_check_label_size (button);
+ xfce_indicator_button_update_layout (button);
}
@@ -163,6 +173,8 @@ void
xfce_indicator_button_set_image (XfceIndicatorButton *button,
GtkImage *image)
{
+ GdkPixbuf *pixbuf;
+
g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
g_return_if_fail (GTK_IS_IMAGE (image));
@@ -174,11 +186,15 @@ xfce_indicator_button_set_image (XfceIndicatorButton *button,
g_object_unref (G_OBJECT (button->icon));
}
- button->icon = GTK_WIDGET (image);
- g_object_ref (G_OBJECT (button->icon));
+ pixbuf = gtk_image_get_pixbuf (image);
+ button->orig_icon_size = gdk_pixbuf_get_width (pixbuf);
+
+ button->icon = xfce_panel_image_new_from_pixbuf (pixbuf);
+
gtk_box_pack_start (GTK_BOX (button->box), button->icon, TRUE, FALSE, 1);
+ gtk_widget_show (button->icon);
}
- xfce_indicator_button_check_label_size (button);
+ xfce_indicator_button_update_layout (button);
}
@@ -254,66 +270,61 @@ xfce_indicator_button_get_menu (XfceIndicatorButton *button)
void
xfce_indicator_button_set_orientation (XfceIndicatorButton *button,
+ GtkOrientation panel_orientation,
GtkOrientation orientation)
{
- g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
-
- button->orientation = orientation;
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), orientation);
-
- if (button->label != NULL)
- gtk_label_set_angle (GTK_LABEL (button->label),
- (orientation == GTK_ORIENTATION_VERTICAL) ? -90 : 0);
- xfce_indicator_button_check_label_size (button);
-}
-
+ gboolean needs_update = FALSE;
-
-void
-xfce_indicator_button_set_panel_orientation (XfceIndicatorButton *button,
- GtkOrientation orientation)
-{
g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
- button->panel_orientation = orientation;
-
- gtk_orientable_set_orientation
- (GTK_ORIENTABLE (button->outer_box),
- (orientation == GTK_ORIENTATION_HORIZONTAL) ?
- GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL);
- xfce_indicator_button_check_label_size (button);
-}
-
+ if (button->orientation != orientation)
+ {
+ button->orientation = orientation;
+ if (button->label != NULL)
+ gtk_label_set_angle (GTK_LABEL (button->label),
+ (orientation == GTK_ORIENTATION_VERTICAL) ? -90 : 0);
+ needs_update = TRUE;
+ }
-void
-xfce_indicator_button_set_panel_size (XfceIndicatorButton *button,
- gint size)
-{
- g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
+ if (button->panel_orientation != panel_orientation)
+ {
+ button->panel_orientation = panel_orientation;
+ needs_update = TRUE;
+ }
- button->panel_size = size;
- xfce_indicator_button_check_label_size (button);
+ if (needs_update)
+ {
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (button->box), orientation);
+ xfce_indicator_button_update_layout (button);
+ }
}
void
xfce_indicator_button_set_size (XfceIndicatorButton *button,
+ gint panel_size,
gint size)
{
+ gboolean needs_update = FALSE;
+
g_return_if_fail (XFCE_IS_INDICATOR_BUTTON (button));
- button->size = size;
+ if (button->size != size)
+ {
+ button->size = size;
+ needs_update = TRUE;
+ }
- size -= (2 + 2 * MAX (GTK_WIDGET (button)->style->xthickness,
- GTK_WIDGET (button)->style->ythickness));
- if (button->icon != NULL)
+ if (button->panel_size != panel_size)
{
- gtk_widget_set_size_request (button->icon, size, size);
- xfce_indicator_button_check_label_size (button);
+ button->panel_size = panel_size;
+ needs_update = TRUE;
}
+
+ if (needs_update)
+ xfce_indicator_button_update_layout (button);
}
diff --git a/panel-plugin/indicator-button.h b/panel-plugin/indicator-button.h
index bf4a169..22a2e31 100644
--- a/panel-plugin/indicator-button.h
+++ b/panel-plugin/indicator-button.h
@@ -40,13 +40,13 @@ struct _XfceIndicatorButton
IndicatorObjectEntry *entry;
GtkMenu *menu;
- GtkWidget *outer_box;
GtkWidget *box;
GtkWidget *label;
GtkWidget *icon;
gint panel_size;
gint size;
+ gint orig_icon_size;
GtkOrientation panel_orientation;
GtkOrientation orientation;
@@ -73,13 +73,13 @@ IndicatorObject *xfce_indicator_button_get_io (XfceIndicatorButton *button);
GtkMenu *xfce_indicator_button_get_menu (XfceIndicatorButton *button);
-void xfce_indicator_button_set_orientation (XfceIndicatorButton *button, GtkOrientation orientation);
+void xfce_indicator_button_set_orientation (XfceIndicatorButton *button,
+ GtkOrientation panel_orientation,
+ GtkOrientation orientation);
-void xfce_indicator_button_set_panel_orientation (XfceIndicatorButton *button, GtkOrientation orientation);
-
-void xfce_indicator_button_set_panel_size (XfceIndicatorButton *button, gint size);
-
-void xfce_indicator_button_set_size (XfceIndicatorButton *button, gint size);
+void xfce_indicator_button_set_size (XfceIndicatorButton *button,
+ gint panel_size,
+ gint size);
GtkWidget *xfce_indicator_button_new (IndicatorObject *io, IndicatorObjectEntry *entry);
diff --git a/panel-plugin/indicator.c b/panel-plugin/indicator.c
index 6618049..2867833 100644
--- a/panel-plugin/indicator.c
+++ b/panel-plugin/indicator.c
@@ -250,10 +250,8 @@ indicator_mode_changed (XfcePanelPlugin *plugin,
buttons = gtk_container_get_children (GTK_CONTAINER (indicator->buttonbox));
for (button = buttons; button != NULL; button = g_list_next (button))
{
- xfce_indicator_button_set_panel_orientation (XFCE_INDICATOR_BUTTON (button->data),
- panel_orientation);
xfce_indicator_button_set_orientation (XFCE_INDICATOR_BUTTON (button->data),
- orientation);
+ panel_orientation, orientation);
}
indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin), indicator);
}
@@ -272,10 +270,8 @@ indicator_orientation_changed (XfcePanelPlugin *plugin,
buttons = gtk_container_get_children (GTK_CONTAINER (indicator->buttonbox));
for (button = buttons; button != NULL; button = g_list_next (button))
{
- xfce_indicator_button_set_panel_orientation (XFCE_INDICATOR_BUTTON (button->data),
- orientation);
xfce_indicator_button_set_orientation (XFCE_INDICATOR_BUTTON (button->data),
- GTK_ORIENTATION_HORIZONTAL);
+ orientation, GTK_ORIENTATION_HORIZONTAL);
}
indicator_size_changed (plugin, xfce_panel_plugin_get_size (plugin), indicator);
@@ -291,9 +287,6 @@ indicator_size_changed (XfcePanelPlugin *plugin,
GtkOrientation orientation;
GList *buttons;
GList *button;
-#if LIBXFCE4PANEL_CHECK_VERSION (4,9,0)
- gint row_size = size / xfce_panel_plugin_get_nrows (plugin);
-#endif
/* get the orientation of the plugin */
orientation = xfce_panel_plugin_get_orientation (plugin);
@@ -309,9 +302,11 @@ indicator_size_changed (XfcePanelPlugin *plugin,
for (button = buttons; button != NULL; button = g_list_next (button))
{
#if LIBXFCE4PANEL_CHECK_VERSION (4,9,0)
- //xfce_indicator_button_set_size (XFCE_INDICATOR_BUTTON (button->data), row_size);
+ xfce_indicator_button_set_size (XFCE_INDICATOR_BUTTON (button->data),
+ size, size / xfce_panel_plugin_get_nrows (plugin));
+#else
+ xfce_indicator_button_set_size (XFCE_INDICATOR_BUTTON (button->data), size, size);
#endif
- xfce_indicator_button_set_panel_size (XFCE_INDICATOR_BUTTON (button->data), size);
}
return TRUE;
@@ -430,18 +425,23 @@ entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_d
gtk_box_pack_start(GTK_BOX(((IndicatorPlugin *)user_data)->buttonbox), button, TRUE, TRUE, 0);
gtk_widget_show(button);
- xfce_indicator_button_set_panel_size (XFCE_INDICATOR_BUTTON (button),
- xfce_panel_plugin_get_size (plugin));
- xfce_indicator_button_set_panel_orientation (XFCE_INDICATOR_BUTTON (button),
- xfce_panel_plugin_get_orientation (plugin));
#if LIBXFCE4PANEL_CHECK_VERSION (4,9,0)
xfce_indicator_button_set_orientation
(XFCE_INDICATOR_BUTTON (button),
+ xfce_panel_plugin_get_orientation (plugin),
(xfce_panel_plugin_get_mode (plugin) == XFCE_PANEL_PLUGIN_MODE_VERTICAL) ?
GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL);
+ xfce_indicator_button_set_size
+ (XFCE_INDICATOR_BUTTON (button),
+ xfce_panel_plugin_get_size (plugin),
+ xfce_panel_plugin_get_size (plugin) / xfce_panel_plugin_get_nrows (plugin));
#else
xfce_indicator_button_set_orientation (XFCE_INDICATOR_BUTTON (button),
+ xfce_panel_plugin_get_orientation (plugin),
GTK_ORIENTATION_HORIZONTAL);
+ xfce_indicator_button_set_size (XFCE_INDICATOR_BUTTON (button),
+ xfce_panel_plugin_get_size (plugin),
+ xfce_panel_plugin_get_size (plugin));
#endif
}
More information about the Xfce4-commits
mailing list