// ============================================================================
// RadialGradient
// ============================================================================
///|
/// Radial gradient definition
pub(all) struct RadialGradient {
cx : Double // Center x (0.0-1.0 relative)
cy : Double // Center y
fx : Double // Focal point x
fy : Double // Focal point y
r : Double // Radius
stops : Array[GradientStop]
spread_method : SpreadMethod
units : GradientUnits
transform : Transform
}
///|
pub fn RadialGradient::new(
cx : Double,
cy : Double,
r : Double,
stops : Array[GradientStop],
) -> RadialGradient {
{
cx,
cy,
fx: cx,
fy: cy,
r,
stops,
spread_method: Pad,
units: ObjectBoundingBox,
transform: Transform::identity(),
}
}
///|
fn interpolate_gradient_color(t : Double, stops : Array[GradientStop]) -> Color {
if stops.is_empty() {
return Color::black()
}
if stops.length() == 1 {
return stops[0].color
}
if t < stops[0].offset {
return stops[0].color
}
let mut left_index = 0
for index in 1..