[librsvg] shapes::render_path_builder() - push/pop a layer here, not in the drawing function



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]