rusvid_core 0.2.1

Core library for rusvid
Documentation
use std::rc::Rc;

use crate::holder::gradient::base::BaseGradient;
use crate::holder::utils::TranslateIntoResvgGeneric;
use crate::point::Point;

#[derive(Debug, Clone)]
pub struct RadialGradient {
    end_circle: Point,
    start_circle_radius: f64,
    start_circle: Point,

    base: BaseGradient,
}

impl RadialGradient {
    pub fn new(
        start_circle: Point,
        start_circle_radius: f64,
        end_circle: Point,
        base: BaseGradient,
    ) -> Self {
        RadialGradient {
            end_circle,
            start_circle_radius,
            start_circle,
            base,
        }
    }
}

impl TranslateIntoResvgGeneric<resvg::usvg::RadialGradient> for RadialGradient {
    fn translate(&self) -> resvg::usvg::RadialGradient {
        resvg::usvg::RadialGradient {
            id: "".to_string(),
            cx: self.end_circle.x(),
            cy: self.end_circle.y(),
            r: resvg::usvg::PositiveF64::new(self.start_circle_radius.abs()).unwrap(),
            fx: self.start_circle.x(),
            fy: self.start_circle.y(),
            base: self.base.translate(),
        }
    }
}

impl TranslateIntoResvgGeneric<resvg::usvg::Paint> for RadialGradient {
    fn translate(&self) -> resvg::usvg::Paint {
        resvg::usvg::Paint::RadialGradient(Rc::new(self.translate()))
    }
}