x-graphics 0.2.1

Graphics framework for X
Documentation
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
    }
}