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
}
}