use denise::{PixelFormat, Size};
use crate::canvas::{Canvas, PixelView};
pub struct TestCanvas {
pixels: Vec<u32>,
size: Size,
stride: u32,
}
impl TestCanvas {
pub fn new(width: u32, height: u32) -> Self {
Self::with_stride(width, height, width)
}
pub fn with_stride(width: u32, height: u32, stride: u32) -> Self {
assert!(stride >= width);
Self {
pixels: vec![0; (stride * height) as usize],
size: Size::new(width, height),
stride,
}
}
pub fn canvas(&mut self) -> Canvas<'_> {
Canvas::from_pixels(
&mut self.pixels,
self.size,
self.stride,
PixelFormat::Argb8888,
)
.expect("test geometry fits")
}
pub fn view(&self) -> PixelView<'_> {
PixelView::new(&self.pixels, self.size, self.stride).expect("test geometry fits")
}
pub fn pixels(&self) -> &[u32] {
&self.pixels
}
pub fn at(&self, x: i32, y: i32) -> u32 {
self.pixels[y as usize * self.stride as usize + x as usize]
}
}