diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-11-29 19:44:30 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-11-29 19:44:30 -0500 |
commit | 8cdaaffd428127f8a922a90ecbb1e60b1f92507c (patch) | |
tree | a6fdf7357643ffac5186dc95e0bbf1aebb78e413 /gtk/gtkcssimageicontheme.c | |
parent | 507ef68faa39277a6ba6d09821238d6ff38d4415 (diff) | |
download | gtk+-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.c | 38 |
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; |