[librsvg] Create type specific gdk-pixbuf loader



commit 4af98a95c59d159bdb551a0cef949e7e7118055f
Author: Christian Persch <chpe gnome org>
Date:   Fri Jan 27 22:52:32 2012 +0100

    Create type specific gdk-pixbuf loader
    
    When we know the mime type of the content, use
    gdk_pixbuf_loader_new_with_mime_type().

 rsvg-image.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/rsvg-image.c b/rsvg-image.c
index 44a5f97..b655974 100644
--- a/rsvg-image.c
+++ b/rsvg-image.c
@@ -43,16 +43,30 @@ rsvg_cairo_surface_new_from_href (RsvgHandle *handle,
 {
     guint8 *data;
     gsize data_len;
+    char *content_type = NULL, *mime_type;
     GdkPixbufLoader *loader;
     GdkPixbuf *pixbuf = NULL;
     int res;
     cairo_surface_t *surface;
 
-    data = _rsvg_handle_acquire_data (handle, href, NULL, &data_len, error);
+    data = _rsvg_handle_acquire_data (handle, href, &content_type, &data_len, error);
     if (data == NULL)
         return NULL;
 
-    loader = gdk_pixbuf_loader_new ();
+    if (content_type) {
+        mime_type = g_content_type_get_mime_type (content_type);
+        loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, error);
+        g_free (mime_type);
+        g_free (content_type);
+    } else {
+        loader = gdk_pixbuf_loader_new ();
+    }
+
+    if (loader == NULL) {
+        g_free (data);
+        return NULL;
+    }
+
 
     res = gdk_pixbuf_loader_write (loader, data, data_len, error);
     g_free (data);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]