]> Pileus Git - ~andy/gtk/commitdiff
add arrow-size property to control the minimum size of the arrow, have the
authorKristian Rietveld <kris@imendio.com>
Wed, 1 Nov 2006 19:15:54 +0000 (19:15 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Wed, 1 Nov 2006 19:15:54 +0000 (19:15 +0000)
2006-11-01  Kristian Rietveld  <kris@imendio.com>

* gtk/gtkcombobox.c (gtk_combo_box_class_init),
(gtk_combo_box_size_request): add arrow-size property to control
the minimum size of the arrow, have the arrow scale up with the
font by default. (#357950).

ChangeLog
gtk/gtkcombobox.c

index a1451cd5894d2eab09c3b819d9758084fde9d78d..a0355ac9d1832ac38566e3abc213c9ec39a06cae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-01  Kristian Rietveld  <kris@imendio.com>
+
+       * gtk/gtkcombobox.c (gtk_combo_box_class_init),
+       (gtk_combo_box_size_request): add arrow-size property to control
+       the minimum size of the arrow, have the arrow scale up with the
+       font by default. (#357950).
+
 2006-10-30  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): don't
index 28acf364ae579c19d71ab20381c44b94080c2ea7..1cf287fe0f616241e8e404017b77503553a7003f 100644 (file)
@@ -756,6 +756,25 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                                                                  FALSE,
                                                                  GTK_PARAM_READABLE));
 
+  /**
+   * GtkComboBox:arrow-size:
+   *
+   * Sets the minimum size of the arrow in the combo box.  Note
+   * that the arrow size is coupled to the font size, so in case
+   * a larger font is used, the arrow will be larger than set
+   * by arrow size.
+   *
+   * Since: 2.12
+   */
+  gtk_widget_class_install_style_property (widget_class,
+                                          g_param_spec_int ("arrow-size",
+                                                            P_("Arrow Size"),
+                                                            P_("The minimum size of the arrow in the combo box"),
+                                                            0,
+                                                            G_MAXINT,
+                                                            15,
+                                                            GTK_PARAM_READABLE));
+
   g_type_class_add_private (object_class, sizeof (GtkComboBoxPrivate));
 }
 
@@ -1897,7 +1916,12 @@ gtk_combo_box_size_request (GtkWidget      *widget,
 {
   gint width, height;
   gint focus_width, focus_pad;
+  gint font_size;
+  gint arrow_size;
   GtkRequisition bin_req;
+  PangoContext *context;
+  PangoFontMetrics *metrics;
+  PangoFontDescription *font_desc;
 
   GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
  
@@ -1910,8 +1934,21 @@ gtk_combo_box_size_request (GtkWidget      *widget,
   gtk_widget_style_get (GTK_WIDGET (widget),
                        "focus-line-width", &focus_width,
                        "focus-padding", &focus_pad,
+                       "arrow-size", &arrow_size,
                        NULL);
 
+  font_desc = GTK_BIN (widget)->child->style->font_desc;
+  context = gtk_widget_get_pango_context (widget);
+  metrics = pango_context_get_metrics (context, font_desc,
+                                      pango_context_get_language (context));
+  font_size = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) +
+                           pango_font_metrics_get_descent (metrics));
+  pango_font_metrics_unref (metrics);
+
+  arrow_size = MAX (arrow_size, font_size);
+
+  gtk_widget_set_size_request (combo_box->priv->arrow, arrow_size, arrow_size);
+
   if (!combo_box->priv->tree_view)
     {
       /* menu mode */