use crate::{
bitmap::{BitmapAccessMut, BitmapRawDataMut},
colour::Colour,
formats::PixelFormatSpec,
math::PixelBox,
BitmapMut,
};
use super::{
dispatch::{GenericUnary, UnaryDispatch},
KahloOps, UnaryOpSpec,
};
pub struct FillRegionOp;
#[cfg(test)]
const _: () = {
use super::generate;
impl generate::UnaryInputSpec for FillRegionOp {
fn gen<'l>() -> impl generate::ValueGeneratorList<'l, OutputTuple = Self::Params<'l>> {
(generate::dst_area, generate::random_colour)
}
}
};
impl GenericUnary<(PixelBox, Colour)> for FillRegionOp {
fn perform<Format: PixelFormatSpec>(
write_data: &mut dyn BitmapRawDataMut,
params: &(PixelBox, Colour),
) {
let mut write_data = BitmapMut::new_from_raw(write_data);
let mut subregion = write_data.make_view_mut(params.0);
KahloOps::<Format>::fill(&mut subregion, params.1);
}
}
impl UnaryOpSpec for FillRegionOp {
type Params<'l> = (PixelBox, Colour);
fn build<'l>() -> UnaryDispatch<Self::Params<'l>> {
UnaryDispatch::from_generic::<Self>()
}
}