use super::gradient::CoreGraphicsGradient;
use crate::{
brush::BrushBackend,
paint::{Color, BLACK},
};
#[derive(Clone, Debug)]
pub(super) enum BrushData {
Solid(Color),
Gradient(CoreGraphicsGradient),
}
impl Default for BrushData {
fn default() -> Self {
Self::Solid(BLACK)
}
}
#[derive(Clone, Debug, Default)]
pub struct CoreGraphicsBrush {
data: BrushData,
}
impl BrushBackend for CoreGraphicsBrush {
type GradientType = CoreGraphicsGradient;
fn new_solid(color: Color) -> Self {
Self {
data: BrushData::Solid(color),
}
}
fn new_gradient(gradient: Self::GradientType) -> Self {
Self {
data: BrushData::Gradient(gradient),
}
}
}
impl CoreGraphicsBrush {
pub(crate) fn data(&self) -> &BrushData {
&self.data
}
pub(crate) fn data_mut(&mut self) -> &mut BrushData {
&mut self.data
}
}