use crate::{
gradient::{Gradient, GradientBackend},
paint::Color,
DefaultBrush, DefaultGradient,
};
pub trait BrushBackend: Clone + Default {
type GradientType: GradientBackend;
fn new_solid(color: Color) -> Self
where
Self: Sized;
fn new_gradient(gradient: Self::GradientType) -> Self
where
Self: Sized;
}
pub struct Brush<T: BrushBackend> {
pub(crate) backend: T,
}
impl<T: BrushBackend> Brush<T> {
pub fn new_solid(color: Color) -> Self {
Self {
backend: T::new_solid(color),
}
}
pub fn new_gradient(gradient: Gradient<T::GradientType>) -> Self {
Self {
backend: T::new_gradient(gradient.backend),
}
}
}
impl Brush<DefaultBrush> {
pub fn default_new_solid(color: Color) -> Self {
Self::new_solid(color)
}
pub fn default_new_gradient(gradient: Gradient<DefaultGradient>) -> Self {
Self::new_gradient(gradient)
}
}