1 From 318b7822a8a737a826aab50e1a829a6b59c9704f Mon Sep 17 00:00:00 2001
2 From: Carlos Garnacho <carlosg@gnome.org>
3 Date: Fri, 14 Jun 2013 15:47:44 +0200
4 Subject: [PATCH 65/68] Make usual calls to get a GdkPixbuf attach a 2x
8 gtk/gtkiconfactory.c | 24 ++++++++++++++++++---
9 gtk/gtkicontheme.c | 57 +++++++++++++++++++++++++++++++++++++++++++++-----
10 gtk/gtkwidget.c | 20 ++++++++++++++----
11 3 files changed, 89 insertions(+), 12 deletions(-)
13 diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c
14 index ab9a212..291c05e 100644
15 --- a/gtk/gtkiconfactory.c
16 +++ b/gtk/gtkiconfactory.c
17 @@ -1731,14 +1731,32 @@ gtk_icon_set_render_icon (GtkIconSet *icon_set,
21 + GdkPixbuf *pixbuf, *variant;
24 g_return_val_if_fail (icon_set != NULL, NULL);
25 g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
27 - return gtk_icon_set_render_icon_internal (icon_set, style, direction,
28 - state, size, widget, detail,
30 + pixbuf = gtk_icon_set_render_icon_internal (icon_set, style, direction,
31 + state, size, widget, detail,
33 + if (pixbuf && scale == 1)
36 + variant = gtk_icon_set_render_icon_internal (icon_set, style, direction,
37 + state, size, widget, detail,
40 + gdk_pixbuf_get_width (variant) > gdk_pixbuf_get_width (pixbuf))
41 + g_object_set_data_full (G_OBJECT (pixbuf),
42 + "gdk-pixbuf-2x-variant",
44 + (GDestroyNotify) g_object_unref);
46 + g_object_unref (variant);
53 diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
54 index 500f0ab..0e42adc 100644
55 --- a/gtk/gtkicontheme.c
56 +++ b/gtk/gtkicontheme.c
57 @@ -1403,6 +1403,8 @@ gtk_icon_theme_lookup_icon (GtkIconTheme *icon_theme,
59 GtkIconLookupFlags flags)
61 + GtkIconInfo *retval, *variant;
63 g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
64 g_return_val_if_fail (icon_name != NULL, NULL);
65 g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
66 @@ -1411,8 +1413,22 @@ gtk_icon_theme_lookup_icon (GtkIconTheme *icon_theme,
68 g_print ("gtk_icon_theme_lookup_icon %s\n", icon_name));
70 - return gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
72 + retval = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
75 + variant = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
77 + if (retval && variant &&
78 + retval->pixbuf && variant->pixbuf &&
79 + gdk_pixbuf_get_width (variant->pixbuf) > gdk_pixbuf_get_width (retval->pixbuf))
80 + g_object_set_data_full (G_OBJECT (retval->pixbuf),
81 + "gdk-pixbuf-2x-variant",
82 + g_object_ref (variant->pixbuf),
83 + (GDestroyNotify) g_object_unref);
85 + gtk_icon_info_free (variant);
91 @@ -1501,12 +1517,27 @@ gtk_icon_theme_choose_icon (GtkIconTheme *icon_theme,
93 GtkIconLookupFlags flags)
95 + GtkIconInfo *retval, *variant;
97 g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
98 g_return_val_if_fail (icon_names != NULL, NULL);
99 g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
100 (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
102 - return choose_icon (icon_theme, icon_names, size, 1, flags);
103 + retval = choose_icon (icon_theme, icon_names, size, 1, flags);
104 + variant = choose_icon (icon_theme, icon_names, size, 2, flags);
106 + if (retval && variant &&
107 + retval->pixbuf && variant->pixbuf &&
108 + gdk_pixbuf_get_width (variant->pixbuf) > gdk_pixbuf_get_width (retval->pixbuf))
109 + g_object_set_data_full (G_OBJECT (retval->pixbuf),
110 + "gdk-pixbuf-2x-variant",
111 + g_object_ref (variant->pixbuf),
112 + (GDestroyNotify) g_object_unref);
114 + gtk_icon_info_free (variant);
120 @@ -1569,14 +1600,30 @@ gtk_icon_theme_load_icon (GtkIconTheme *icon_theme,
121 GtkIconLookupFlags flags,
124 + GdkPixbuf *pixbuf, *variant;
126 g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
127 g_return_val_if_fail (icon_name != NULL, NULL);
128 g_return_val_if_fail ((flags & GTK_ICON_LOOKUP_NO_SVG) == 0 ||
129 (flags & GTK_ICON_LOOKUP_FORCE_SVG) == 0, NULL);
130 g_return_val_if_fail (error == NULL || *error == NULL, NULL);
132 - return gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
133 - size, 1, flags, error);
134 + pixbuf = gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
135 + size, 1, flags, error);
137 + variant = gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
138 + size, 2, flags, NULL);
140 + if (pixbuf && variant &&
141 + gdk_pixbuf_get_width (variant) > gdk_pixbuf_get_width (pixbuf))
142 + g_object_set_data_full (G_OBJECT (pixbuf),
143 + "gdk-pixbuf-2x-variant",
144 + g_object_ref (variant),
145 + (GDestroyNotify) g_object_unref);
147 + g_object_unref (variant);
153 diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
154 index f093c39..464cb59 100644
155 --- a/gtk/gtkwidget.c
156 +++ b/gtk/gtkwidget.c
157 @@ -7477,15 +7477,16 @@ gtk_widget_render_icon (GtkWidget *widget,
161 + GdkPixbuf *retval, *variant;
162 GtkIconSet *icon_set;
167 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
168 g_return_val_if_fail (stock_id != NULL, NULL);
169 g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
172 gtk_widget_ensure_style (widget);
175 icon_set = gtk_style_lookup_icon_set (widget->style, stock_id);
177 if (icon_set == NULL)
178 @@ -7499,6 +7500,17 @@ gtk_widget_render_icon (GtkWidget *widget,
182 + variant = gtk_icon_set_render_icon_scaled (icon_set, widget->style,
183 + gtk_widget_get_direction (widget),
184 + gtk_widget_get_state (widget),
185 + size, widget, detail, &scale);
188 + g_object_set_data_full (G_OBJECT (retval),
189 + "gdk-pixbuf-2x-variant",
191 + (GDestroyNotify) g_object_unref);
197 1.7.10.2 (Apple Git-33)