use super::{Context, FromWithContext};
use crate::{Point2, Real, ToReal};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct Circle<Num, Color> {
pub center: Point2<Num>,
pub diameter: Num,
pub fill: Color,
pub stroke: Color,
pub weight: Num,
}
impl<X, Y, Width, Num, Color> FromWithContext<(X, Y, Width), Num, Color> for Circle<Num, Color>
where
X: ToReal<Num>,
Y: ToReal<Num>,
Width: ToReal<Num>,
Num: Real,
Color: Clone,
{
fn from_with_context(data: (X, Y, Width), context: &Context<Num, Color>) -> Self {
let (x, y, diameter) = data;
let (x, y, diameter) = (x.to_real(), y.to_real(), diameter.to_real());
let (center, size) = context.ellipse_mode.interpret(x, y, diameter, diameter);
Circle {
center,
diameter: size.width, fill: context.fill.clone(),
stroke: context.stroke.clone(),
weight: context.weight,
}
}
}