From bab002fefd45f25930c6a008aca689ce1931ee3a Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sat, 24 Oct 2026 19:33:16 +0100 Subject: [PATCH] Implement some std::op traits for Pixel --- src/image.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/src/image.rs b/src/image.rs index 7b75d56..977da9e 100644 --- a/src/image.rs +++ b/src/image.rs @@ -39,9 +39,71 @@ pub trait Format { } impl Extent { - pub fn size(&self) -> u32 { - self.x * self.y - } + pub fn size(&self) -> u32 { + self.x * self.y + } +} + +impl Pixel { + pub fn rgba(r: f32, g: f32, b: f32, a: f32) -> Self { + Self { r, g, b, a } + } +} + +impl std::ops::AddAssign for Pixel { + fn add_assign(&mut self, other: Pixel) { + self.r += other.r; + self.g += other.g; + self.b += other.b; + self.a += other.a; + } +} + +impl std::ops::MulAssign for Pixel { + fn mul_assign(&mut self, scalar: f32) { + self.r *= scalar; + self.g *= scalar; + self.b *= scalar; + self.a *= scalar; + } +} + +impl std::ops::DivAssign for Pixel { + fn div_assign(&mut self, scalar: f32) { + self.r /= scalar; + self.g /= scalar; + self.b /= scalar; + self.a /= scalar; + } +} + +impl std::ops::Mul for Pixel { + type Output = Self; + + fn mul(mut self, scalar: f32) -> Self { + self *= scalar; + self + } +} + +impl std::ops::Div for Pixel { + type Output = Self; + + fn div(mut self, scalar: f32) -> Self { + self /= scalar; + self + } +} + +impl std::default::Default for Pixel { + fn default() -> Self { + Self { + r: 0.0, + g: 0.0, + b: 0.0, + a: 0.0, + } + } } impl From for Error {