aboutsummaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authordanfe <danfe@FreeBSD.org>2016-07-28 14:40:41 +0800
committerdanfe <danfe@FreeBSD.org>2016-07-28 14:40:41 +0800
commit141027705527f9873f40bca7a5a6ca301c9a36fa (patch)
treee413e3499fa2f94334028751cbd6210192458f50 /graphics
parentd1c98a963e15d062cea22a4b8488cabc76c0303a (diff)
downloadfreebsd-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/Makefile1
-rw-r--r--graphics/librsvg2/files/patch-revert-bgo-520654-support-export-id-in-rsvg-convert153
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);