Also render SVGs with unspecified dimensions

This commit is contained in:
Přemysl Eric Janouch 2021-11-10 01:03:37 +01:00
parent 7ef4a06def
commit ffda836a15
Signed by: p
GPG Key ID: A0420B94F92B9493
1 changed files with 20 additions and 5 deletions

View File

@ -416,11 +416,20 @@ 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)) {
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 = {
.x = 0, .y = 0, .width = ceil(w), .height = ceil(h)};
cairo_surface_t *surface =
@ -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.
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.
if (error) {
g_debug("%s", (*error)->message);
g_clear_error(error);
}
#endif // HAVE_LIBRSVG --------------------------------------------------------
// TODO(p): Integrate gdk-pixbuf as a fallback (optional dependency).