diff options
-rw-r--r-- | fastiv-io.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/fastiv-io.c b/fastiv-io.c index 172bddb..66b7010 100644 --- a/fastiv-io.c +++ b/fastiv-io.c @@ -416,9 +416,18 @@ open_librsvg(const gchar *data, gsize len, const gchar *path, GError **error) double w = 0, h = 0; if (!rsvg_handle_get_intrinsic_size_in_pixels(handle, &w, &h)) { - set_error(error, "cannot compute pixel dimensions"); - g_object_unref(handle); - return NULL; + RsvgRectangle viewbox = {}; + gboolean has_viewport = FALSE; + rsvg_handle_get_intrinsic_dimensions(handle, NULL, NULL, NULL, NULL, + &has_viewport, &viewbox); + if (!has_viewport) { + set_error(error, "cannot compute pixel dimensions"); + g_object_unref(handle); + return NULL; + } + + w = viewbox.width; + h = viewbox.height; } cairo_rectangle_t extents = { @@ -526,14 +535,20 @@ fastiv_io_open_from_data(const char *data, size_t len, const gchar *path, // TODO(p): We should try to pass actual processing errors through, // notably only continue with LIBRAW_FILE_UNSUPPORTED. - g_clear_error(error); + if (error) { + g_debug("%s", (*error)->message); + g_clear_error(error); + } #endif // HAVE_LIBRAW --------------------------------------------------------- #ifdef HAVE_LIBRSVG // -------------------------------------------------------- if ((surface = open_librsvg(data, len, path, error))) break; // XXX: It doesn't look like librsvg can return sensible errors. - g_clear_error(error); + if (error) { + g_debug("%s", (*error)->message); + g_clear_error(error); + } #endif // HAVE_LIBRSVG -------------------------------------------------------- // TODO(p): Integrate gdk-pixbuf as a fallback (optional dependency). |