Fix 'mono' package typo
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0065-Make-usual-calls-to-get-a-GdkPixbuf-attach-a-2x-vari.patch
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
5  variant if available
6
7 ---
8  gtk/gtkiconfactory.c |   24 ++++++++++++++++++---
9  gtk/gtkicontheme.c   |   57 +++++++++++++++++++++++++++++++++++++++++++++-----
10  gtk/gtkwidget.c      |   20 ++++++++++++++----
11  3 files changed, 89 insertions(+), 12 deletions(-)
12
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,
18                            GtkWidget         *widget,
19                            const char        *detail)
20  {
21 +  GdkPixbuf *pixbuf, *variant;
22    gdouble scale = 1;
23
24    g_return_val_if_fail (icon_set != NULL, NULL);
25    g_return_val_if_fail (style == NULL || GTK_IS_STYLE (style), NULL);
26
27 -  return gtk_icon_set_render_icon_internal (icon_set, style, direction,
28 -                                            state, size, widget, detail,
29 -                                            &scale);
30 +  pixbuf = gtk_icon_set_render_icon_internal (icon_set, style, direction,
31 +                                              state, size, widget, detail,
32 +                                              &scale);
33 +  if (pixbuf && scale == 1)
34 +    {
35 +      scale = 2;
36 +      variant = gtk_icon_set_render_icon_internal (icon_set, style, direction,
37 +                                                   state, size, widget, detail,
38 +                                                   &scale);
39 +      if (variant &&
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",
43 +                                variant,
44 +                                (GDestroyNotify) g_object_unref);
45 +      else if (variant)
46 +        g_object_unref (variant);
47 +    }
48 +
49 +  return pixbuf;
50  }
51
52  GdkPixbuf*
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,
58                             gint                size,
59                             GtkIconLookupFlags  flags)
60  {
61 +  GtkIconInfo *retval, *variant;
62 +
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,
67    GTK_NOTE (ICONTHEME,
68             g_print ("gtk_icon_theme_lookup_icon %s\n", icon_name));
69
70 -  return gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
71 -                                               size, 1, flags);
72 +  retval = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
73 +                                                 size, 1, flags);
74 +
75 +  variant = gtk_icon_theme_lookup_icon_for_scale (icon_theme, icon_name,
76 +                                                  size, 2, flags);
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);
84 +  if (variant)
85 +    gtk_icon_info_free (variant);
86 +
87 +  return retval;
88  }
89
90  GtkIconInfo *
91 @@ -1501,12 +1517,27 @@ gtk_icon_theme_choose_icon (GtkIconTheme       *icon_theme,
92                             gint                size,
93                             GtkIconLookupFlags  flags)
94  {
95 +  GtkIconInfo *retval, *variant;
96 +
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);
101
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);
105 +
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);
113 +  if (variant)
114 +    gtk_icon_info_free (variant);
115 +
116 +  return retval;
117  }
118
119  GtkIconInfo *
120 @@ -1569,14 +1600,30 @@ gtk_icon_theme_load_icon (GtkIconTheme         *icon_theme,
121                           GtkIconLookupFlags    flags,
122                           GError              **error)
123  {
124 +  GdkPixbuf *pixbuf, *variant;
125 +
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);
131
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);
136 +
137 +  variant = gtk_icon_theme_load_icon_for_scale (icon_theme, icon_name,
138 +                                               size, 2, flags, NULL);
139 +
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);
146 +  if (variant)
147 +    g_object_unref (variant);
148 +
149 +  return pixbuf;
150  }
151
152  GdkPixbuf *
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,
158                          GtkIconSize     size,
159                          const gchar    *detail)
160  {
161 +  GdkPixbuf *retval, *variant;
162    GtkIconSet *icon_set;
163 -  GdkPixbuf *retval;
164 -
165 +  gdouble scale = 2;
166 +
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);
170 -
171 +
172    gtk_widget_ensure_style (widget);
173 -
174 +
175    icon_set = gtk_style_lookup_icon_set (widget->style, stock_id);
176
177    if (icon_set == NULL)
178 @@ -7499,6 +7500,17 @@ gtk_widget_render_icon (GtkWidget      *widget,
179                                       widget,
180                                       detail);
181
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);
186 +
187 +  if (variant)
188 +    g_object_set_data_full (G_OBJECT (retval),
189 +                            "gdk-pixbuf-2x-variant",
190 +                            variant,
191 +                            (GDestroyNotify) g_object_unref);
192 +
193    return retval;
194  }
195
196 --
197 1.7.10.2 (Apple Git-33)