[lasem] [SVG] Fix nested SVG position.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: svn-commits-list gnome org
- Subject: [lasem] [SVG] Fix nested SVG position.
- Date: Fri, 15 May 2009 17:02:41 -0400 (EDT)
commit bfa156ca89158df7b5f6c24cab887dfc445969b3
Author: Emmanuel Pacaud <emmanuel pacaud lapp in2p3 fr>
Date: Fri May 15 23:02:13 2009 +0200
[SVG] Fix nested SVG position.
---
src/lsmsvgsvgelement.c | 43 +++++++++++++++++++++++++++----------------
1 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/src/lsmsvgsvgelement.c b/src/lsmsvgsvgelement.c
index d553671..27b2f34 100644
--- a/src/lsmsvgsvgelement.c
+++ b/src/lsmsvgsvgelement.c
@@ -129,37 +129,46 @@ static void
lsm_svg_svg_element_graphic_render (LsmSvgElement *self, LsmSvgView *view)
{
LsmSvgSvgElement *svg = LSM_SVG_SVG_ELEMENT (self);
- const LsmBox *viewbox;
gboolean is_viewbox_defined;
+ LsmSvgMatrix matrix;
+ double svg_x;
+ double svg_y;
+ double svg_width;
+ double svg_height;
+
+ svg_x = lsm_svg_view_normalize_length (view, &svg->x.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+ svg_y = lsm_svg_view_normalize_length (view, &svg->y.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);
+ svg_width = lsm_svg_view_normalize_length (view, &svg->width.length, LSM_SVG_LENGTH_DIRECTION_HORIZONTAL);
+ svg_height = lsm_svg_view_normalize_length (view, &svg->height.length, LSM_SVG_LENGTH_DIRECTION_VERTICAL);
is_viewbox_defined = lsm_dom_attribute_is_defined ((LsmDomAttribute *) &svg->viewbox);
- if (is_viewbox_defined) {
- LsmSvgMatrix matrix;
+ if (is_viewbox_defined && (svg->viewbox.value.width <= 0.0 ||
+ svg->viewbox.value.height <= 0.0))
+ return;
- if (svg->viewbox.value.width <= 0.0 ||
- svg->viewbox.value.height <= 0.0)
- return;
+ lsm_svg_matrix_init_translate (&matrix, svg_x, svg_y);
+ lsm_svg_view_push_transform (view, &matrix);
- viewbox = &svg->viewbox.value;
+ if (is_viewbox_defined) {
lsm_svg_matrix_init (&matrix,
- svg->svg_box.width / svg->viewbox.value.width, 0.0,
- 0.0 , svg->svg_box.height / svg->viewbox.value.height,
+ svg_width / svg->viewbox.value.width, 0.0,
+ 0.0 , svg_height / svg->viewbox.value.height,
-svg->viewbox.value.x,-svg->viewbox.value.y);
lsm_svg_view_push_transform (view, &matrix);
- } else
- viewbox = &svg->svg_box;
-
- lsm_svg_view_push_viewbox (view, viewbox);
+ lsm_svg_view_push_viewbox (view, &svg->viewbox.value);
+ }
LSM_SVG_GRAPHIC_CLASS (parent_class)->graphic_render (self, view);
- lsm_svg_view_pop_viewbox (view);
-
- if (is_viewbox_defined)
+ if (is_viewbox_defined) {
+ lsm_svg_view_pop_viewbox (view);
lsm_svg_view_pop_transform (view);
+ }
+
+ lsm_svg_view_pop_transform (view);
}
/* LsmSvgSvgElement implementation */
@@ -193,7 +202,9 @@ lsm_svg_svg_element_update (LsmSvgSvgElement *svg_element)
void
lsm_svg_svg_element_render (LsmSvgSvgElement *svg, LsmSvgView *view)
{
+ lsm_svg_view_push_viewbox (view, &svg->svg_box);
lsm_svg_element_render (LSM_SVG_ELEMENT (svg), view);
+ lsm_svg_view_pop_viewbox (view);
}
LsmDomNode *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]