containers/support/
mod.rs1#![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}