[librsvg: 2/36] gradient: factor out to_cairo_gradient method



commit 913019198d1ea366307e7af8cee5f6c67aadc9b0
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun Jun 30 09:27:35 2019 +0200

    gradient: factor out to_cairo_gradient method

 rsvg_internals/src/gradient.rs | 50 ++++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 19 deletions(-)
---
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 66c9658d..0201d8f6 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -7,7 +7,7 @@ use std::cell::{Cell, RefCell};
 use crate::allowed_url::Fragment;
 use crate::bbox::*;
 use crate::coord_units::CoordUnits;
-use crate::drawing_ctx::{AcquiredNode, DrawingCtx, NodeStack};
+use crate::drawing_ctx::{AcquiredNode, DrawingCtx, NodeStack, ViewParams};
 use crate::error::*;
 use crate::length::*;
 use crate::node::{CascadedValues, NodeResult, NodeTrait, NodeType, RsvgNode};
@@ -302,6 +302,19 @@ impl GradientLinear {
 
         Ok(())
     }
+
+    fn to_cairo_gradient(
+        &self,
+        values: &ComputedValues,
+        params: &ViewParams,
+    ) -> cairo::LinearGradient {
+        cairo::LinearGradient::new(
+            self.x1.as_ref().unwrap().normalize(values, params),
+            self.y1.as_ref().unwrap().normalize(values, params),
+            self.x2.as_ref().unwrap().normalize(values, params),
+            self.y2.as_ref().unwrap().normalize(values, params),
+        )
+    }
 }
 
 #[derive(Copy, Clone, Default)]
@@ -357,6 +370,21 @@ impl GradientRadial {
 
         Ok(())
     }
+
+    fn to_cairo_gradient(
+        &self,
+        values: &ComputedValues,
+        params: &ViewParams,
+    ) -> cairo::RadialGradient {
+        let n_cx = self.cx.as_ref().unwrap().normalize(values, params);
+        let n_cy = self.cy.as_ref().unwrap().normalize(values, params);
+        let n_r = self.r.as_ref().unwrap().normalize(values, params);
+        let n_fx = self.fx.as_ref().unwrap().normalize(values, params);
+        let n_fy = self.fy.as_ref().unwrap().normalize(values, params);
+        let (new_fx, new_fy) = fix_focus_point(n_fx, n_fy, n_cx, n_cy, n_r);
+
+        cairo::RadialGradient::new(new_fx, new_fy, 0.0, n_cx, n_cy, n_r)
+    }
 }
 
 // SVG defines radial gradients as being inside a circle (cx, cy, radius).  The
@@ -592,14 +620,7 @@ impl PaintSource for NodeLinearGradient {
             draw_ctx.get_view_params()
         };
 
-        let v = gradient.variant.borrow();
-        let mut pattern = cairo::LinearGradient::new(
-            v.x1.as_ref().unwrap().normalize(values, &params),
-            v.y1.as_ref().unwrap().normalize(values, &params),
-            v.x2.as_ref().unwrap().normalize(values, &params),
-            v.y2.as_ref().unwrap().normalize(values, &params),
-        );
-
+        let mut pattern = gradient.variant.borrow().to_cairo_gradient(values, &params);
         let cr = draw_ctx.get_cairo_context();
         gradient
             .common
@@ -648,16 +669,7 @@ impl PaintSource for NodeRadialGradient {
             draw_ctx.get_view_params()
         };
 
-        let v = gradient.variant.borrow();
-        let n_cx = v.cx.as_ref().unwrap().normalize(values, &params);
-        let n_cy = v.cy.as_ref().unwrap().normalize(values, &params);
-        let n_r = v.r.as_ref().unwrap().normalize(values, &params);
-        let n_fx = v.fx.as_ref().unwrap().normalize(values, &params);
-        let n_fy = v.fy.as_ref().unwrap().normalize(values, &params);
-
-        let (new_fx, new_fy) = fix_focus_point(n_fx, n_fy, n_cx, n_cy, n_r);
-        let mut pattern = cairo::RadialGradient::new(new_fx, new_fy, 0.0, n_cx, n_cy, n_r);
-
+        let mut pattern = gradient.variant.borrow().to_cairo_gradient(values, &params);
         let cr = draw_ctx.get_cairo_context();
         gradient
             .common


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