summaryrefslogtreecommitdiff
path: root/gtk/gtkcssimageicontheme.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-11-29 19:44:30 -0500
committerMatthias Clasen <mclasen@redhat.com>2017-11-29 19:44:30 -0500
commit8cdaaffd428127f8a922a90ecbb1e60b1f92507c (patch)
treea6fdf7357643ffac5186dc95e0bbf1aebb78e413 /gtk/gtkcssimageicontheme.c
parent507ef68faa39277a6ba6d09821238d6ff38d4415 (diff)
downloadgtk+-8cdaaffd428127f8a922a90ecbb1e60b1f92507c.tar.gz
Avoid pixbufs when loading themed icons
We can directly get a texture from GtkIconTheme now.
Diffstat (limited to 'gtk/gtkcssimageicontheme.c')
-rw-r--r--gtk/gtkcssimageicontheme.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/gtk/gtkcssimageicontheme.c b/gtk/gtkcssimageicontheme.c
index 1183bd8962..32bfca025f 100644
--- a/gtk/gtkcssimageicontheme.c
+++ b/gtk/gtkcssimageicontheme.c
@@ -64,44 +64,30 @@ gtk_css_image_icon_theme_snapshot (GtkCssImage *image,
else
{
GtkIconInfo *icon_info;
- GdkPixbuf *pixbuf;
icon_info = gtk_icon_theme_lookup_icon_for_scale (icon_theme->icon_theme,
icon_theme->name,
size,
icon_theme->scale,
GTK_ICON_LOOKUP_USE_BUILTIN);
- if (icon_info)
- {
- symbolic = gtk_icon_info_is_symbolic (icon_info);
- pixbuf = gtk_icon_info_load_icon (icon_info, NULL);
- }
- else
- {
- pixbuf = NULL;
- }
-
- if (pixbuf == NULL)
- {
- pixbuf = gtk_icon_theme_load_icon (icon_theme->icon_theme,
- "image-missing",
- size,
- GTK_ICON_LOOKUP_USE_BUILTIN | GTK_ICON_LOOKUP_GENERIC_FALLBACK,
- NULL);
- g_assert (pixbuf != NULL);
- symbolic = FALSE;
- }
-
- texture = gdk_texture_new_for_pixbuf (pixbuf);
+ if (icon_info == NULL)
+ icon_info = gtk_icon_theme_lookup_icon (icon_theme->icon_theme,
+ "image-missing",
+ size,
+ GTK_ICON_LOOKUP_USE_BUILTIN | GTK_ICON_LOOKUP_GENERIC_FALLBACK);
+
+ g_assert (icon_info != NULL);
+
+ symbolic = gtk_icon_info_is_symbolic (icon_info);
+ texture = gtk_icon_info_load_texture (icon_info);
g_clear_object (&icon_theme->cached_texture);
+
icon_theme->cached_size = size;
icon_theme->cached_texture = texture;
icon_theme->cached_symbolic = symbolic;
- g_object_unref (pixbuf);
- if (icon_info)
- g_object_unref (icon_info);
+ g_object_unref (icon_info);
}
texture_width = (double) gdk_texture_get_width (texture) / icon_theme->scale;