add Image::quad

This commit is contained in:
bendn 2023-09-28 15:32:20 +07:00
parent 18c6e621e9
commit c33594e995
No known key found for this signature in database
GPG key ID: 0D9D3A2A3B2A93D6
2 changed files with 19 additions and 9 deletions

View file

@ -147,7 +147,7 @@ impl<T: DerefMut<Target = [u8]>, const CHANNELS: usize> Image<T, CHANNELS> {
///
/// Points not in bounds will not be included.
///
/// Uses [`Image::points`].
/// Uses [`Image::quad`].
/// ```
/// # use fimg::Image;
/// let mut i = Image::alloc(10, 10);
@ -176,14 +176,11 @@ impl<T: DerefMut<Target = [u8]>, const CHANNELS: usize> Image<T, CHANNELS> {
// v x1 v x2
// [ ]
// ^ x3 ^ x4
self.points(
&[
p!(x1 - wx, y1 - wy), // x1
p!(x2 - wx, y2 - wy), // x2
p!(x2 + wx, y2 + wy), // x3
p!(x1 + wx, y1 + wy), // x4
p!(x1 - wx, y1 - wy), // x1 (close)
],
self.quad(
p!(x1 - wx, y1 - wy), // x1
p!(x2 - wx, y2 - wy), // x2
p!(x2 + wx, y2 + wy), // x3
p!(x1 + wx, y1 + wy), // x4
color,
);
}

View file

@ -70,4 +70,17 @@ impl<T: DerefMut<Target = [u8]>, const CHANNELS: usize> Image<T, CHANNELS> {
self.line((x1, y1), (x2, y2), c);
}
}
/// Draws a filled quadrilateral.
/// This currently just uses [`Image::points`], but in the future this may change.
pub fn quad(
&mut self,
a: (i32, i32),
b: (i32, i32),
c: (i32, i32),
d: (i32, i32),
col: [u8; CHANNELS],
) {
self.points(&[a, b, c, d, a], col);
}
}