diff options
author | danfe <danfe@FreeBSD.org> | 2016-07-28 14:40:41 +0800 |
---|---|---|
committer | danfe <danfe@FreeBSD.org> | 2016-07-28 14:40:41 +0800 |
commit | 141027705527f9873f40bca7a5a6ca301c9a36fa (patch) | |
tree | e413e3499fa2f94334028751cbd6210192458f50 /graphics | |
parent | d1c98a963e15d062cea22a4b8488cabc76c0303a (diff) | |
download | freebsd-ports-gnome-141027705527f9873f40bca7a5a6ca301c9a36fa.tar.gz freebsd-ports-gnome-141027705527f9873f40bca7a5a6ca301c9a36fa.tar.zst freebsd-ports-gnome-141027705527f9873f40bca7a5a6ca301c9a36fa.zip |
Fix an annoying bug of non-working scaling (-w/-h and -x/-y options) in
rsvg-convert(1) utility:
https://bugzilla.gnome.org/show_bug.cgi?id=520654
https://bugzilla.gnome.org/show_bug.cgi?id=762115
Approved by: gnome (timeout)
Patch by: Michael Biebl
Obtained from: Debian
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/librsvg2/Makefile | 1 | ||||
-rw-r--r-- | graphics/librsvg2/files/patch-revert-bgo-520654-support-export-id-in-rsvg-convert | 153 |
2 files changed, 154 insertions, 0 deletions
diff --git a/graphics/librsvg2/Makefile b/graphics/librsvg2/Makefile index 3716ae8bed7f..ed697bc4b99a 100644 --- a/graphics/librsvg2/Makefile +++ b/graphics/librsvg2/Makefile @@ -3,6 +3,7 @@ PORTNAME= librsvg PORTVERSION= 2.40.13 +PORTREVISION= 1 CATEGORIES= graphics gnome MASTER_SITES= GNOME PKGNAMESUFFIX= 2 diff --git a/graphics/librsvg2/files/patch-revert-bgo-520654-support-export-id-in-rsvg-convert b/graphics/librsvg2/files/patch-revert-bgo-520654-support-export-id-in-rsvg-convert new file mode 100644 index 000000000000..fe6fa2ce5b89 --- /dev/null +++ b/graphics/librsvg2/files/patch-revert-bgo-520654-support-export-id-in-rsvg-convert @@ -0,0 +1,153 @@ +From 34f63da0ca65aef62c151dab9497cb3995e2bf9e Mon Sep 17 00:00:00 2001 +From: Michael Biebl <biebl@debian.org> +Date: Tue, 17 Nov 2015 16:47:20 +0100 +Subject: [PATCH] Revert "bgo#520654 - Support --export-id in rsvg-convert(1)" + +This reverts commit fecfcce44a959daff80a4e0f9ced83d7cdcb5903. +--- + rsvg-cairo-render.c | 4 ++-- + rsvg-convert.c | 64 +++++++++++++---------------------------------------- + 2 files changed, 17 insertions(+), 51 deletions(-) + +Index: b/rsvg-cairo-render.c +=================================================================== +--- rsvg-cairo-render.c ++++ rsvg-cairo-render.c +@@ -205,8 +205,8 @@ + drawsub = rsvg_defs_lookup (handle->priv->defs, id); + + if (drawsub == NULL && id != NULL) { +- /* todo: there's no way to signal that @id doesn't exist */ +- return FALSE; ++ /* todo: there's no way to signal that @id doesn't exist */ ++ return FALSE; + } + + draw = rsvg_cairo_new_drawing_ctx (cr, handle); +Index: b/rsvg-convert.c +=================================================================== +--- rsvg-convert.c ++++ rsvg-convert.c +@@ -78,6 +78,14 @@ + } + } + ++static void ++rsvg_cairo_size_callback (int *width, int *height, gpointer data) ++{ ++ RsvgDimensionData *dimensions = data; ++ *width = dimensions->width; ++ *height = dimensions->height; ++} ++ + static cairo_status_t + rsvg_cairo_write_func (void *closure, const unsigned char *data, unsigned int length) + { +@@ -86,26 +94,6 @@ + return CAIRO_STATUS_WRITE_ERROR; + } + +-static char * +-get_lookup_id_from_command_line (const char *lookup_id) +-{ +- char *export_lookup_id; +- +- if (lookup_id == NULL) +- export_lookup_id = NULL; +- else { +- /* rsvg_handle_has_sub() and rsvg_defs_lookup() expect ids to have a +- * '#' prepended to them, so they can lookup ids in externs like +- * "subfile.svg#subid". For the user's convenience, we include this +- * '#' automatically; we only support specifying ids from the +- * toplevel, and don't expect users to lookup things in externs. +- */ +- export_lookup_id = g_strdup_printf ("#%s", lookup_id); +- } +- +- return export_lookup_id; +-} +- + int + main (int argc, char **argv) + { +@@ -120,7 +108,6 @@ + int bVersion = 0; + char *format = NULL; + char *output = NULL; +- char *export_id = NULL; + int keep_aspect_ratio = FALSE; + guint32 background_color = 0; + char *background_color_str = NULL; +@@ -139,7 +126,6 @@ + RsvgHandleFlags flags = RSVG_HANDLE_FLAGS_NONE; + RsvgDimensionData dimensions; + FILE *output_file = stdout; +- char *export_lookup_id; + + #ifdef G_OS_WIN32 + HANDLE handle; +@@ -164,8 +150,6 @@ + N_("save format [optional; defaults to 'png']"), N_("[png, pdf, ps, eps, svg, xml, recording]")}, + {"output", 'o', 0, G_OPTION_ARG_STRING, &output, + N_("output filename [optional; defaults to stdout]"), NULL}, +- {"export-id", 'i', 0, G_OPTION_ARG_STRING, &export_id, +- N_("SVG id of object to export [optional; defaults to exporting all objects]"), N_("<object id>")}, + {"keep-aspect-ratio", 'a', 0, G_OPTION_ARG_NONE, &keep_aspect_ratio, + N_("whether to preserve the aspect ratio [optional; defaults to FALSE]"), NULL}, + {"background-color", 'b', 0, G_OPTION_ARG_STRING, &background_color_str, +@@ -306,18 +290,13 @@ + exit (1); + } + +- export_lookup_id = get_lookup_id_from_command_line (export_id); +- if (export_lookup_id != NULL +- && !rsvg_handle_has_sub (rsvg, export_lookup_id)) { +- g_printerr (_("File %s does not have an object with id \"%s\"\n"), args[i], export_id); +- exit (1); +- } ++ /* in the case of multi-page output, all subsequent SVGs are scaled to the first's size */ ++ rsvg_handle_set_size_callback (rsvg, rsvg_cairo_size_callback, &dimensions, NULL); + + if (i == 0) { + struct RsvgSizeCallbackData size_data; + +- if (!rsvg_handle_get_dimensions_sub (rsvg, &dimensions, export_lookup_id)) +- g_printerr ("Could not get dimensions for file %s\n", args[i]); ++ rsvg_handle_get_dimensions (rsvg, &dimensions); + + /* if both are unspecified, assume user wants to zoom the image in at least 1 dimension */ + if (width == -1 && height == -1) { +@@ -325,7 +304,9 @@ + size_data.x_zoom = x_zoom; + size_data.y_zoom = y_zoom; + size_data.keep_aspect_ratio = keep_aspect_ratio; +- } else if (x_zoom == 1.0 && y_zoom == 1.0) { ++ } ++ /* if both are unspecified, assume user wants to resize image in at least 1 dimension */ ++ else if (x_zoom == 1.0 && y_zoom == 1.0) { + /* if one parameter is unspecified, assume user wants to keep the aspect ratio */ + if (width == -1 || height == -1) { + size_data.type = RSVG_SIZE_WH_MAX; +@@ -404,21 +385,7 @@ + cairo_fill (cr); + } + +- if (export_lookup_id) { +- RsvgPositionData pos; +- +- if (!rsvg_handle_get_position_sub (rsvg, &pos, export_lookup_id)) { +- g_printerr (_("File %s does not have an object with id \"%s\"\n"), args[i], export_id); +- exit (1); +- } +- +- /* Move the whole thing to 0, 0 so the object to export is at the origin */ +- cairo_translate (cr, -pos.x, -pos.y); +- } +- +- rsvg_handle_render_cairo_sub (rsvg, cr, export_lookup_id); +- +- g_free (export_lookup_id); ++ rsvg_handle_render_cairo (rsvg, cr); + + if (!format || !strcmp (format, "png")) + cairo_surface_write_to_png_stream (surface, rsvg_cairo_write_func, output_file); |