[librsvg/librsvg-2.46] drawing_ctx: pass colors and opacity by value



commit f02ce0a52e60afa3c9ffe0df0bad11e89d1e27e8
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun Oct 13 12:44:58 2019 +0200

    drawing_ctx: pass colors and opacity by value
    
    This commit also changes all the callers.

 rsvg_internals/src/drawing_ctx.rs     | 37 ++++++++++++++++++-----------------
 rsvg_internals/src/filters/context.rs |  4 ++--
 rsvg_internals/src/gradient.rs        |  8 ++++----
 rsvg_internals/src/paint_server.rs    |  4 ++--
 rsvg_internals/src/pattern.rs         |  2 +-
 rsvg_internals/src/text.rs            | 31 +++++++++++++++--------------
 6 files changed, 44 insertions(+), 42 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 732427fd..b477153d 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -600,16 +600,16 @@ impl DrawingCtx {
 
     fn set_color(
         &self,
-        color: &cssparser::Color,
-        opacity: &UnitInterval,
-        current_color: &cssparser::RGBA,
+        color: cssparser::Color,
+        opacity: UnitInterval,
+        current_color: cssparser::RGBA,
     ) {
-        let rgba = match *color {
-            cssparser::Color::RGBA(ref rgba) => rgba,
+        let rgba = match color {
+            cssparser::Color::RGBA(rgba) => rgba,
             cssparser::Color::CurrentColor => current_color,
         };
 
-        let &UnitInterval(o) = opacity;
+        let UnitInterval(o) = opacity;
         self.get_cairo_context().set_source_rgba(
             f64::from(rgba.red_f32()),
             f64::from(rgba.green_f32()),
@@ -632,9 +632,9 @@ impl DrawingCtx {
     pub fn set_source_paint_server(
         &mut self,
         ps: &PaintServer,
-        opacity: &UnitInterval,
+        opacity: UnitInterval,
         bbox: &BoundingBox,
-        current_color: &cssparser::RGBA,
+        current_color: cssparser::RGBA,
     ) -> Result<bool, RenderingError> {
         match *ps {
             PaintServer::Iri {
@@ -672,7 +672,7 @@ impl DrawingCtx {
                 }
 
                 if !had_paint_server && alternate.is_some() {
-                    self.set_color(alternate.as_ref().unwrap(), opacity, current_color);
+                    self.set_color(alternate.unwrap(), opacity, current_color);
                     had_paint_server = true;
                 } else {
                     rsvg_log!(
@@ -685,7 +685,7 @@ impl DrawingCtx {
             }
 
             PaintServer::SolidColor(color) => {
-                self.set_color(&color, opacity, current_color);
+                self.set_color(color, opacity, current_color);
                 Ok(true)
             }
 
@@ -733,12 +733,15 @@ impl DrawingCtx {
         // coordinate system in patterns.
         let bbox = compute_stroke_and_fill_box(cr, values);
 
-        let current_color = &values.color.0;
-
-        let fill_opacity = &values.fill_opacity.0;
+        let current_color = values.color.0;
 
         let res = self
-            .set_source_paint_server(&values.fill.0, fill_opacity, &bbox, current_color)
+            .set_source_paint_server(
+                &values.fill.0,
+                values.fill_opacity.0,
+                &bbox,
+                current_color
+            )
             .and_then(|had_paint_server| {
                 if had_paint_server {
                     if values.stroke.0 == PaintServer::None {
@@ -751,13 +754,11 @@ impl DrawingCtx {
                 Ok(())
             })
             .and_then(|_| {
-                let stroke_opacity = values.stroke_opacity.0;
-
                 self.set_source_paint_server(
                     &values.stroke.0,
-                    &stroke_opacity,
+                    values.stroke_opacity.0,
                     &bbox,
-                    &current_color,
+                    current_color,
                 )
                 .and_then(|had_paint_server| {
                     if had_paint_server {
diff --git a/rsvg_internals/src/filters/context.rs b/rsvg_internals/src/filters/context.rs
index 6ac196c1..47733774 100644
--- a/rsvg_internals/src/filters/context.rs
+++ b/rsvg_internals/src/filters/context.rs
@@ -338,9 +338,9 @@ impl FilterContext {
         let _ = draw_ctx
             .set_source_paint_server(
                 paint_server,
-                &opacity,
+                opacity,
                 &self.node_bbox,
-                &self.computed_from_node_being_filtered.color.0,
+                self.computed_from_node_being_filtered.color.0,
             )
             .and_then(|had_paint_server| {
                 if had_paint_server {
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 6b5a3540..6e87138f 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -695,7 +695,7 @@ impl AsPaintSource for Gradient {
         self,
         values: &ComputedValues,
         draw_ctx: &mut DrawingCtx,
-        opacity: &UnitInterval,
+        opacity: UnitInterval,
         bbox: &BoundingBox,
     ) -> Result<bool, RenderingError> {
         let params = if self.units == GradientUnits(CoordUnits::ObjectBoundingBox) {
@@ -735,7 +735,7 @@ impl Gradient {
         &self,
         pattern: &cairo::Gradient,
         bbox: &BoundingBox,
-        opacity: &UnitInterval,
+        opacity: UnitInterval,
     ) {
         let mut affine = self.affine;
 
@@ -759,10 +759,10 @@ impl Gradient {
         self.add_color_stops_to_pattern(pattern, opacity);
     }
 
-    fn add_color_stops_to_pattern(&self, pattern: &cairo::Gradient, opacity: &UnitInterval) {
+    fn add_color_stops_to_pattern(&self, pattern: &cairo::Gradient, opacity: UnitInterval) {
         for stop in &self.stops {
             let UnitInterval(stop_offset) = stop.offset;
-            let &UnitInterval(o) = opacity;
+            let UnitInterval(o) = opacity;
             let UnitInterval(stop_opacity) = stop.opacity;
 
             pattern.add_color_stop_rgba(
diff --git a/rsvg_internals/src/paint_server.rs b/rsvg_internals/src/paint_server.rs
index d7c104fa..357d3506 100644
--- a/rsvg_internals/src/paint_server.rs
+++ b/rsvg_internals/src/paint_server.rs
@@ -67,7 +67,7 @@ pub trait PaintSource {
         &self,
         node: &RsvgNode,
         draw_ctx: &mut DrawingCtx,
-        opacity: &UnitInterval,
+        opacity: UnitInterval,
         bbox: &BoundingBox,
     ) -> Result<bool, RenderingError> {
         match self.resolve(&node, draw_ctx) {
@@ -103,7 +103,7 @@ pub trait AsPaintSource {
         self,
         values: &ComputedValues,
         draw_ctx: &mut DrawingCtx,
-        opacity: &UnitInterval,
+        opacity: UnitInterval,
         bbox: &BoundingBox,
     ) -> Result<bool, RenderingError>;
 }
diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs
index a38e14a9..8edf4fe7 100644
--- a/rsvg_internals/src/pattern.rs
+++ b/rsvg_internals/src/pattern.rs
@@ -222,7 +222,7 @@ impl AsPaintSource for Pattern {
         self,
         values: &ComputedValues,
         draw_ctx: &mut DrawingCtx,
-        _opacity: &UnitInterval,
+        _opacity: UnitInterval,
         bbox: &BoundingBox,
     ) -> Result<bool, RenderingError> {
         let node_with_children = if let Some(n) = self.children.node_with_children() {
diff --git a/rsvg_internals/src/text.rs b/rsvg_internals/src/text.rs
index a3aaabbd..dd076377 100644
--- a/rsvg_internals/src/text.rs
+++ b/rsvg_internals/src/text.rs
@@ -305,34 +305,35 @@ impl PositionedSpan {
                 cr.rotate(-rotation);
             }
 
-            let current_color = &self.values.color.0;
-
-            let fill_opacity = &self.values.fill_opacity.0;
+            let current_color = self.values.color.0;
 
             let res = if !clipping {
-                dc.set_source_paint_server(&self.values.fill.0, fill_opacity, &bbox, current_color)
-                    .and_then(|had_paint_server| {
-                        if had_paint_server {
-                            pangocairo::functions::update_layout(&cr, &self.layout);
-                            pangocairo::functions::show_layout(&cr, &self.layout);
-                        };
-                        Ok(())
-                    })
+                dc.set_source_paint_server(
+                    &self.values.fill.0,
+                    self.values.fill_opacity.0,
+                    &bbox,
+                    current_color,
+                )
+                .and_then(|had_paint_server| {
+                    if had_paint_server {
+                        pangocairo::functions::update_layout(&cr, &self.layout);
+                        pangocairo::functions::show_layout(&cr, &self.layout);
+                    };
+                    Ok(())
+                })
             } else {
                 Ok(())
             };
 
             if res.is_ok() {
-                let stroke_opacity = &self.values.stroke_opacity.0;
-
                 let mut need_layout_path = clipping;
 
                 let res = if !clipping {
                     dc.set_source_paint_server(
                         &self.values.stroke.0,
-                        stroke_opacity,
+                        self.values.stroke_opacity.0,
                         &bbox,
-                        &current_color,
+                        current_color,
                     )
                     .and_then(|had_paint_server| {
                         if had_paint_server {


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