embedded_graphics/iterator/
pixel.rs

1//! Pixel iterator.
2
3use crate::{geometry::Point, pixelcolor::PixelColor, Pixel};
4
5/// Translated pixel iterator.
6#[derive(Debug, PartialEq)]
7#[cfg_attr(feature = "defmt", derive(::defmt::Format))]
8pub struct Translated<I> {
9    iter: I,
10    offset: Point,
11}
12
13impl<I, C> Translated<I>
14where
15    I: Iterator<Item = Pixel<C>>,
16    C: PixelColor,
17{
18    pub(super) const fn new(iter: I, offset: Point) -> Self {
19        Self { iter, offset }
20    }
21}
22
23impl<I, C> Iterator for Translated<I>
24where
25    I: Iterator<Item = Pixel<C>>,
26    C: PixelColor,
27{
28    type Item = I::Item;
29
30    fn next(&mut self) -> Option<Self::Item> {
31        self.iter
32            .next()
33            .map(|Pixel(p, c)| Pixel(p + self.offset, c))
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40    use crate::{iterator::PixelIteratorExt, pixelcolor::BinaryColor};
41
42    #[test]
43    fn translate() {
44        let pixels = [
45            Pixel(Point::new(1, 2), BinaryColor::On),
46            Pixel(Point::new(3, 4), BinaryColor::On),
47            Pixel(Point::new(5, 6), BinaryColor::On),
48        ];
49        let pixels = pixels.iter().copied();
50
51        let expected = [
52            Pixel(Point::new(1 + 4, 2 + 5), BinaryColor::On),
53            Pixel(Point::new(3 + 4, 4 + 5), BinaryColor::On),
54            Pixel(Point::new(5 + 4, 6 + 5), BinaryColor::On),
55        ];
56        let expected = expected.iter().copied();
57
58        assert!(pixels.translated(Point::new(4, 5)).eq(expected));
59    }
60}