diff --git a/crates/svg-filters/src/tests.rs b/crates/svg-filters/src/tests.rs
index 771ab3a..72b970f 100644
--- a/crates/svg-filters/src/tests.rs
+++ b/crates/svg-filters/src/tests.rs
@@ -5,44 +5,7 @@ mod complex;
mod gaussian_blur;
mod offset;
-mod component_transfer {
- use crate::{
- codegen::SvgDocument,
- types::nodes::primitives::{
- component_transfer::{ComponentTransfer, TransferFn},
- FePrimitive,
- },
- Node,
- };
-
- #[test]
- fn test_comp_trans_simple() {
- let mut doc = SvgDocument::new();
-
- let comptrans = doc.create_filter("comp_trans");
-
- comptrans.add_node(Node::simple(FePrimitive::ComponentTransfer(
- ComponentTransfer {
- func_r: TransferFn::Table {
- table_values: vec![0., 0.1, 0.4, 0.9],
- },
- func_g: TransferFn::Discrete {
- table_values: vec![0.1, 0.3, 0.5, 0.7, 0.9],
- },
- func_b: TransferFn::Linear {
- slope: 1.0,
- intercept: 0.75,
- },
- func_a: TransferFn::Identity,
- },
- )));
-
- assert_eq!(
- doc.generate_svg(),
- r#""#
- );
- }
-}
+mod component_transfer {}
mod composite {}
mod convolve_matrix {}
mod diffuse_lighting {}
diff --git a/crates/svg-filters/src/types/graph.rs b/crates/svg-filters/src/types/graph.rs
index 524ba92..05d63c3 100644
--- a/crates/svg-filters/src/types/graph.rs
+++ b/crates/svg-filters/src/types/graph.rs
@@ -139,12 +139,10 @@ impl FilterGraph {
}
pub mod abstracted_inputs {
- use petgraph::{data::Build, prelude::NodeIndex};
+ use petgraph::prelude::NodeIndex;
use crate::{
- types::nodes::primitives::{
- blend::BlendMode, color_matrix::ColorMatrixType, component_transfer::TransferFn,
- },
+ types::nodes::primitives::{blend::BlendMode, color_matrix::ColorMatrixType},
Node,
};
@@ -213,82 +211,6 @@ pub mod abstracted_inputs {
.add_edge(self.resolve_input(in2.into()), node_idx, ());
node_idx
}
-
- pub fn component_transfer_rgba(
- &mut self,
- r#in: impl Into,
- r: TransferFn,
- g: TransferFn,
- b: TransferFn,
- a: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_rgba(r, g, b, a));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_rgb(
- &mut self,
- r#in: impl Into,
- r: TransferFn,
- g: TransferFn,
- b: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_rgb(r, g, b));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_r(
- &mut self,
- r#in: impl Into,
- func: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_r(func));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_g(
- &mut self,
- r#in: impl Into,
- func: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_g(func));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_b(
- &mut self,
- r#in: impl Into,
- func: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_b(func));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_a(
- &mut self,
- r#in: impl Into,
- func: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_a(func));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
- pub fn component_transfer_single(
- &mut self,
- r#in: impl Into,
- func: TransferFn,
- ) -> NodeIndex {
- let node_idx = self.dag.add_node(Node::component_transfer_single(func));
- self.dag
- .add_edge(self.resolve_input(r#in.into()), node_idx, ());
- node_idx
- }
}
}
diff --git a/crates/svg-filters/src/types/nodes.rs b/crates/svg-filters/src/types/nodes.rs
index c9f9334..2edc63b 100644
--- a/crates/svg-filters/src/types/nodes.rs
+++ b/crates/svg-filters/src/types/nodes.rs
@@ -150,48 +150,4 @@ impl Node {
func_a: a,
}))
}
-
- pub fn component_transfer_rgb(r: TransferFn, g: TransferFn, b: TransferFn) -> Self {
- Self::component_transfer_rgba(r, g, b, TransferFn::Identity)
- }
-
- pub fn component_transfer_r(func: TransferFn) -> Self {
- Self::component_transfer_rgba(
- func,
- TransferFn::Identity,
- TransferFn::Identity,
- TransferFn::Identity,
- )
- }
-
- pub fn component_transfer_g(func: TransferFn) -> Self {
- Self::component_transfer_rgba(
- TransferFn::Identity,
- func,
- TransferFn::Identity,
- TransferFn::Identity,
- )
- }
-
- pub fn component_transfer_b(func: TransferFn) -> Self {
- Self::component_transfer_rgba(
- TransferFn::Identity,
- TransferFn::Identity,
- func,
- TransferFn::Identity,
- )
- }
-
- pub fn component_transfer_a(func: TransferFn) -> Self {
- Self::component_transfer_rgba(
- TransferFn::Identity,
- TransferFn::Identity,
- TransferFn::Identity,
- func,
- )
- }
-
- pub fn component_transfer_single(func: TransferFn) -> Self {
- Self::component_transfer_rgb(func.clone(), func.clone(), func)
- }
}
diff --git a/crates/svg-filters/src/types/nodes/primitives.rs b/crates/svg-filters/src/types/nodes/primitives.rs
index 5cdd232..f3c101a 100644
--- a/crates/svg-filters/src/types/nodes/primitives.rs
+++ b/crates/svg-filters/src/types/nodes/primitives.rs
@@ -1,6 +1,7 @@
-use quick_xml::{events::attributes::Attribute, ElementWriter, Writer};
use std::convert::Into;
+use quick_xml::{events::attributes::Attribute, ElementWriter, Writer};
+
use super::CommonAttrs;
pub mod blend;
@@ -83,20 +84,20 @@ impl WriteElement for FePrimitive {
match self {
FePrimitive::Blend(el) => el.attrs(),
FePrimitive::ColorMatrix(el) => el.attrs(),
- FePrimitive::ComponentTransfer(el) => el.attrs(),
+ FePrimitive::ComponentTransfer(_) => todo!(),
FePrimitive::Composite(el) => el.attrs(),
- FePrimitive::GaussianBlur(el) => el.attrs(),
- FePrimitive::Offset(el) => el.attrs(),
- FePrimitive::Turbulence(el) => el.attrs(),
FePrimitive::ConvolveMatrix(_) => todo!(),
FePrimitive::DiffuseLighting(_) => todo!(),
FePrimitive::DisplacementMap(_) => todo!(),
FePrimitive::Flood(_) => todo!(),
+ FePrimitive::GaussianBlur(el) => el.attrs(),
FePrimitive::Image(_) => todo!(),
FePrimitive::Merge(_) => todo!(),
FePrimitive::Morphology(_) => todo!(),
+ FePrimitive::Offset(el) => el.attrs(),
FePrimitive::SpecularLighting(_) => todo!(),
FePrimitive::Tile(_) => todo!(),
+ FePrimitive::Turbulence(el) => el.attrs(),
}
}
@@ -104,47 +105,20 @@ impl WriteElement for FePrimitive {
match self {
FePrimitive::Blend(el) => el.tag_name(),
FePrimitive::ColorMatrix(el) => el.tag_name(),
- FePrimitive::ComponentTransfer(el) => el.tag_name(),
+ FePrimitive::ComponentTransfer(_) => todo!(),
FePrimitive::Composite(el) => el.tag_name(),
+ FePrimitive::ConvolveMatrix(_) => todo!(),
+ FePrimitive::DiffuseLighting(_) => todo!(),
+ FePrimitive::DisplacementMap(_) => todo!(),
+ FePrimitive::Flood(_) => todo!(),
FePrimitive::GaussianBlur(el) => el.tag_name(),
+ FePrimitive::Image(_) => todo!(),
+ FePrimitive::Merge(_) => todo!(),
+ FePrimitive::Morphology(_) => todo!(),
FePrimitive::Offset(el) => el.tag_name(),
+ FePrimitive::SpecularLighting(_) => todo!(),
+ FePrimitive::Tile(_) => todo!(),
FePrimitive::Turbulence(el) => el.tag_name(),
- FePrimitive::ConvolveMatrix(_) => todo!(),
- FePrimitive::DiffuseLighting(_) => todo!(),
- FePrimitive::DisplacementMap(_) => todo!(),
- FePrimitive::Flood(_) => todo!(),
- FePrimitive::Image(_) => todo!(),
- FePrimitive::Merge(_) => todo!(),
- FePrimitive::Morphology(_) => todo!(),
- FePrimitive::SpecularLighting(_) => todo!(),
- FePrimitive::Tile(_) => todo!(),
- }
- }
-
- fn element_writer<'writer, 'result>(
- &self,
- writer: &'writer mut Writer<&'result mut Vec>,
- common: CommonAttrs,
- inputs: Vec,
- output: Option,
- ) -> quick_xml::Result<&'writer mut quick_xml::Writer<&'result mut Vec>> {
- match self {
- FePrimitive::Blend(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::ColorMatrix(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::ComponentTransfer(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::Composite(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::Turbulence(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::GaussianBlur(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::Offset(el) => el.element_writer(writer, common, inputs, output),
- FePrimitive::ConvolveMatrix(_) => todo!(),
- FePrimitive::DiffuseLighting(_) => todo!(),
- FePrimitive::DisplacementMap(_) => todo!(),
- FePrimitive::Flood(_) => todo!(),
- FePrimitive::Image(_) => todo!(),
- FePrimitive::Merge(_) => todo!(),
- FePrimitive::Morphology(_) => todo!(),
- FePrimitive::SpecularLighting(_) => todo!(),
- FePrimitive::Tile(_) => todo!(),
}
}
}
diff --git a/crates/svg-filters/src/types/nodes/primitives/component_transfer.rs b/crates/svg-filters/src/types/nodes/primitives/component_transfer.rs
index 3f8a3a3..d495ecc 100644
--- a/crates/svg-filters/src/types/nodes/primitives/component_transfer.rs
+++ b/crates/svg-filters/src/types/nodes/primitives/component_transfer.rs
@@ -1,5 +1,3 @@
-use quick_xml::{events::attributes::Attribute, Writer};
-
use super::WriteElement;
/// [feComponentTransfer](https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement)
@@ -19,48 +17,10 @@ impl WriteElement for ComponentTransfer {
fn tag_name(&self) -> &'static str {
"feComponentTransfer"
}
-
- fn element_writer<'writer, 'result>(
- &self,
- writer: &'writer mut quick_xml::Writer<&'result mut Vec>,
- common: crate::types::nodes::CommonAttrs,
- inputs: Vec,
- output: Option,
- ) -> quick_xml::Result<&'writer mut quick_xml::Writer<&'result mut Vec>> {
- let inputs: Vec<_> = inputs
- .into_iter()
- .enumerate()
- .map(|(i, edge)| {
- (
- match i {
- 0 => "in".to_owned(),
- n => format!("in{}", n + 1),
- }
- .into_bytes(),
- edge.into_bytes(),
- )
- })
- .collect();
- let mut el_writer = writer
- .create_element(self.tag_name())
- .with_attributes(inputs.iter().map(|(k, v)| (&k[..], &v[..])))
- .with_attributes(Into::>>::into(common));
- if let Some(output) = output {
- el_writer = el_writer.with_attribute(("result", output.as_str()));
- }
-
- el_writer.write_inner_content(|writer| {
- self.func_r.write_self(writer, "feFuncR")?;
- self.func_g.write_self(writer, "feFuncG")?;
- self.func_b.write_self(writer, "feFuncB")?;
- self.func_a.write_self(writer, "feFuncA")?;
- Ok(())
- })
- }
}
/// [transfer functions](https://www.w3.org/TR/SVG11/filters.html#transferFuncElements)
-#[derive(Debug, Clone)]
+#[derive(Debug)]
pub enum TransferFn {
Identity,
Table {
@@ -79,56 +39,3 @@ pub enum TransferFn {
offset: f32,
},
}
-
-impl TransferFn {
- #[allow(clippy::str_to_string, reason = "inside macro call")]
- fn write_self<'writer, 'result>(
- &self,
- target: &'writer mut Writer<&'result mut Vec>,
- name: &'static str,
- ) -> quick_xml::Result<&'writer mut Writer<&'result mut Vec>> {
- target
- .create_element(name)
- .with_attributes(match self {
- TransferFn::Identity => gen_attrs![b"type": "identity"],
- TransferFn::Table { table_values } => gen_attrs![
- b"type": "table",
- b"tableValues": table_values
- .iter()
- .map(std::string::ToString::to_string)
- .reduce(|mut acc, e| {
- acc.push(' ');
- acc.push_str(&e);
- acc
- }).expect("empty tables disallowed")
- ],
- TransferFn::Discrete { table_values } => gen_attrs![
- b"type": "discrete",
- b"tableValues": table_values
- .iter()
- .map(std::string::ToString::to_string)
- .reduce(|mut acc, e| {
- acc.push(' ');
- acc.push_str(&e);
- acc
- }).expect("empty tables disallowed")
- ],
- TransferFn::Linear { slope, intercept } => gen_attrs![
- b"type": "linear",
- b"slope": slope,
- b"intercept": intercept
- ],
- TransferFn::Gamma {
- amplitude,
- exponent,
- offset,
- } => gen_attrs![
- b"type": "gamma",
- b"amplitude": amplitude,
- b"exponent": exponent,
- b"offset": offset
- ],
- })
- .write_empty()
- }
-}