aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-icon-factory.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2008-01-12 00:05:07 +0800
committerMilan Crha <mcrha@src.gnome.org>2008-01-12 00:05:07 +0800
commit16ed932ab391d318fbfd1ecf042573b91f6ecfb2 (patch)
tree61c64a55b3dee7116d54acc1c35eab902009498f /e-util/e-icon-factory.c
parent0859d42faed775ce440ff18ed86e150b3f904424 (diff)
downloadgsoc2013-evolution-16ed932ab391d318fbfd1ecf042573b91f6ecfb2.tar.gz
gsoc2013-evolution-16ed932ab391d318fbfd1ecf042573b91f6ecfb2.tar.zst
gsoc2013-evolution-16ed932ab391d318fbfd1ecf042573b91f6ecfb2.zip
** Fix for bug #488213
2008-01-11 Milan Crha <mcrha@redhat.com> ** Fix for bug #488213 * e-util/e-icon-factory.h: (e_icon_factory_pixbuf_scale): * e-util/e-icon-factory.c: (e_icon_factory_pixbuf_scale): New global function for pixbuf scaling which speeds up scaling when HAVE_LIBGNOMEUI_GNOME_THUMBNAIL_H. * addressbook/gui/contact-editor/e-contact-editor.c: (extract_simple_field): * mail/em-icon-stream.c: (emis_fit): * mail/em-format-html-display.c: (efhd_attachment_button): * e-util/e-icon-factory.c: (load_icon): * widgets/misc/e-spinner.c: (scale_to_size): * widgets/misc/e-image-chooser.c: (set_image_from_data): * widgets/misc/e-attachment-bar.c: (e_attachment_bar_create_attachment_cache), (update): Use global function e_icon_factory_pixbuf_scale for scaling pixbufs. svn path=/trunk/; revision=34800
Diffstat (limited to 'e-util/e-icon-factory.c')
-rw-r--r--e-util/e-icon-factory.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/e-util/e-icon-factory.c b/e-util/e-icon-factory.c
index 78b8122cdd..5a604786dd 100644
--- a/e-util/e-icon-factory.c
+++ b/e-util/e-icon-factory.c
@@ -32,6 +32,9 @@
#include <gtk/gtkicontheme.h>
#include <gtk/gtkimage.h>
+#ifdef HAVE_LIBGNOMEUI_GNOME_THUMBNAIL_H
+#include <libgnomeui/gnome-thumbnail.h>
+#endif
#include "e-icon-factory.h"
#include "e-util-private.h"
@@ -161,7 +164,7 @@ load_icon (const char *icon_key, const char *icon_name, int size, int scale)
if (unscaled != NULL) {
if(gdk_pixbuf_get_width(unscaled) != size || gdk_pixbuf_get_height(unscaled) != size)
{
- pixbuf = gdk_pixbuf_scale_simple (unscaled, size, size, GDK_INTERP_BILINEAR);
+ pixbuf = e_icon_factory_pixbuf_scale (unscaled, size, size);
g_object_unref (unscaled);
} else
pixbuf = unscaled;
@@ -402,3 +405,30 @@ e_icon_factory_get_icon_list (const char *icon_name)
return list;
}
+
+/**
+ * e_icon_factory_pixbuf_scale
+ * Scales pixbuf to desired size.
+ * @param pixbuf Pixbuf to be scaled.
+ * @param width Desired width, if less or equal to 0, then changed to 1.
+ * @param height Desired height, if less or equal to 0, then changed to 1.
+ * @return Scaled pixbuf.
+ **/
+GdkPixbuf *
+e_icon_factory_pixbuf_scale (GdkPixbuf *pixbuf, int width, int height)
+{
+ g_return_val_if_fail (pixbuf != NULL, NULL);
+
+ if (width <= 0)
+ width = 1;
+
+ if (height <= 0)
+ height = 1;
+
+#ifdef HAVE_LIBGNOMEUI_GNOME_THUMBNAIL_H
+ /* because this can only scale down, not up */
+ if (gdk_pixbuf_get_width (pixbuf) > width && gdk_pixbuf_get_height (pixbuf) > height)
+ return gnome_thumbnail_scale_down_pixbuf (pixbuf, width, height);
+#endif
+ return gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR);
+}