graphics_rs/shapes/
rect.rs

1use crate::traits::{canvas::Canvas, shape::Shape};
2
3pub struct Rect {
4    x: usize,
5    y: usize,
6    width: usize,
7    height: usize,
8}
9
10impl Rect {
11    pub fn new(x: usize, y: usize, width: usize, height: usize) -> Self {
12        Self {
13            x,
14            y,
15            width,
16            height,
17        }
18    }
19}
20
21impl Shape for Rect {
22    fn draw_to(&mut self, canvas: &mut impl Canvas) {
23        let x = canvas.clamp_col(self.x as i64) as usize;
24        let w = canvas.clamp_col(self.x as i64 + self.width as i64) as usize;
25        let y = canvas.clamp_row(self.y as i64) as usize;
26        let h = canvas.clamp_row(self.y as i64 + self.height as i64) as usize;
27
28        for row in y..h {
29            for col in x..w {
30                canvas.set_pixel(row, col);
31            }
32        }
33    }
34}