diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-06-09 18:52:12 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-06-09 18:52:12 +0000 |
commit | a75a427a4d6a43a263b797d89da7e27a22af6dd9 (patch) | |
tree | 2f028b63f71d00d7f45165e4b6766d78ec732b06 | |
parent | 7afafd2786f2bb16003959c4008f5d30671266bd (diff) | |
download | navit-a75a427a4d6a43a263b797d89da7e27a22af6dd9.tar.gz |
Fix:graphics_gtk_drawing_area:Use gdk_pixbuf_loader instead of GInputStream for loading images from memory for better compatibility
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5533 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r-- | navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c index df2f10b5b..3c3d3757e 100644 --- a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c +++ b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c @@ -23,7 +23,6 @@ #include <signal.h> #include <sys/time.h> #include <gtk/gtk.h> -#include <gio/gio.h> #include <gdk/gdkkeysyms.h> #include <locale.h> /* For WIN32 */ #if !defined(GDK_Book) || !defined(GDK_Calendar) @@ -228,20 +227,21 @@ static struct graphics_image_priv * image_new(struct graphics_priv *gr, struct graphics_image_methods *meth, char *name, int *w, int *h, struct point *hot, int rotation) { GdkPixbuf *pixbuf; - GInputStream *stream; struct graphics_image_priv *ret; const char *option; if (!strcmp(name,"buffer:")) { struct graphics_image_buffer *buffer=(struct graphics_image_buffer *)name; - stream=g_memory_input_stream_new_from_data(buffer->start, buffer->len, NULL); - if (!stream) + GdkPixbufLoader *loader=gdk_pixbuf_loader_new(); + if (!loader) return NULL; - if (*w == -1 && *h == -1) - pixbuf=gdk_pixbuf_new_from_stream(stream, NULL, NULL); - else - pixbuf=gdk_pixbuf_new_from_stream_at_scale(stream, *w, *h, TRUE, NULL, NULL); - + if (*w != -1 || *h != -1) + gdk_pixbuf_loader_set_size(loader, *w, *h); + gdk_pixbuf_loader_write(loader, buffer->start, buffer->len, NULL); + gdk_pixbuf_loader_close(loader, NULL); + pixbuf=gdk_pixbuf_loader_get_pixbuf(loader); + g_object_ref(pixbuf); + g_object_unref(loader); } else { if (*w == -1 && *h == -1) pixbuf=gdk_pixbuf_new_from_file(name, NULL); |