[goffice] Fixed SVG images size



commit 6644b71c51c33d91561086447d225a0fe3bae32d
Author: Jean Brefort <jean brefort normalesup org>
Date:   Thu Oct 27 20:09:45 2011 +0200

    Fixed SVG images size

 ChangeLog                |   10 ++++++++++
 goffice/utils/go-emf.c   |    2 ++
 goffice/utils/go-image.c |   17 +++++++++++++++++
 goffice/utils/go-image.h |    3 +++
 goffice/utils/go-svg.c   |   10 ++++++++++
 5 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 45f1028..fa811dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,16 @@
 
 2011-10-27  Jean Brefort  <jean brefort normalesup org>
 
+	* goffice/utils/go-emf.c: fixed a compilation warning.
+	* goffice/utils/go-image.c (go_image_get_height),
+	(go_image_set_default_dpi), (go_image_get_default_dpi): fixed svg image
+	size. [#628472]
+	* goffice/utils/go-image.h: ditto.
+	* goffice/utils/go-svg.c (go_svg_load_data),
+	(go_svg_new_from_file), (go_svg_new_from_data): ditto.
+
+2011-10-27  Jean Brefort  <jean brefort normalesup org>
+
 	* goffice/canvas/goc-canvas.c: new helper functions.
 	* goffice/canvas/goc-canvas.h: ditto.
 	* goffice/canvas/goc-image.c: add crop.
diff --git a/goffice/utils/go-emf.c b/goffice/utils/go-emf.c
index a157713..e41d08e 100644
--- a/goffice/utils/go-emf.c
+++ b/goffice/utils/go-emf.c
@@ -229,8 +229,10 @@ go_emf_new_from_data (char const *data, size_t length, GError **error)
  * Parsing code                                                               *
  * ****************************************************************************/
 
+#ifdef GOFFICE_EMF_SUPPORT
 static gboolean go_emf_parse (GOEmf *emf, GsfInput *input, GError **error)
 {
 	/* FIXME: implement */
 	return FALSE;
 }
+#endif
diff --git a/goffice/utils/go-image.c b/goffice/utils/go-image.c
index 2c61d89..49833e5 100644
--- a/goffice/utils/go-image.c
+++ b/goffice/utils/go-image.c
@@ -25,6 +25,7 @@
 #include <gsf/gsf-utils.h>
 #include <gsf/gsf-impl-utils.h>
 #include <glib/gi18n-lib.h>
+#include <librsvg/rsvg.h>
 
 static GOImageFormatInfo *pixbuf_image_format_infos = NULL;
 static GHashTable *pixbuf_mimes = NULL;
@@ -557,3 +558,19 @@ go_image_get_height (GOImage const *image)
 {
 	return image->height;
 }
+
+static double _go_image_dpi_x = 96.,  _go_image_dpi_y = 96.;
+
+void
+go_image_set_default_dpi (double dpi_x, double dpi_y)
+{
+	_go_image_dpi_x = dpi_x;
+	_go_image_dpi_y = dpi_y;
+}
+
+void
+go_image_get_default_dpi (double *dpi_x, double *dpi_y)
+{
+	*dpi_x = _go_image_dpi_x;
+	*dpi_y = _go_image_dpi_y;
+}
diff --git a/goffice/utils/go-image.h b/goffice/utils/go-image.h
index 59a0a8f..2d1b836 100644
--- a/goffice/utils/go-image.h
+++ b/goffice/utils/go-image.h
@@ -112,6 +112,9 @@ void		 go_image_load_data		(GOImage *image, GsfXMLIn *xin);
 double		 go_image_get_width		(GOImage const *image);
 double		 go_image_get_height		(GOImage const *image);
 
+void		 go_image_set_default_dpi       (double dpi_x, double dpi_y);
+void		 go_image_get_default_dpi       (double *dpi_x, double *dpi_y);
+
 /* Protected */
 void		 _go_image_changed		(GOImage *image, double width, double height);
 
diff --git a/goffice/utils/go-svg.c b/goffice/utils/go-svg.c
index 712a0aa..905d9cd 100644
--- a/goffice/utils/go-svg.c
+++ b/goffice/utils/go-svg.c
@@ -58,10 +58,13 @@ static void
 go_svg_load_data (GOImage *image, GsfXMLIn *xin)
 {
 	GOSvg *svg = GO_SVG (image);
+	double dpi_x, dpi_y;
 	svg->data_length = gsf_base64_decode_simple (xin->content->str, strlen(xin->content->str));
 	image->data = g_malloc (svg->data_length);
 	memcpy (image->data, xin->content->str, svg->data_length);
 	svg->handle = rsvg_handle_new_from_data (image->data, svg->data_length, NULL);
+	go_image_get_default_dpi (&dpi_x, &dpi_y);
+	rsvg_handle_set_dpi_x_y (svg->handle, dpi_x, dpi_y);
 }
 
 static void
@@ -160,6 +163,8 @@ go_svg_new_from_file (char const *filename, GError **error)
 	GsfInput *input = gsf_input_stdio_new (filename, error);
 	RsvgDimensionData dim;
 	GOImage *image;
+	double dpi_x, dpi_y;
+
 	if (!input)
 		return NULL;
 	svg->data_length = gsf_input_size (input);
@@ -176,6 +181,8 @@ go_svg_new_from_file (char const *filename, GError **error)
 		g_object_unref (svg);
 		return NULL;
 	}
+	go_image_get_default_dpi (&dpi_x, &dpi_y);
+	rsvg_handle_set_dpi_x_y (svg->handle, dpi_x, dpi_y);
 	rsvg_handle_get_dimensions (svg->handle, &dim);
 	image->width = dim.width;
 	image->height = dim.height;
@@ -188,6 +195,7 @@ go_svg_new_from_data (char const *data, size_t length, GError **error)
 	GOSvg *svg;
 	GOImage *image;
 	RsvgDimensionData dim;
+	double dpi_x, dpi_y;
 
 	g_return_val_if_fail (data != NULL && length != 0, NULL);
 	svg = g_object_new (GO_TYPE_SVG, NULL);
@@ -204,6 +212,8 @@ go_svg_new_from_data (char const *data, size_t length, GError **error)
 		g_object_unref (svg);
 		return NULL;
 	}
+	go_image_get_default_dpi (&dpi_x, &dpi_y);
+	rsvg_handle_set_dpi_x_y (svg->handle, dpi_x, dpi_y);
 	rsvg_handle_get_dimensions (svg->handle, &dim);
 	image->width = dim.width;
 	image->height = dim.height;



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