Skip to main content

containers/support/
mod.rs

1#![allow(dead_code)]
2
3use core::convert::Infallible;
4
5use embedded_graphics::{
6    Pixel,
7    draw_target::DrawTarget,
8    geometry::{OriginDimensions, Size},
9    pixelcolor::Rgb565,
10    prelude::Point,
11    primitives::Rectangle,
12};
13
14use faststep::{DisplayPort, FsTheme, I18n, UiCanvas};
15
16pub fn bounds(width: u32, height: u32) -> Rectangle {
17    Rectangle::new(Point::zero(), Size::new(width, height))
18}
19
20pub fn theme() -> FsTheme {
21    FsTheme::default()
22}
23
24pub fn i18n() -> I18n<'static> {
25    I18n::new("en", "en", &[])
26}
27
28pub struct NullDisplay {
29    bounds: Rectangle,
30}
31
32impl NullDisplay {
33    pub fn new(bounds: Rectangle) -> Self {
34        Self { bounds }
35    }
36}
37
38pub struct NullCanvas {
39    size: Size,
40}
41
42impl NullCanvas {
43    pub fn new(size: Size) -> Self {
44        Self { size }
45    }
46}
47
48impl OriginDimensions for NullCanvas {
49    fn size(&self) -> Size {
50        self.size
51    }
52}
53
54impl DrawTarget for NullCanvas {
55    type Color = Rgb565;
56    type Error = Infallible;
57
58    fn draw_iter<I>(&mut self, _pixels: I) -> Result<(), Self::Error>
59    where
60        I: IntoIterator<Item = Pixel<Self::Color>>,
61    {
62        Ok(())
63    }
64}
65
66impl UiCanvas for NullCanvas {
67    fn dim_rect(&mut self, _area: Rectangle, _alpha: u8) {}
68}
69
70impl DisplayPort for NullDisplay {
71    type Canvas = NullCanvas;
72    type Error = Infallible;
73
74    fn bounds(&self) -> Rectangle {
75        self.bounds
76    }
77
78    fn draw_frame<F>(&mut self, draw: F) -> Result<(), Self::Error>
79    where
80        F: FnOnce(&mut Self::Canvas),
81    {
82        let mut canvas = NullCanvas::new(self.bounds.size);
83        draw(&mut canvas);
84        Ok(())
85    }
86}