[gtk+] stackswitcher: add GtkStackSwitcher:icon-size property



commit 0ca014af1493d255011f351ae6c40b9f9a925af3
Author: Christian Hergert <chergert redhat com>
Date:   Mon Nov 16 21:38:22 2015 -0800

    stackswitcher: add GtkStackSwitcher:icon-size property
    
    Set the GtkStackSwitcher:icon-size property to change the size of icons
    used in the linked GtkRadioButton children.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=758208

 gtk/gtkstackswitcher.c |   58 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 55 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkstackswitcher.c b/gtk/gtkstackswitcher.c
index 99a0dd3..de46f8c 100644
--- a/gtk/gtkstackswitcher.c
+++ b/gtk/gtkstackswitcher.c
@@ -58,11 +58,13 @@ struct _GtkStackSwitcherPrivate
 {
   GtkStack *stack;
   GHashTable *buttons;
+  gint icon_size;
   gboolean in_child_changed;
 };
 
 enum {
   PROP_0,
+  PROP_ICON_SIZE,
   PROP_STACK
 };
 
@@ -76,6 +78,7 @@ gtk_stack_switcher_init (GtkStackSwitcher *switcher)
 
   priv = gtk_stack_switcher_get_instance_private (switcher);
 
+  priv->icon_size = GTK_ICON_SIZE_MENU;
   priv->stack = NULL;
   priv->buttons = g_hash_table_new (g_direct_hash, g_direct_equal);
 
@@ -105,7 +108,8 @@ on_button_clicked (GtkWidget        *widget,
 static void
 rebuild_child (GtkWidget   *self,
                const gchar *icon_name,
-               const gchar *title)
+               const gchar *title,
+               gint         icon_size)
 {
   GtkStyleContext *context;
   GtkWidget *button_child;
@@ -119,7 +123,7 @@ rebuild_child (GtkWidget   *self,
 
   if (icon_name != NULL)
     {
-      button_child = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+      button_child = gtk_image_new_from_icon_name (icon_name, icon_size);
       if (title != NULL)
         gtk_widget_set_tooltip_text (GTK_WIDGET (self), title);
 
@@ -179,7 +183,7 @@ update_button (GtkStackSwitcher *self,
                            "icon-name", &icon_name,
                            NULL);
 
-  rebuild_child (button, icon_name, title);
+  rebuild_child (button, icon_name, title, priv->icon_size);
 
   gtk_widget_set_visible (button, gtk_widget_get_visible (widget) && (title != NULL || icon_name != NULL));
 
@@ -453,6 +457,29 @@ gtk_stack_switcher_get_stack (GtkStackSwitcher *switcher)
 }
 
 static void
+gtk_stack_switcher_set_icon_size (GtkStackSwitcher *switcher,
+                                  gint              icon_size)
+{
+  GtkStackSwitcherPrivate *priv;
+
+  g_return_if_fail (GTK_IS_STACK_SWITCHER (switcher));
+
+  priv = gtk_stack_switcher_get_instance_private (switcher);
+
+  if (icon_size != priv->icon_size)
+    {
+      priv->icon_size = icon_size;
+
+      if (priv->stack != NULL)
+        {
+          clear_switcher (switcher);
+          populate_switcher (switcher);
+          g_object_notify (G_OBJECT (switcher), "icon-size");
+        }
+    }
+}
+
+static void
 gtk_stack_switcher_get_property (GObject      *object,
                                  guint         prop_id,
                                  GValue       *value,
@@ -464,6 +491,10 @@ gtk_stack_switcher_get_property (GObject      *object,
   priv = gtk_stack_switcher_get_instance_private (switcher);
   switch (prop_id)
     {
+    case PROP_ICON_SIZE:
+      g_value_set_int (value, priv->icon_size);
+      break;
+
     case PROP_STACK:
       g_value_set_object (value, priv->stack);
       break;
@@ -484,6 +515,10 @@ gtk_stack_switcher_set_property (GObject      *object,
 
   switch (prop_id)
     {
+    case PROP_ICON_SIZE:
+      gtk_stack_switcher_set_icon_size (switcher, g_value_get_int (value));
+      break;
+
     case PROP_STACK:
       gtk_stack_switcher_set_stack (switcher, g_value_get_object (value));
       break;
@@ -528,6 +563,23 @@ gtk_stack_switcher_class_init (GtkStackSwitcherClass *class)
   object_class->dispose = gtk_stack_switcher_dispose;
   object_class->finalize = gtk_stack_switcher_finalize;
 
+  /**
+   * GtkStackSwitcher:icon-size:
+   *
+   * Use the "icon-size" property to change the size of the image displayed
+   * when a #GtkStackSwitcher is displaying icons.
+   *
+   * Since: 3.20
+   */
+  g_object_class_install_property (object_class,
+                                   PROP_ICON_SIZE,
+                                   g_param_spec_int ("icon-size",
+                                                     P_("Icon Size"),
+                                                     P_("Symbolic size to use for named icon"),
+                                                     0, G_MAXINT,
+                                                     GTK_ICON_SIZE_MENU,
+                                                     G_PARAM_EXPLICIT_NOTIFY | GTK_PARAM_READWRITE));
+
   g_object_class_install_property (object_class,
                                    PROP_STACK,
                                    g_param_spec_object ("stack",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]