deft 0.15.0

Cross platform ui framework
pub mod cssborder;
pub mod layout_tree;
pub mod paint_object;
pub mod painter;

use crate::paint::Painter;

pub struct RenderFn {
    render: Box<dyn FnOnce(&Painter) + Send>,
}

impl RenderFn {
    pub fn empty() -> RenderFn {
        RenderFn::new(|_painter| {})
    }

    pub fn new<F: FnOnce(&Painter) + Send + 'static>(render: F) -> RenderFn {
        Self {
            render: Box::new(render),
        }
    }
    pub fn new_multiple<F: FnOnce(&Painter) + Send + 'static>(renders: Vec<F>) -> RenderFn {
        Self::new(move |canvas| {
            for render in renders {
                render(canvas);
            }
        })
    }

    pub fn merge(renders: Vec<RenderFn>) -> RenderFn {
        RenderFn::new(move |painter| {
            for render in renders {
                render.run(painter);
            }
        })
    }

    pub fn run(self, canvas: &Painter) {
        (self.render)(canvas);
    }
}