x-graphics 0.2.1

Graphics framework for X
Documentation
use crate::{
    geometry::FPoint,
    gradient::{GradientBackend, GradientData},
    paint::Color,
    Float,
};

#[derive(Clone, Debug)]
pub struct WebGradient {
    data: GradientData,
    color_stops: Vec<(Float, Color)>,
}

impl GradientBackend for WebGradient {
    fn new_linear(x1: Float, y1: Float, x2: Float, y2: Float) -> Self {
        Self {
            data: GradientData::Linear((FPoint::new(x1, y1), FPoint::new(x2, y2))),
            color_stops: Vec::new(),
        }
    }

    fn new_radial(x1: Float, y1: Float, x2: Float, y2: Float, r: Float) -> Self {
        Self {
            data: GradientData::Radial((FPoint::new(x1, y1), FPoint::new(x2, y2), r)),
            color_stops: Vec::new(),
        }
    }

    fn add_color_stop(&mut self, offset: Float, color: Color) -> bool {
        if offset.is_nan() || !(0.0..=1.0).contains(&offset) {
            return false;
        }

        self.color_stops.push((offset, color));
        true
    }
}

impl WebGradient {
    pub(super) fn data(&self) -> &GradientData {
        &self.data
    }

    pub(super) fn color_stops(&self) -> &Vec<(Float, Color)> {
        &self.color_stops
    }
}