embedded_graphics/iterator/
mod.rs1pub mod contiguous;
4pub mod pixel;
5pub mod raw;
6
7use crate::{
8 draw_target::DrawTarget, geometry::Point, pixelcolor::PixelColor, primitives::Rectangle, Pixel,
9};
10
11pub trait ContiguousIteratorExt
13where
14 Self: Iterator + Sized,
15 <Self as Iterator>::Item: PixelColor,
16{
17 fn into_pixels(self, bounding_box: &Rectangle) -> contiguous::IntoPixels<Self>;
19}
20
21impl<I> ContiguousIteratorExt for I
22where
23 I: Iterator,
24 I::Item: PixelColor,
25{
26 fn into_pixels(self, bounding_box: &Rectangle) -> contiguous::IntoPixels<Self> {
27 contiguous::IntoPixels::new(self, *bounding_box)
28 }
29}
30
31pub trait PixelIteratorExt<C>
33where
34 Self: Sized,
35 C: PixelColor,
36{
37 fn draw<D>(self, target: &mut D) -> Result<(), D::Error>
39 where
40 D: DrawTarget<Color = C>;
41
42 fn translated(self, offset: Point) -> pixel::Translated<Self>;
44}
45
46impl<I, C> PixelIteratorExt<C> for I
47where
48 C: PixelColor,
49 I: Iterator<Item = Pixel<C>>,
50{
51 fn draw<D>(self, target: &mut D) -> Result<(), D::Error>
52 where
53 D: DrawTarget<Color = C>,
54 {
55 target.draw_iter(self)
56 }
57
58 fn translated(self, offset: Point) -> pixel::Translated<Self> {
59 pixel::Translated::new(self, offset)
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 use crate::{
66 geometry::Point, iterator::PixelIteratorExt, mock_display::MockDisplay,
67 pixelcolor::BinaryColor, Pixel,
68 };
69
70 #[test]
71 fn draw_pixel_iterator() {
72 let pixels = [
73 Pixel(Point::new(0, 0), BinaryColor::On),
74 Pixel(Point::new(1, 0), BinaryColor::Off),
75 Pixel(Point::new(2, 0), BinaryColor::On),
76 Pixel(Point::new(2, 1), BinaryColor::Off),
77 ];
78
79 let mut display = MockDisplay::new();
80 pixels.iter().copied().draw(&mut display).unwrap();
81
82 display.assert_pattern(&[
83 "#.#", " .", ]);
86 }
87}