summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-04-24 21:17:25 -0400
committerMatthias Clasen <mclasen@redhat.com>2012-05-02 08:46:32 -0400
commit2b496e390f6b9f74f04b4a61caa57ad165928240 (patch)
tree29a7d679e981e5e2efa895ba0bc319706fcd18b5
parentf28c50a182e381cceba35a1991fb5792dd9ecdfc (diff)
downloadgtk+-2b496e390f6b9f74f04b4a61caa57ad165928240.tar.gz
spinbutton: port to GtkIconHelper
Instead of doing our own lookup for symbolic icons and rendering the pixbuf, use GtkIconHelper as other widgets do, which saves a bunch of code. https://bugzilla.gnome.org/show_bug.cgi?id=674807
-rw-r--r--gtk/gtkspinbutton.c73
1 files changed, 21 insertions, 52 deletions
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 5c7dbc19de..3092bc1acb 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -38,6 +38,7 @@
#include "gtkadjustment.h"
#include "gtkbindings.h"
#include "gtkentryprivate.h"
+#include "gtkiconhelperprivate.h"
#include "gtkicontheme.h"
#include "gtkintl.h"
#include "gtkmarshalers.h"
@@ -606,49 +607,6 @@ gtk_spin_button_get_property (GObject *object,
}
}
-static gint
-get_icon_size (void)
-{
- gint width, height, icon_size;
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
- icon_size = MAX (width, height);
-
- return icon_size;
-}
-
-static GdkPixbuf *
-create_one_pixbuf (GtkStyleContext *context,
- const gchar *icon_name)
-{
- GtkIconInfo *icon_info;
- GdkPixbuf *pix;
- gint size = get_icon_size ();
-
- icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
- icon_name, size,
- GTK_ICON_LOOKUP_GENERIC_FALLBACK |
- GTK_ICON_LOOKUP_USE_BUILTIN);
-
- if (icon_info != NULL)
- {
- pix = gtk_icon_info_load_symbolic_for_context (icon_info, context,
- NULL, NULL);
- gtk_icon_info_free (icon_info);
- }
- else
- {
- GtkIconSet *icon_set;
-
- icon_set = gtk_style_context_lookup_icon_set (context, GTK_STOCK_MISSING_IMAGE);
- pix = gtk_icon_set_render_icon_pixbuf (icon_set, context, GTK_ICON_SIZE_MENU);
-
- g_warning ("Unable to fetch icon %s from the icon theme", icon_name);
- }
-
- return pix;
-}
-
static void
gtk_spin_button_init (GtkSpinButton *spin_button)
{
@@ -861,6 +819,10 @@ gtk_spin_button_panel_get_width (GtkSpinButton *spin_button,
GtkBorder button_padding, button_border;
GtkStyleContext *context;
GtkStateFlags state;
+ gint icon_size, width, height;
+
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
+ icon_size = MAX (width, height);
context = gtk_spin_button_panel_get_context (spin_button, panel);
state = gtk_spin_button_panel_get_state (spin_button, panel);
@@ -870,7 +832,7 @@ gtk_spin_button_panel_get_width (GtkSpinButton *spin_button,
g_object_unref (context);
- return get_icon_size () + button_padding.left + button_padding.right +
+ return icon_size + button_padding.left + button_padding.right +
button_border.left + button_border.right;
}
@@ -936,7 +898,8 @@ gtk_spin_button_panel_draw (GtkSpinButton *spin_button,
GtkStateFlags state;
GtkWidget *widget;
gdouble width, height, x, y;
- GdkPixbuf *pix;
+ gint icon_width, icon_height;
+ GtkIconHelper *icon_helper;
widget = GTK_WIDGET (spin_button);
@@ -950,24 +913,30 @@ gtk_spin_button_panel_draw (GtkSpinButton *spin_button,
height = gdk_window_get_height (panel);
width = gdk_window_get_width (panel);
+ icon_helper = _gtk_icon_helper_new ();
+ _gtk_icon_helper_set_use_fallback (icon_helper, TRUE);
+
if (panel == priv->down_panel)
- pix = create_one_pixbuf (context, "list-remove-symbolic");
+ _gtk_icon_helper_set_icon_name (icon_helper, "list-remove-symbolic", GTK_ICON_SIZE_MENU);
else
- pix = create_one_pixbuf (context, "list-add-symbolic");
+ _gtk_icon_helper_set_icon_name (icon_helper, "list-add-symbolic", GTK_ICON_SIZE_MENU);
+
+ _gtk_icon_helper_get_size (icon_helper, context,
+ &icon_width, &icon_height);
gtk_render_background (context, cr,
0, 0, width, height);
gtk_render_frame (context, cr,
0, 0, width, height);
- x = floor ((width - gdk_pixbuf_get_width (pix)) / 2.0);
- y = floor ((height - gdk_pixbuf_get_height (pix)) / 2.0);
+ x = floor ((width - icon_width) / 2.0);
+ y = floor ((height - icon_height) / 2.0);
- gtk_render_icon (context, cr, pix,
- x, y);
+ _gtk_icon_helper_draw (icon_helper, context, cr,
+ x, y);
cairo_restore (cr);
- g_object_unref (pix);
+ g_object_unref (icon_helper);
g_object_unref (context);
}