decal 0.6.0

Declarative DSL for describing scenes and rendering them to SVG or PNG
Documentation
use crate::filters::{
    primitives::TransferFunction,
    Filter,
};

impl Filter {
    /// Creates a contrast filter effect with the specified multiplier.
    ///
    /// # Arguments
    /// - `amount`: The contrast multiplier applied to each color channel.
    ///
    /// # Returns
    /// - [`Filter`] applying a contrast adjustment effect.
    ///
    /// # Reference
    ///
    /// https://www.w3.org/TR/filter-effects-1/#contrastEquivalent
    pub fn contrast(amount: f32) -> Self {
        let intercept = -(0.5 * amount) + 0.5;

        Self::new(|ctx| {
            ctx.component_transfer()
                .func_r(TransferFunction::linear(amount, intercept))
                .func_g(TransferFunction::linear(amount, intercept))
                .func_b(TransferFunction::linear(amount, intercept))
                .finish();
        })
    }
}