[librsvg] shapes::render_path_builder() - push/pop a layer here, not in the drawing function
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] shapes::render_path_builder() - push/pop a layer here, not in the drawing function
- Date: Thu, 31 May 2018 16:55:21 +0000 (UTC)
commit 0dbcc8ae386fa40cdf0a8b3b76a94bb055a4ee56
Author: Federico Mena Quintero <federico gnome org>
Date: Thu May 31 11:43:39 2018 -0500
shapes::render_path_builder() - push/pop a layer here, not in the drawing function
Let's try to keep the innermost drawing functions free from layers
nonsense; they should basically just be thin wrappers over the Cairo
machinery.
This should also help abstract out push/pop_discrete_layer() into a
separate object.
rsvg_internals/src/draw.rs | 6 ------
rsvg_internals/src/shapes.rs | 10 +++++++++-
2 files changed, 9 insertions(+), 7 deletions(-)
---
diff --git a/rsvg_internals/src/draw.rs b/rsvg_internals/src/draw.rs
index fedda7e2..7d5417f9 100644
--- a/rsvg_internals/src/draw.rs
+++ b/rsvg_internals/src/draw.rs
@@ -47,10 +47,6 @@ pub fn draw_path_builder(
builder: &PathBuilder,
clipping: bool,
) {
- if !clipping {
- drawing_ctx::push_discrete_layer(draw_ctx, values, clipping);
- }
-
let cr = drawing_ctx::get_cairo_context(draw_ctx);
set_affine_on_cr(draw_ctx, &cr);
@@ -63,8 +59,6 @@ pub fn draw_path_builder(
cr.set_fill_rule(cairo::FillRule::from(values.fill_rule));
stroke_and_fill(&cr, draw_ctx, values);
-
- drawing_ctx::pop_discrete_layer(draw_ctx, values, clipping);
}
}
diff --git a/rsvg_internals/src/shapes.rs b/rsvg_internals/src/shapes.rs
index a16aee53..f44dbb7c 100644
--- a/rsvg_internals/src/shapes.rs
+++ b/rsvg_internals/src/shapes.rs
@@ -5,7 +5,7 @@ use std::cell::RefCell;
use attributes::Attribute;
use draw::draw_path_builder;
-use drawing_ctx::RsvgDrawingCtx;
+use drawing_ctx::{self, RsvgDrawingCtx};
use error::*;
use handle::RsvgHandle;
use length::*;
@@ -24,8 +24,16 @@ fn render_path_builder(
render_markers: bool,
clipping: bool,
) {
+ if !clipping {
+ drawing_ctx::push_discrete_layer(draw_ctx, values, clipping);
+ }
+
draw_path_builder(draw_ctx, values, builder, clipping);
+ if !clipping {
+ drawing_ctx::pop_discrete_layer(draw_ctx, values, clipping);
+ }
+
if render_markers {
marker::render_markers_for_path_builder(builder, draw_ctx, values, clipping);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]