diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-01-29 17:27:35 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-01-29 17:27:35 -0500 |
commit | 001598a8211e02dbbebd1bf71c51d4b96bdb9bef (patch) | |
tree | 07c4d17dd00bc652eac74f1945faafdfbb6cb605 /gtk/gtkicontheme.c | |
parent | 68edc67bdead2f1ad3224b3f9ff2e07c202fc626 (diff) | |
download | gtk+-001598a8211e02dbbebd1bf71c51d4b96bdb9bef.tar.gz |
icon theme: Improve loading of unthemed files
When creating icon info objects for unthemed files, we don't
really have a nominal size, so we pass 0 to mean 'load at
original size'. However, this is not what was happening.
To make this possible, add variants of some pixbuf loading
functions that take a scale factor instead of a desired size,
and use those when we don't have a nominal size.
Diffstat (limited to 'gtk/gtkicontheme.c')
-rw-r--r-- | gtk/gtkicontheme.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 6de7f33179..0a0425829b 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -49,6 +49,7 @@ #include "gtksettingsprivate.h" #include "gtkstylecontextprivate.h" #include "gtkprivate.h" +#include "gdkpixbufutilsprivate.h" #undef GDK_DEPRECATED #undef GDK_DEPRECATED_FOR @@ -3880,9 +3881,15 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info) size = scaled_desired_size; else size = icon_info->dir_size * dir_scale * icon_info->scale; - source_pixbuf = gdk_pixbuf_new_from_resource_at_scale (icon_info->filename, - size, size, TRUE, - &icon_info->load_error); + + if (size == 0) + source_pixbuf = _gdk_pixbuf_new_from_resource_scaled (icon_info->filename, + icon_info->desired_scale, + &icon_info->load_error); + else + source_pixbuf = gdk_pixbuf_new_from_resource_at_scale (icon_info->filename, + size, size, TRUE, + &icon_info->load_error); } else source_pixbuf = gdk_pixbuf_new_from_resource (icon_info->filename, @@ -3910,10 +3917,16 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info) size = scaled_desired_size; else size = icon_info->dir_size * dir_scale * icon_info->scale; - source_pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream, - size, size, - TRUE, NULL, - &icon_info->load_error); + if (size == 0) + source_pixbuf = _gdk_pixbuf_new_from_stream_scaled (stream, + icon_info->desired_scale, + NULL, + &icon_info->load_error); + else + source_pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream, + size, size, + TRUE, NULL, + &icon_info->load_error); } else source_pixbuf = gdk_pixbuf_new_from_stream (stream, |