svg-filters & basic parser #15

Merged
schrottkatze merged 67 commits from schrottkatze/iowo:svg-filters into main 2024-07-08 18:29:05 +00:00
2 changed files with 21 additions and 8 deletions
Showing only changes of commit 384fef5a81 - Show all commits

View file

@ -6,6 +6,7 @@ use self::{
primitives::{
blend::{Blend, BlendMode},
color_matrix::{ColorMatrix, ColorMatrixType},
component_transfer::{ComponentTransfer, TransferFn},
composite::{Composite, CompositeOperator},
gaussian_blur::GaussianBlur,
offset::Offset,
@ -145,9 +146,7 @@ impl Node {
}
pub fn composite_arithmetic(k1: f32, k2: f32, k3: f32, k4: f32) -> Self {
Self::simple(FePrimitive::Composite(Composite::arithmetic(
k1, k2, k3, k4,
)))
Self::composite(CompositeOperator::Arithmetic { k1, k2, k3, k4 })
}
pub fn gaussian_blur(v: u16) -> Self {
@ -161,4 +160,18 @@ impl Node {
pub fn offset(dx: f32, dy: f32) -> Self {
Self::simple(FePrimitive::Offset(Offset::new(dx, dy)))
}
pub fn component_transfer_rgba(
r: TransferFn,
g: TransferFn,
b: TransferFn,
a: TransferFn,
) -> Self {
Self::simple(FePrimitive::ComponentTransfer(ComponentTransfer {
func_r: r,
func_g: g,
func_b: b,
func_a: a,
}))
}
}

View file

@ -1,15 +1,15 @@
/// [feComponentTransfer](https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement)
#[derive(Debug)]
pub struct ComponentTransfer {
func_r: TransferFunction,
func_g: TransferFunction,
func_b: TransferFunction,
func_a: TransferFunction,
pub func_r: TransferFn,
pub func_g: TransferFn,
pub func_b: TransferFn,
pub func_a: TransferFn,
}
/// [transfer functions](https://www.w3.org/TR/SVG11/filters.html#transferFuncElements)
#[derive(Debug)]
enum TransferFunction {
pub enum TransferFn {
Identity,
Table {
table_values: Vec<f32>,