[lasem] svg_view: fix handling of group opacity.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_view: fix handling of group opacity.
- Date: Mon, 15 Oct 2012 22:00:21 +0000 (UTC)
commit 66d79075c70d8a9fe3708e0b75ef71e73ff49de3
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Mon Oct 15 23:58:10 2012 +0200
svg_view: fix handling of group opacity.
group opacity attribute was missed in some cases. The drawback of
this patch is the optimisation of simple shape rendering with group
opacity < 1.0 is disabled for now.
src/lsmsvgelement.c | 4 ----
src/lsmsvgview.c | 39 ++++++++++++++++-----------------------
src/lsmsvgview.h | 3 ---
3 files changed, 16 insertions(+), 30 deletions(-)
---
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 750a489..91e575b 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -144,13 +144,9 @@ _render (LsmSvgElement *element, LsmSvgView *view)
lsm_debug_render ("[LsmSvgElement::_render");
- lsm_svg_view_push_group_opacity (view);
-
for (node = LSM_DOM_NODE (element)->first_child; node != NULL; node = node->next_sibling)
if (LSM_IS_SVG_ELEMENT (node))
lsm_svg_element_render (LSM_SVG_ELEMENT (node), view);
-
- lsm_svg_view_pop_group_opacity (view);
}
static void
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index ecb11f5..1b39f2a 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -1068,6 +1068,9 @@ paint (LsmSvgView *view, LsmSvgViewPathInfos *path_infos)
cairo = view->dom_view.cairo;
style = view->style;
+#if 0
+ /* This is disabled for now, as care should be taken in push_composition to
+ * defer group opacity for simple shape to this function. */
if (style->opacity != NULL) {
group_opacity = style->opacity->value;
@@ -1078,8 +1081,12 @@ paint (LsmSvgView *view, LsmSvgViewPathInfos *path_infos)
use_group = FALSE;
group_opacity = 1.0;
}
+#else
+ use_group = FALSE;
+ group_opacity = 1.0;
+#endif
- /* FIXME Instead of push_group, restrict to the current path bounding box */
+ /* Instead of push_group, we should restrict to the current path bounding box */
if (use_group)
cairo_push_group (cairo);
@@ -1766,28 +1773,6 @@ lsm_svg_view_pop_matrix (LsmSvgView *view)
}
}
-void
-lsm_svg_view_push_group_opacity (LsmSvgView *view)
-{
- g_return_if_fail (LSM_IS_SVG_VIEW (view));
- g_return_if_fail (view->style != NULL);
-
- if (view->style->opacity->value < 1.0)
- cairo_push_group (view->dom_view.cairo);
-}
-
-void
-lsm_svg_view_pop_group_opacity (LsmSvgView *view)
-{
- g_return_if_fail (LSM_IS_SVG_VIEW (view));
- g_return_if_fail (view->style != NULL);
-
- if (view->style->opacity->value < 1.0) {
- cairo_pop_group_to_source (view->dom_view.cairo);
- cairo_paint_with_alpha (view->dom_view.cairo, view->style->opacity->value);
- }
-}
-
static void
lsm_svg_view_push_clip (LsmSvgView *view)
{
@@ -2300,6 +2285,9 @@ lsm_svg_view_push_composition (LsmSvgView *view, LsmSvgStyle *style)
lsm_log_render ("[SvgView::push_composition]");
+ if (view->style->opacity->value < 1.0)
+ cairo_push_group (view->dom_view.cairo);
+
if (g_strcmp0 (style->clip_path->value, "none") != 0) {
lsm_debug_render ("[LsmSvgView::push_style] Start clip '%s'", style->clip_path->value);
lsm_svg_view_push_clip (view);
@@ -2343,6 +2331,11 @@ void lsm_svg_view_pop_composition (LsmSvgView *view)
if (g_strcmp0 (view->style->clip_path->value, "none") != 0)
lsm_svg_view_pop_clip (view);
+ if (view->style->opacity->value < 1.0) {
+ cairo_pop_group_to_source (view->dom_view.cairo);
+ cairo_paint_with_alpha (view->dom_view.cairo, view->style->opacity->value);
+ }
+
lsm_svg_view_pop_style (view);
}
diff --git a/src/lsmsvgview.h b/src/lsmsvgview.h
index a23ad3f..7b7124a 100644
--- a/src/lsmsvgview.h
+++ b/src/lsmsvgview.h
@@ -144,9 +144,6 @@ void lsm_svg_view_pop_matrix (LsmSvgView *view);
void lsm_svg_view_push_element (LsmSvgView *view, const LsmSvgElement *element);
void lsm_svg_view_pop_element (LsmSvgView *view);
-void lsm_svg_view_push_group_opacity (LsmSvgView *view);
-void lsm_svg_view_pop_group_opacity (LsmSvgView *view);
-
void lsm_svg_view_push_style (LsmSvgView *view, LsmSvgStyle *style);
void lsm_svg_view_pop_style (LsmSvgView *view);
void lsm_svg_view_push_composition (LsmSvgView *view, LsmSvgStyle *style);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]