cotati/combinator/
paint.rs

1use crate::{Draw, Length, Renderer, Rgba};
2
3/// Apply fill paint style to `draw` element.
4pub fn fill<R, D, C, E>(color: C, draw: D) -> impl Fn(&mut R) -> Result<(), E>
5where
6    Rgba: From<C>,
7    R: Renderer,
8    D: Draw<R, Error = E>,
9{
10    let color = color.into();
11
12    move |renderer| {
13        renderer.push_fill(color);
14
15        draw.render(renderer)?;
16
17        renderer.pop(1);
18
19        Ok(())
20    }
21}
22
23/// Apply stroke paint style to `draw` element.
24pub fn stroke<R, D, C, L, E>(color: C, width: L, draw: D) -> impl Fn(&mut R) -> Result<(), E>
25where
26    Length: From<L>,
27    Rgba: From<C>,
28    R: Renderer,
29    D: Draw<R, Error = E>,
30{
31    let color = color.into();
32    let width = width.into();
33
34    move |renderer| {
35        renderer.push_stroke(color, width);
36
37        draw.render(renderer)?;
38
39        renderer.pop(1);
40
41        Ok(())
42    }
43}