microbit_bsp/display/fonts/mod.rs
1//! Bitmaps and fonts for the micro:bit
2
3use super::types::*;
4mod pendolino;
5
6mod bitmaps {
7 use super::*;
8
9 #[rustfmt::skip]
10 /// A check-mark bitmap
11 pub const CHECK_MARK: Frame<5, 5> = frame_5x5(&[
12 0b00000,
13 0b00001,
14 0b00010,
15 0b10100,
16 0b01000,
17 ]);
18
19 #[rustfmt::skip]
20 /// A cross-mark bitmap
21 pub const CROSS_MARK: Frame<5, 5> = frame_5x5(&[
22 0b00000,
23 0b01010,
24 0b00100,
25 0b01010,
26 0b00000,
27 ]);
28
29 #[rustfmt::skip]
30 /// A left arrow bitmap
31 pub const ARROW_LEFT: Frame<5, 5> = frame_5x5(&[
32 0b00100,
33 0b01000,
34 0b11111,
35 0b01000,
36 0b00100,
37 ]);
38
39 #[rustfmt::skip]
40 /// A right arrow bitmap
41 pub const ARROW_RIGHT: Frame<5, 5> = frame_5x5(&[
42 0b00100,
43 0b00010,
44 0b11111,
45 0b00010,
46 0b00100,
47 ]);
48
49 /// Construct a 5x5 frame from a byte slice
50 pub const fn frame_5x5<const XSIZE: usize, const YSIZE: usize>(input: &[u8; 5]) -> Frame<XSIZE, YSIZE> {
51 //assert!(XSIZE == 5);
52 //assert!(YSIZE == 5);
53 let mut data = [Bitmap::empty(5); YSIZE];
54 data[0] = Bitmap::new(input[0], 5);
55 data[1] = Bitmap::new(input[1], 5);
56 data[2] = Bitmap::new(input[2], 5);
57 data[3] = Bitmap::new(input[3], 5);
58 data[4] = Bitmap::new(input[4], 5);
59 Frame::new(data)
60 }
61}
62
63pub use bitmaps::*;
64
65impl<const XSIZE: usize, const YSIZE: usize> Into<Frame<XSIZE, YSIZE>> for u8 {
66 fn into(self) -> Frame<XSIZE, YSIZE> {
67 (self as char).into()
68 }
69}
70
71impl<const XSIZE: usize, const YSIZE: usize> Into<Frame<XSIZE, YSIZE>> for char {
72 fn into(self) -> Frame<XSIZE, YSIZE> {
73 assert!(XSIZE == 5);
74 assert!(YSIZE == 5);
75
76 let n = self as usize;
77 if n > pendolino::PRINTABLE_START && n < pendolino::PRINTABLE_START + pendolino::PRINTABLE_COUNT {
78 frame_5x5(&pendolino::PENDOLINO3[n - pendolino::PRINTABLE_START])
79 } else {
80 frame_5x5(&[0, 0, 0, 0, 0])
81 }
82 }
83}
84
85/*
86#[cfg(test)]
87mod tests {
88 use super::*;
89
90 #[test]
91 fn test_to_frame() {
92 let frame: Frame<5, 5> = 'D'.to_frame();
93
94 assert!(frame.is_set(0, 0));
95 assert!(frame.is_set(1, 0));
96 assert!(frame.is_set(2, 0));
97 assert!(!frame.is_set(3, 0));
98 assert!(!frame.is_set(4, 0));
99
100 assert!(frame.is_set(0, 1));
101 assert!(!frame.is_set(1, 1));
102 assert!(!frame.is_set(2, 1));
103 assert!(frame.is_set(3, 1));
104 assert!(!frame.is_set(4, 1));
105
106 assert!(frame.is_set(0, 2));
107 assert!(!frame.is_set(1, 2));
108 assert!(!frame.is_set(2, 2));
109 assert!(frame.is_set(3, 2));
110 assert!(!frame.is_set(4, 2));
111
112 assert!(frame.is_set(0, 3));
113 assert!(!frame.is_set(1, 3));
114 assert!(!frame.is_set(2, 3));
115 assert!(frame.is_set(3, 3));
116 assert!(!frame.is_set(4, 3));
117
118 assert!(frame.is_set(0, 4));
119 assert!(frame.is_set(1, 4));
120 assert!(frame.is_set(2, 4));
121 assert!(!frame.is_set(3, 4));
122 assert!(!frame.is_set(4, 4));
123 }
124}
125*/