platform: smart_leds: move StrideSampler into mappings module

This commit is contained in:
2024-12-06 15:01:13 +01:00
parent 16c0c9524d
commit 202876b42f
2 changed files with 29 additions and 21 deletions

View File

@ -1,6 +1,8 @@
use crate::buffers::Pixbuf;
use crate::geometry::*;
use crate::lib8::interpolate::scale8;
use crate::render::PixelView;
use core::cmp::{max, min};
use core::fmt::{Formatter, Debug};
@ -301,3 +303,29 @@ impl<'a> CoordinateView<'a> for StrideView<'a> {
None
}
}
pub struct StrideSampler<'a, P: Pixbuf> {
pixbuf: &'a mut P,
selection: StrideView<'a>
}
impl<'a, P: Pixbuf> StrideSampler<'a, P> {
pub fn new(pixbuf: &'a mut P, selection: StrideView<'a>) -> Self {
StrideSampler {
pixbuf,
selection
}
}
}
impl<'a, P: Pixbuf> PixelView for StrideSampler<'a, P> {
type Pixel = P::Pixel;
fn next(&mut self) -> Option<(Coordinates<Virtual>, &mut Self::Pixel)> {
if let Some((virt, coords)) = self.selection.next() {
let idx = self.selection.map.strides[coords.x as usize].pixel_idx_for_offset(coords.y);
Some((virt, &mut self.pixbuf[idx]))
} else {
None
}
}
}