chargrid_common/
fill.rs

1use chargrid_core::*;
2
3pub struct Fill<C: Component> {
4    pub component: C,
5    pub background: Rgba32,
6}
7
8impl<C: Component> Component for Fill<C> {
9    type Output = C::Output;
10    type State = C::State;
11    fn render(&self, state: &Self::State, ctx: Ctx, fb: &mut FrameBuffer) {
12        let size = self.component.size(state, ctx);
13        for y in 0..(size.height() as i32) {
14            for x in 0..(size.width() as i32) {
15                let coord = Coord::new(x, y);
16                fb.set_cell_relative_to_ctx(
17                    ctx,
18                    coord,
19                    0,
20                    RenderCell {
21                        style: Style {
22                            background: Some(self.background),
23                            ..Default::default()
24                        },
25                        character: Some(' '),
26                    },
27                );
28            }
29        }
30        self.component.render(state, ctx, fb);
31    }
32    fn update(&mut self, state: &mut Self::State, ctx: Ctx, event: Event) -> Self::Output {
33        self.component.update(state, ctx, event)
34    }
35    fn size(&self, state: &Self::State, ctx: Ctx) -> Size {
36        self.component.size(state, ctx)
37    }
38}