x-graphics 0.2.1

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