[librsvg: 2/36] gradient: factor out to_cairo_gradient method
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 2/36] gradient: factor out to_cairo_gradient method
- Date: Mon, 1 Jul 2019 01:53:48 +0000 (UTC)
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, ¶ms),
- v.y1.as_ref().unwrap().normalize(values, ¶ms),
- v.x2.as_ref().unwrap().normalize(values, ¶ms),
- v.y2.as_ref().unwrap().normalize(values, ¶ms),
- );
-
+ let mut pattern = gradient.variant.borrow().to_cairo_gradient(values, ¶ms);
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, ¶ms);
- let n_cy = v.cy.as_ref().unwrap().normalize(values, ¶ms);
- let n_r = v.r.as_ref().unwrap().normalize(values, ¶ms);
- let n_fx = v.fx.as_ref().unwrap().normalize(values, ¶ms);
- let n_fy = v.fy.as_ref().unwrap().normalize(values, ¶ms);
-
- 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, ¶ms);
let cr = draw_ctx.get_cairo_context();
gradient
.common
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]