summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-06-09 18:52:12 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-06-09 18:52:12 +0000
commita75a427a4d6a43a263b797d89da7e27a22af6dd9 (patch)
tree2f028b63f71d00d7f45165e4b6766d78ec732b06
parent7afafd2786f2bb16003959c4008f5d30671266bd (diff)
downloadnavit-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.c18
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);