[librsvg: 27/36] filters/composite: remove interior mutability
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 27/36] filters/composite: remove interior mutability
- Date: Mon, 1 Jul 2019 01:55:54 +0000 (UTC)
commit f055acdc9c06bdb635ef223a3e7d26b3b4ed3d30
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Jun 30 16:46:41 2019 +0200
filters/composite: remove interior mutability
rsvg_internals/src/filters/composite.rs | 67 ++++++++++++---------------------
1 file changed, 25 insertions(+), 42 deletions(-)
---
diff --git a/rsvg_internals/src/filters/composite.rs b/rsvg_internals/src/filters/composite.rs
index af5aca2f..f824e8d7 100644
--- a/rsvg_internals/src/filters/composite.rs
+++ b/rsvg_internals/src/filters/composite.rs
@@ -1,5 +1,3 @@
-use std::cell::{Cell, RefCell};
-
use cairo::{self, ImageSurface};
use cssparser::{CowRcStr, Parser, Token};
use markup5ever::local_name;
@@ -36,12 +34,12 @@ enum Operator {
/// The `feComposite` filter primitive.
pub struct Composite {
base: PrimitiveWithInput,
- in2: RefCell<Option<Input>>,
- operator: Cell<Operator>,
- k1: Cell<f64>,
- k2: Cell<f64>,
- k3: Cell<f64>,
- k4: Cell<f64>,
+ in2: Option<Input>,
+ operator: Operator,
+ k1: f64,
+ k2: f64,
+ k3: f64,
+ k4: f64,
}
impl Default for Composite {
@@ -50,12 +48,12 @@ impl Default for Composite {
fn default() -> Composite {
Composite {
base: PrimitiveWithInput::new::<Self>(),
- in2: RefCell::new(None),
- operator: Cell::new(Operator::Over),
- k1: Cell::new(0f64),
- k2: Cell::new(0f64),
- k3: Cell::new(0f64),
- k4: Cell::new(0f64),
+ in2: None,
+ operator: Operator::Over,
+ k1: 0.0,
+ k2: 0.0,
+ k3: 0.0,
+ k4: 0.0,
}
}
}
@@ -68,22 +66,12 @@ impl NodeTrait for Composite {
for (attr, value) in pbag.iter() {
match attr {
- local_name!("in2") => {
- self.in2.replace(Some(Input::parse(attr, value)?));
- }
- local_name!("operator") => self.operator.set(attr.parse(value)?),
- local_name!("k1") => self.k1.set(
- parsers::number(value).attribute(attr)?,
- ),
- local_name!("k2") => self.k2.set(
- parsers::number(value).attribute(attr)?,
- ),
- local_name!("k3") => self.k3.set(
- parsers::number(value).attribute(attr)?,
- ),
- local_name!("k4") => self.k4.set(
- parsers::number(value).attribute(attr)?,
- ),
+ local_name!("in2") => self.in2 = Some(Input::parse(attr, value)?),
+ local_name!("operator") => self.operator = attr.parse(value)?,
+ local_name!("k1") => self.k1 = parsers::number(value).attribute(attr)?,
+ local_name!("k2") => self.k2 = parsers::number(value).attribute(attr)?,
+ local_name!("k3") => self.k3 = parsers::number(value).attribute(attr)?,
+ local_name!("k4") => self.k4 = parsers::number(value).attribute(attr)?,
_ => (),
}
}
@@ -149,7 +137,7 @@ impl Filter for Composite {
draw_ctx: &mut DrawingCtx,
) -> Result<FilterResult, FilterError> {
let input = self.base.get_input(ctx, draw_ctx)?;
- let input_2 = ctx.get_input(draw_ctx, self.in2.borrow().as_ref())?;
+ let input_2 = ctx.get_input(draw_ctx, self.in2.as_ref())?;
let bounds = self
.base
.get_bounds(ctx)
@@ -174,27 +162,22 @@ impl Filter for Composite {
input.surface().surface_type()
};
- let output_surface = if self.operator.get() == Operator::Arithmetic {
+ let output_surface = if self.operator == Operator::Arithmetic {
let mut output_surface = ImageSurface::create(
cairo::Format::ARgb32,
input.surface().width(),
input.surface().height(),
)?;
- let k1 = self.k1.get();
- let k2 = self.k2.get();
- let k3 = self.k3.get();
- let k4 = self.k4.get();
-
composite_arithmetic(
input.surface(),
input_2.surface(),
&mut output_surface,
bounds,
- k1,
- k2,
- k3,
- k4,
+ self.k1,
+ self.k2,
+ self.k3,
+ self.k4,
);
output_surface
@@ -211,7 +194,7 @@ impl Filter for Composite {
cr.clip();
input.surface().set_as_source_surface(&cr, 0f64, 0f64);
- cr.set_operator(self.operator.get().into());
+ cr.set_operator(self.operator.into());
cr.paint();
output_surface
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]