[librsvg: 12/45] Specify the resolved gradient type to impl_paint_source!()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 12/45] Specify the resolved gradient type to impl_paint_source!()
- Date: Tue, 1 Oct 2019 15:07:57 +0000 (UTC)
commit ca80aa8b2f978d64bbe8c3f8197badf929806218
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Sep 26 18:34:06 2019 -0500
Specify the resolved gradient type to impl_paint_source!()
This lets its set_pattern_on_draw_context() be shorter, because it
doesn't have to call to_resolved() now.
rsvg_internals/src/gradient.rs | 31 +++++++++++++------------------
1 file changed, 13 insertions(+), 18 deletions(-)
---
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 810ea2da..ec3e15df 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -578,9 +578,9 @@ macro_rules! impl_resolve {
}
macro_rules! impl_paint_source {
- ($gradient:tt, $node_type:pat, $other_gradient:ty, $other_type:pat) => {
+ ($gradient:tt, $node_type:pat, $other_gradient:ty, $other_type:pat, $resolved:ty,) => {
impl PaintSource for $gradient {
- type Resolved = $gradient;
+ type Resolved = $resolved;
fn resolve(
&self,
@@ -630,14 +630,14 @@ macro_rules! impl_paint_source {
}
if result.common.bounds_are_valid(bbox) {
- Ok(Some(result))
+ Ok(Some(result.to_resolved()))
} else {
Ok(None)
}
}
}
- impl ResolvedPaintSource for $gradient {
+ impl ResolvedPaintSource for $resolved {
fn set_pattern_on_draw_context(
self,
values: &ComputedValues,
@@ -645,22 +645,15 @@ macro_rules! impl_paint_source {
opacity: &UnitInterval,
bbox: &BoundingBox,
) -> Result<bool, RenderingError> {
- assert!(self.is_resolved());
-
- let $gradient { common, variant } = self;
-
- let common = common.to_resolved();
- let variant = variant.to_resolved();
-
- let units = common.units;
+ let units = self.common.units;
let params = if units == GradientUnits(CoordUnits::ObjectBoundingBox) {
draw_ctx.push_view_box(1.0, 1.0)
} else {
draw_ctx.get_view_params()
};
- let p = variant.to_cairo_gradient(values, ¶ms);
- common.set_on_cairo_pattern(&p, bbox, opacity);
+ let p = self.variant.to_cairo_gradient(values, ¶ms);
+ self.common.set_on_cairo_pattern(&p, bbox, opacity);
let cr = draw_ctx.get_cairo_context();
cr.set_source(&p);
@@ -692,7 +685,7 @@ pub struct NodeLinearGradient {
pub variant: LinearGradientData,
}
-struct ResolvedLinearGradient {
+pub struct ResolvedLinearGradient {
common: CommonGradient,
variant: LinearGradient,
}
@@ -707,7 +700,8 @@ impl_paint_source!(
NodeLinearGradient,
NodeType::LinearGradient,
NodeRadialGradient,
- NodeType::RadialGradient
+ NodeType::RadialGradient,
+ ResolvedLinearGradient,
);
#[derive(Clone, Default)]
@@ -716,7 +710,7 @@ pub struct NodeRadialGradient {
pub variant: RadialGradientData,
}
-struct ResolvedRadialGradient {
+pub struct ResolvedRadialGradient {
common: CommonGradient,
variant: RadialGradient,
}
@@ -731,7 +725,8 @@ impl_paint_source!(
NodeRadialGradient,
NodeType::RadialGradient,
NodeLinearGradient,
- NodeType::LinearGradient
+ NodeType::LinearGradient,
+ ResolvedRadialGradient,
);
#[cfg(test)]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]