[librsvg: 16/36] gradient: remove interior mutability
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 16/36] gradient: remove interior mutability
- Date: Mon, 1 Jul 2019 01:54:59 +0000 (UTC)
commit 65cf7f2166de4f0ac14e2b0df833e878d8dc40c4
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Jun 30 15:42:26 2019 +0200
gradient: remove interior mutability
rsvg_internals/src/gradient.rs | 72 ++++++++++++++++--------------------------
1 file changed, 27 insertions(+), 45 deletions(-)
---
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index c7eea99e..087cba78 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -2,8 +2,6 @@ use cairo::{self, MatrixTrait};
use cssparser::{self, CowRcStr, Parser, Token};
use markup5ever::local_name;
-use std::cell::{Cell, RefCell};
-
use crate::allowed_url::Fragment;
use crate::bbox::*;
use crate::coord_units::CoordUnits;
@@ -428,12 +426,12 @@ fn fix_focus_point(fx: f64, fy: f64, cx: f64, cy: f64, radius: f64) -> (f64, f64
#[derive(Default)]
pub struct NodeStop {
- offset: Cell<UnitInterval>,
+ offset: UnitInterval,
}
impl NodeStop {
pub fn get_offset(&self) -> UnitInterval {
- self.offset.get()
+ self.offset
}
}
@@ -451,10 +449,9 @@ impl NodeTrait for NodeStop {
for (attr, value) in pbag.iter() {
match attr {
local_name!("offset") => {
- self.offset.set(
- attr.parse_and_validate(value, validate_offset)
- .map(|l| UnitInterval::clamp(l.length()))?,
- );
+ self.offset = attr
+ .parse_and_validate(value, validate_offset)
+ .map(|l| UnitInterval::clamp(l.length()))?
}
_ => (),
}
@@ -468,12 +465,8 @@ macro_rules! impl_node_trait {
($gradient_type:ty) => {
impl NodeTrait for $gradient_type {
fn set_atts(&mut self, _: Option<&RsvgNode>, pbag: &PropertyBag<'_>) -> NodeResult {
- let mut common = self.common.borrow_mut();
- common.set_atts(pbag)?;
-
- let mut variant = self.variant.borrow_mut();
- variant.set_atts(pbag)?;
-
+ self.common.set_atts(pbag)?;
+ self.variant.set_atts(pbag)?;
Ok(())
}
}
@@ -484,21 +477,17 @@ macro_rules! impl_resolve {
($gradient_type:ty) => {
impl Resolve for $gradient_type {
fn is_resolved(&self) -> bool {
- self.common.borrow().is_resolved() && self.variant.borrow().is_resolved()
+ self.common.is_resolved() && self.variant.is_resolved()
}
fn resolve_from_fallback(&mut self, fallback: &$gradient_type) {
- self.common
- .borrow_mut()
- .resolve_from_fallback(&fallback.common.borrow());
- self.variant
- .borrow_mut()
- .resolve_from_fallback(&fallback.variant.borrow());
+ self.common.resolve_from_fallback(&fallback.common);
+ self.variant.resolve_from_fallback(&fallback.variant);
}
fn resolve_from_defaults(&mut self) {
- self.common.borrow_mut().resolve_from_defaults();
- self.variant.borrow_mut().resolve_from_defaults();
+ self.common.resolve_from_defaults();
+ self.variant.resolve_from_defaults();
}
}
};
@@ -516,13 +505,12 @@ macro_rules! impl_paint_source {
bbox: &BoundingBox,
) -> Result<Option<Self::Source>, RenderingError> {
let mut result = self.clone();
- result.common.borrow_mut().add_color_stops_from_node(node);
+ result.common.add_color_stops_from_node(node);
let mut stack = NodeStack::new();
while !result.is_resolved() {
- let acquired =
- acquire_gradient(draw_ctx, result.common.borrow().fallback.as_ref());
+ let acquired = acquire_gradient(draw_ctx, result.common.fallback.as_ref());
if let Some(acquired) = acquired {
let a_node = acquired.get();
@@ -535,22 +523,16 @@ macro_rules! impl_paint_source {
match a_node.borrow().get_type() {
// Same type, resolve all attributes
$node_type => {
- let fallback = a_node.borrow().get_impl::<$gradient>().clone();
- fallback.common.borrow_mut().add_color_stops_from_node(a_node);
+ let mut fallback = a_node.borrow().get_impl::<$gradient>().clone();
+ fallback.common.add_color_stops_from_node(a_node);
result.resolve_from_fallback(&fallback);
}
// Other type of gradient, resolve common attributes
$other_type => {
- let fallback =
+ let mut fallback =
a_node.borrow().get_impl::<$other_gradient>().clone();
- fallback
- .common
- .borrow_mut()
- .add_color_stops_from_node(a_node);
- result
- .common
- .borrow_mut()
- .resolve_from_fallback(&fallback.common.borrow());
+ fallback.common.add_color_stops_from_node(a_node);
+ result.common.resolve_from_fallback(&fallback.common);
}
_ => (),
}
@@ -563,7 +545,7 @@ macro_rules! impl_paint_source {
result.resolve_from_defaults();
}
- if result.common.borrow().bounds_are_valid(bbox) {
+ if result.common.bounds_are_valid(bbox) {
Ok(Some(result))
} else {
Ok(None)
@@ -580,15 +562,15 @@ macro_rules! impl_paint_source {
) -> Result<bool, RenderingError> {
assert!(gradient.is_resolved());
- let units = gradient.common.borrow().units.unwrap();
+ let units = gradient.common.units.unwrap();
let params = if units == GradientUnits(CoordUnits::ObjectBoundingBox) {
draw_ctx.push_view_box(1.0, 1.0)
} else {
draw_ctx.get_view_params()
};
- let mut p = gradient.variant.borrow().to_cairo_gradient(values, ¶ms);
- gradient.common.borrow().set_on_pattern(&mut p, bbox, opacity);
+ let mut p = gradient.variant.to_cairo_gradient(values, ¶ms);
+ gradient.common.set_on_pattern(&mut p, bbox, opacity);
let cr = draw_ctx.get_cairo_context();
cr.set_source(&$cairo_pattern(p));
@@ -616,8 +598,8 @@ fn acquire_gradient<'a>(
#[derive(Clone, Default)]
pub struct NodeLinearGradient {
- pub common: RefCell<CommonGradientData>,
- pub variant: RefCell<LinearGradientData>,
+ pub common: CommonGradientData,
+ pub variant: LinearGradientData,
}
impl_node_trait!(NodeLinearGradient);
@@ -634,8 +616,8 @@ impl_paint_source!(
#[derive(Clone, Default)]
pub struct NodeRadialGradient {
- pub common: RefCell<CommonGradientData>,
- pub variant: RefCell<RadialGradientData>,
+ pub common: CommonGradientData,
+ pub variant: RadialGradientData,
}
impl_node_trait!(NodeRadialGradient);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]