summaryrefslogtreecommitdiff
path: root/gtk/gtkicontheme.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-01-29 17:27:35 -0500
committerMatthias Clasen <mclasen@redhat.com>2016-01-29 17:27:35 -0500
commit001598a8211e02dbbebd1bf71c51d4b96bdb9bef (patch)
tree07c4d17dd00bc652eac74f1945faafdfbb6cb605 /gtk/gtkicontheme.c
parent68edc67bdead2f1ad3224b3f9ff2e07c202fc626 (diff)
downloadgtk+-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.c27
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,