From fa3f951158a472cd19682bd52311144748a7f889 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Thu, 20 Oct 2022 14:36:12 -0500 Subject: filters::Primitive - use set_attribute() We can finally pass a session here. --- src/filters/blend.rs | 4 ++-- src/filters/color_matrix.rs | 4 ++-- src/filters/component_transfer.rs | 4 ++-- src/filters/composite.rs | 4 ++-- src/filters/convolve_matrix.rs | 4 ++-- src/filters/displacement_map.rs | 4 ++-- src/filters/flood.rs | 4 ++-- src/filters/gaussian_blur.rs | 4 ++-- src/filters/image.rs | 4 ++-- src/filters/lighting.rs | 8 +++---- src/filters/merge.rs | 4 ++-- src/filters/mod.rs | 46 +++++++++++++++++++++++++++------------ src/filters/morphology.rs | 4 ++-- src/filters/offset.rs | 4 ++-- src/filters/tile.rs | 4 ++-- src/filters/turbulence.rs | 4 ++-- 16 files changed, 64 insertions(+), 46 deletions(-) diff --git a/src/filters/blend.rs b/src/filters/blend.rs index 2928fdfa..3b6ac437 100644 --- a/src/filters/blend.rs +++ b/src/filters/blend.rs @@ -60,8 +60,8 @@ pub struct Blend { } impl SetAttributes for FeBlend { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - let (in1, in2) = self.base.parse_two_inputs(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + let (in1, in2) = self.base.parse_two_inputs(attrs, session)?; self.params.in1 = in1; self.params.in2 = in2; diff --git a/src/filters/color_matrix.rs b/src/filters/color_matrix.rs index c3c2b538..d19d7743 100644 --- a/src/filters/color_matrix.rs +++ b/src/filters/color_matrix.rs @@ -64,8 +64,8 @@ impl Default for ColorMatrix { #[rustfmt::skip] impl SetAttributes for FeColorMatrix { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; // First, determine the operation type. let mut operation_type = Default::default(); diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs index 31027e6c..6237bbc6 100644 --- a/src/filters/component_transfer.rs +++ b/src/filters/component_transfer.rs @@ -41,8 +41,8 @@ pub struct ComponentTransfer { } impl SetAttributes for FeComponentTransfer { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; Ok(()) } } diff --git a/src/filters/composite.rs b/src/filters/composite.rs index 1b690420..c0724b62 100644 --- a/src/filters/composite.rs +++ b/src/filters/composite.rs @@ -54,8 +54,8 @@ pub struct Composite { } impl SetAttributes for FeComposite { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - let (in1, in2) = self.base.parse_two_inputs(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + let (in1, in2) = self.base.parse_two_inputs(attrs, session)?; self.params.in1 = in1; self.params.in2 = in2; diff --git a/src/filters/convolve_matrix.rs b/src/filters/convolve_matrix.rs index 54a390c8..cceb0315 100644 --- a/src/filters/convolve_matrix.rs +++ b/src/filters/convolve_matrix.rs @@ -70,8 +70,8 @@ impl Default for ConvolveMatrix { } impl SetAttributes for FeConvolveMatrix { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs index c88b4eec..14f43c45 100644 --- a/src/filters/displacement_map.rs +++ b/src/filters/displacement_map.rs @@ -50,8 +50,8 @@ pub struct DisplacementMap { } impl SetAttributes for FeDisplacementMap { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - let (in1, in2) = self.base.parse_two_inputs(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + let (in1, in2) = self.base.parse_two_inputs(attrs, session)?; self.params.in1 = in1; self.params.in2 = in2; diff --git a/src/filters/flood.rs b/src/filters/flood.rs index 4a596e92..40e20592 100644 --- a/src/filters/flood.rs +++ b/src/filters/flood.rs @@ -25,8 +25,8 @@ pub struct Flood { } impl SetAttributes for FeFlood { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.base.parse_no_inputs(attrs) + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.base.parse_no_inputs(attrs, session) } } diff --git a/src/filters/gaussian_blur.rs b/src/filters/gaussian_blur.rs index 3d4fe9ae..bbdaf931 100644 --- a/src/filters/gaussian_blur.rs +++ b/src/filters/gaussian_blur.rs @@ -46,8 +46,8 @@ pub struct GaussianBlur { } impl SetAttributes for FeGaussianBlur { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { if let expanded_name!("", "stdDeviation") = attr.expanded() { diff --git a/src/filters/image.rs b/src/filters/image.rs index 65ddf759..ea24a405 100644 --- a/src/filters/image.rs +++ b/src/filters/image.rs @@ -116,8 +116,8 @@ impl Image { } impl SetAttributes for FeImage { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.base.parse_no_inputs(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.base.parse_no_inputs(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { diff --git a/src/filters/lighting.rs b/src/filters/lighting.rs index 3d4c73a5..e173f120 100644 --- a/src/filters/lighting.rs +++ b/src/filters/lighting.rs @@ -333,8 +333,8 @@ fn transform_dist(t: Transform, d: f64) -> f64 { } impl SetAttributes for FeDiffuseLighting { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { @@ -378,8 +378,8 @@ impl DiffuseLighting { } impl SetAttributes for FeSpecularLighting { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { diff --git a/src/filters/merge.rs b/src/filters/merge.rs index e2e9be65..0b3a13a3 100644 --- a/src/filters/merge.rs +++ b/src/filters/merge.rs @@ -52,8 +52,8 @@ impl Default for FeMerge { } impl SetAttributes for FeMerge { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.base.parse_no_inputs(attrs) + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.base.parse_no_inputs(attrs, session) } } diff --git a/src/filters/mod.rs b/src/filters/mod.rs index b7b545b7..b4949387 100644 --- a/src/filters/mod.rs +++ b/src/filters/mod.rs @@ -8,7 +8,7 @@ use std::time::Instant; use crate::bbox::BoundingBox; use crate::document::AcquiredNodes; use crate::drawing_ctx::DrawingCtx; -use crate::element::{Draw, ElementResult, SetAttributes}; +use crate::element::{set_attribute, Draw, ElementResult, SetAttributes}; use crate::error::{ElementError, ParseError, RenderingError}; use crate::filter::UserSpaceFilter; use crate::length::*; @@ -16,6 +16,7 @@ use crate::node::Node; use crate::paint_server::UserSpacePaintSource; use crate::parsers::{CustomIdent, Parse, ParseValue}; use crate::properties::ColorInterpolationFilters; +use crate::session::Session; use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; use crate::transform::Transform; use crate::xml::Attributes; @@ -206,19 +207,28 @@ impl Primitive { fn parse_standard_attributes( &mut self, attrs: &Attributes, + session: &Session, ) -> Result<(Input, Input), ElementError> { let mut input_1 = Input::Unspecified; let mut input_2 = Input::Unspecified; for (attr, value) in attrs.iter() { match attr.expanded() { - expanded_name!("", "x") => self.x = attr.parse(value)?, - expanded_name!("", "y") => self.y = attr.parse(value)?, - expanded_name!("", "width") => self.width = attr.parse(value)?, - expanded_name!("", "height") => self.height = attr.parse(value)?, - expanded_name!("", "result") => self.result = attr.parse(value)?, - expanded_name!("", "in") => input_1 = attr.parse(value)?, - expanded_name!("", "in2") => input_2 = attr.parse(value)?, + expanded_name!("", "x") => set_attribute(&mut self.x, attr.parse(value), session), + expanded_name!("", "y") => set_attribute(&mut self.y, attr.parse(value), session), + expanded_name!("", "width") => { + set_attribute(&mut self.width, attr.parse(value), session) + } + expanded_name!("", "height") => { + set_attribute(&mut self.height, attr.parse(value), session) + } + expanded_name!("", "result") => { + set_attribute(&mut self.result, attr.parse(value), session) + } + expanded_name!("", "in") => set_attribute(&mut input_1, attr.parse(value), session), + expanded_name!("", "in2") => { + set_attribute(&mut input_2, attr.parse(value), session) + } _ => (), } } @@ -226,18 +236,26 @@ impl Primitive { Ok((input_1, input_2)) } - pub fn parse_no_inputs(&mut self, attrs: &Attributes) -> ElementResult { - let (_, _) = self.parse_standard_attributes(attrs)?; + pub fn parse_no_inputs(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + let (_, _) = self.parse_standard_attributes(attrs, session)?; Ok(()) } - pub fn parse_one_input(&mut self, attrs: &Attributes) -> Result { - let (input_1, _) = self.parse_standard_attributes(attrs)?; + pub fn parse_one_input( + &mut self, + attrs: &Attributes, + session: &Session, + ) -> Result { + let (input_1, _) = self.parse_standard_attributes(attrs, session)?; Ok(input_1) } - pub fn parse_two_inputs(&mut self, attrs: &Attributes) -> Result<(Input, Input), ElementError> { - self.parse_standard_attributes(attrs) + pub fn parse_two_inputs( + &mut self, + attrs: &Attributes, + session: &Session, + ) -> Result<(Input, Input), ElementError> { + self.parse_standard_attributes(attrs, session) } } diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs index 8a6c0725..f440afa4 100644 --- a/src/filters/morphology.rs +++ b/src/filters/morphology.rs @@ -51,8 +51,8 @@ pub struct Morphology { } impl SetAttributes for FeMorphology { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { diff --git a/src/filters/offset.rs b/src/filters/offset.rs index d60542a5..20f3b19c 100644 --- a/src/filters/offset.rs +++ b/src/filters/offset.rs @@ -33,8 +33,8 @@ pub struct Offset { } impl SetAttributes for FeOffset { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { diff --git a/src/filters/tile.rs b/src/filters/tile.rs index 45549a71..4255443a 100644 --- a/src/filters/tile.rs +++ b/src/filters/tile.rs @@ -28,8 +28,8 @@ pub struct Tile { } impl SetAttributes for FeTile { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.params.in1 = self.base.parse_one_input(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.params.in1 = self.base.parse_one_input(attrs, session)?; Ok(()) } } diff --git a/src/filters/turbulence.rs b/src/filters/turbulence.rs index cb962c45..3800161f 100644 --- a/src/filters/turbulence.rs +++ b/src/filters/turbulence.rs @@ -75,8 +75,8 @@ impl Default for Turbulence { } impl SetAttributes for FeTurbulence { - fn set_attributes(&mut self, attrs: &Attributes, _session: &Session) -> ElementResult { - self.base.parse_no_inputs(attrs)?; + fn set_attributes(&mut self, attrs: &Attributes, session: &Session) -> ElementResult { + self.base.parse_no_inputs(attrs, session)?; for (attr, value) in attrs.iter() { match attr.expanded() { -- cgit v1.2.1