[librsvg: 22/31] Shape now contains its Stroke




commit 11db795348fea483a4436203ccc0041f040dcb0f
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Jun 2 19:59:32 2021 -0500

    Shape now contains its Stroke

 src/drawing_ctx.rs | 17 ++++++-----------
 src/shapes.rs      |  8 +++++++-
 2 files changed, 13 insertions(+), 12 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 7fc1e9e4..f8cc599c 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -1194,6 +1194,7 @@ impl DrawingCtx {
 
     pub fn draw_shape(
         &mut self,
+        view_params: &ViewParams,
         shape: &Shape,
         node: &Node,
         acquired_nodes: &mut AcquiredNodes<'_>,
@@ -1217,7 +1218,7 @@ impl DrawingCtx {
                 let cr = dc.cr.clone();
                 let transform = dc.get_transform();
                 let mut path_helper =
-                    PathHelper::new(&cr, transform, &shape.path, values.stroke_line_cap());
+                    PathHelper::new(&cr, transform, &shape.path, shape.stroke.line_cap);
 
                 if clipping {
                     if values.is_visible() {
@@ -1229,13 +1230,7 @@ impl DrawingCtx {
 
                 cr.set_antialias(cairo::Antialias::from(values.shape_rendering()));
 
-                let view_params = dc.get_view_params();
-                let stroke = {
-                    let params = NormalizeParams::new(values, &view_params);
-                    Stroke::new(values, &params)
-                };
-
-                setup_cr_for_stroke(&cr, &stroke);
+                setup_cr_for_stroke(&cr, &shape.stroke);
 
                 cr.set_fill_rule(cairo::FillRule::from(values.fill_rule()));
 
@@ -1252,13 +1247,13 @@ impl DrawingCtx {
                         .resolve(an, values.fill_opacity().0, values.color().0);
 
                 path_helper.set()?;
-                let bbox = compute_stroke_and_fill_box(&cr, &stroke, &stroke_paint_source);
+                let bbox = compute_stroke_and_fill_box(&cr, &shape.stroke, &stroke_paint_source);
 
                 let stroke_paint_source =
-                    stroke_paint_source.to_user_space(&bbox, &view_params, values);
+                    stroke_paint_source.to_user_space(&bbox, view_params, values);
 
                 let fill_paint_source =
-                    fill_paint_source.to_user_space(&bbox, &view_params, values);
+                    fill_paint_source.to_user_space(&bbox, view_params, values);
 
                 if values.is_visible() {
                     for &target in &values.paint_order().targets {
diff --git a/src/shapes.rs b/src/shapes.rs
index a0df8aa4..6cf806b6 100644
--- a/src/shapes.rs
+++ b/src/shapes.rs
@@ -11,6 +11,7 @@ use crate::document::AcquiredNodes;
 use crate::drawing_ctx::DrawingCtx;
 use crate::element::{Draw, ElementResult, SetAttributes};
 use crate::error::*;
+use crate::layout::Stroke;
 use crate::length::*;
 use crate::node::{CascadedValues, Node};
 use crate::parsers::{optional_comma, Parse, ParseValue};
@@ -32,6 +33,7 @@ struct ShapeDef {
 pub struct Shape {
     pub path: Rc<SvgPath>,
     pub markers: Markers,
+    pub stroke: Stroke,
 }
 
 impl ShapeDef {
@@ -59,11 +61,15 @@ macro_rules! impl_draw {
                 let view_params = draw_ctx.get_view_params();
                 let params = NormalizeParams::new(values, &view_params);
                 let shape_def = self.make_shape(&params);
+
+                let stroke = Stroke::new(values, &params);
+                
                 let shape = Shape {
                     path: shape_def.path,
                     markers: shape_def.markers,
+                    stroke,
                 };
-                draw_ctx.draw_shape(&shape, node, acquired_nodes, values, clipping)
+                draw_ctx.draw_shape(&view_params, &shape, node, acquired_nodes, values, clipping)
             }
         }
     };


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]