use crate::{Frame, Pixel, View, P2}; use std::ops::{Add, Index, IndexMut, Sub}; impl Add for Pixel { type Output = Pixel; #[inline] fn add(self, rhs: Self) -> Self::Output { Self { r: self.r + rhs.r, g: self.g + rhs.g, b: self.b + rhs.b, } } } impl P2 { pub const ZERO: P2 = P2 { x: 0, y: 0 }; #[inline] pub fn area(&self) -> usize { (self.x * self.y) as usize } } impl View { #[inline] pub fn all(b: P2) -> Self { Self { a: P2::default(), b, } } #[inline] pub fn size(&self) -> P2 { self.b - self.a } } impl Add for P2 { type Output = P2; #[inline] fn add(self, rhs: Self) -> Self::Output { Self { x: self.x + rhs.x, y: self.y + rhs.y, } } } impl Sub for P2 { type Output = P2; #[inline] fn sub(self, rhs: Self) -> Self::Output { Self { x: self.x - rhs.x, y: self.y - rhs.y, } } } impl Index for Frame { type Output = Pixel; #[inline] fn index(&self, P2 { x, y }: P2) -> &Self::Output { &self.pixels[x as usize + (y as usize * self.size.x as usize)] } } impl IndexMut for Frame { #[inline] fn index_mut(&mut self, P2 { x, y }: P2) -> &mut Self::Output { &mut self.pixels[x as usize + (y as usize * self.size.x as usize)] } }