[lasem] svg_element: push transform matrix before style.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_element: push transform matrix before style.
- Date: Sun, 30 Sep 2012 20:06:10 +0000 (UTC)
commit a1e6e2ffc024acdb61180023aae9a951eb5785c7
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sun Sep 30 22:04:30 2012 +0200
svg_element: push transform matrix before style.
If style contain a clipPath, tranform matrix must be active before
the emission of the clip path.
src/lsmsvgelement.c | 28 +++++++++++++++++-----------
src/lsmsvgtransformable.c | 3 +--
src/lsmsvgview.c | 6 ++++++
3 files changed, 24 insertions(+), 13 deletions(-)
---
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 9ea52b4..b8fe96c 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -153,18 +153,14 @@ _render (LsmSvgElement *element, LsmSvgView *view)
lsm_svg_view_pop_group_opacity (view);
}
-void
-lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
+static void
+_transformed_render (LsmSvgElement *element, LsmSvgView *view)
{
LsmSvgElementClass *element_class;
const LsmSvgStyle *parent_style;
LsmSvgStyle *style;
- g_return_if_fail (LSM_IS_SVG_ELEMENT (element));
-
element_class = LSM_SVG_ELEMENT_GET_CLASS (element);
- if (element_class->render == NULL)
- return;
parent_style = lsm_svg_view_get_current_style (view);
style = lsm_svg_style_new_inherited (parent_style, &element->property_bag);
@@ -178,10 +174,7 @@ lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
lsm_svg_view_push_element (view, element);
lsm_svg_view_push_style (view, style);
- if (element_class->transformed_render)
- element_class->transformed_render (element, view);
- else
- element_class->render (element, view);
+ element_class->render (element, view);
lsm_svg_view_pop_style (view);
lsm_svg_view_pop_element (view);
@@ -190,6 +183,19 @@ lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
lsm_svg_style_unref (style);
}
+void
+lsm_svg_element_render (LsmSvgElement *element, LsmSvgView *view)
+{
+ LsmSvgElementClass *element_class;
+
+ g_return_if_fail (LSM_IS_SVG_ELEMENT (element));
+
+ element_class = LSM_SVG_ELEMENT_GET_CLASS (element);
+
+ if (element_class->render != NULL)
+ element_class->transformed_render (element, view);
+}
+
static void
lsm_svg_element_enable_rendering (LsmSvgElement *element)
{
@@ -355,7 +361,7 @@ lsm_svg_element_class_init (LsmSvgElementClass *s_element_class)
s_element_class->render = _render;
s_element_class->get_extents = _get_extents;
- s_element_class->transformed_render = NULL;
+ s_element_class->transformed_render = _transformed_render;
s_element_class->transformed_get_extents = NULL;
s_element_class->attribute_manager = lsm_attribute_manager_new (G_N_ELEMENTS (lsm_svg_attribute_infos),
lsm_svg_attribute_infos);
diff --git a/src/lsmsvgtransformable.c b/src/lsmsvgtransformable.c
index 989bc47..b435d17 100644
--- a/src/lsmsvgtransformable.c
+++ b/src/lsmsvgtransformable.c
@@ -37,7 +37,6 @@ static void
lsm_svg_transformable_transformed_render (LsmSvgElement *element, LsmSvgView *view)
{
LsmSvgTransformable *transformable = LSM_SVG_TRANSFORMABLE (element);
- LsmSvgElementClass *element_class = LSM_SVG_ELEMENT_GET_CLASS (element);
gboolean is_identity_transform;
gboolean is_matrix_invertible = TRUE;
@@ -49,7 +48,7 @@ lsm_svg_transformable_transformed_render (LsmSvgElement *element, LsmSvgView *vi
is_matrix_invertible = TRUE;
if (is_matrix_invertible)
- element_class->render (element, view);
+ LSM_SVG_ELEMENT_CLASS (parent_class)->transformed_render (element, view);
if (!is_identity_transform)
lsm_svg_view_pop_matrix (view);
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index 6eb8d7a..bec41d6 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -1784,6 +1784,12 @@ lsm_svg_view_push_clip (LsmSvgView *view)
view->clip_extents.width = extents.x2 - extents.x1;
view->clip_extents.height = extents.y2 - extents.y1;
+ lsm_debug_render ("[LsmSvgView::push_clip] x=%g y=%g w=%g h=%g",
+ view->clip_extents.x,
+ view->clip_extents.y,
+ view->clip_extents.width,
+ view->clip_extents.height);
+
element = lsm_svg_document_get_element_by_url (LSM_SVG_DOCUMENT (view->dom_view.document), url);
if (LSM_IS_SVG_CLIP_PATH_ELEMENT (element) &&
!lsm_svg_view_circular_reference_check (view, element)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]