Skip to content

Commit c1763a7

Browse files
committed
Implement arithmetic operators for Xyz
1 parent c279169 commit c1763a7

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

src/xyz.rs

+106
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::ops::{Add, Sub, Mul, Div};
2+
13
use {Color, Rgb, Luma, Lab, Lch, Hsv, Hsl, ColorSpace, Mix, Shade, clamp};
24

35
use tristimulus::{X_N, Y_N, Z_N};
@@ -104,6 +106,110 @@ impl Default for Xyz {
104106
}
105107
}
106108

109+
impl Add<Xyz> for Xyz {
110+
type Output = Xyz;
111+
112+
fn add(self, other: Xyz) -> Xyz {
113+
Xyz {
114+
x: self.x + other.x,
115+
y: self.y + other.y,
116+
z: self.z + other.z,
117+
alpha: self.alpha + other.alpha,
118+
}
119+
}
120+
}
121+
122+
impl Add<f32> for Xyz {
123+
type Output = Xyz;
124+
125+
fn add(self, c: f32) -> Xyz {
126+
Xyz {
127+
x: self.x + c,
128+
y: self.y + c,
129+
z: self.z + c,
130+
alpha: self.alpha + c,
131+
}
132+
}
133+
}
134+
135+
impl Sub<Xyz> for Xyz {
136+
type Output = Xyz;
137+
138+
fn sub(self, other: Xyz) -> Xyz {
139+
Xyz {
140+
x: self.x - other.x,
141+
y: self.y - other.y,
142+
z: self.z - other.z,
143+
alpha: self.alpha - other.alpha,
144+
}
145+
}
146+
}
147+
148+
impl Sub<f32> for Xyz {
149+
type Output = Xyz;
150+
151+
fn sub(self, c: f32) -> Xyz {
152+
Xyz {
153+
x: self.x - c,
154+
y: self.y - c,
155+
z: self.z - c,
156+
alpha: self.alpha - c,
157+
}
158+
}
159+
}
160+
161+
impl Mul<Xyz> for Xyz {
162+
type Output = Xyz;
163+
164+
fn mul(self, other: Xyz) -> Xyz {
165+
Xyz {
166+
x: self.x * other.x,
167+
y: self.y * other.y,
168+
z: self.z * other.z,
169+
alpha: self.alpha * other.alpha,
170+
}
171+
}
172+
}
173+
174+
impl Mul<f32> for Xyz {
175+
type Output = Xyz;
176+
177+
fn mul(self, c: f32) -> Xyz {
178+
Xyz {
179+
x: self.x * c,
180+
y: self.y * c,
181+
z: self.z * c,
182+
alpha: self.alpha * c,
183+
}
184+
}
185+
}
186+
187+
impl Div<Xyz> for Xyz {
188+
type Output = Xyz;
189+
190+
fn div(self, other: Xyz) -> Xyz {
191+
Xyz {
192+
x: self.x / other.x,
193+
y: self.y / other.y,
194+
z: self.z / other.z,
195+
alpha: self.alpha / other.alpha,
196+
}
197+
}
198+
}
199+
200+
impl Div<f32> for Xyz {
201+
type Output = Xyz;
202+
203+
fn div(self, c: f32) -> Xyz {
204+
Xyz {
205+
x: self.x / c,
206+
y: self.y / c,
207+
z: self.z / c,
208+
alpha: self.alpha / c,
209+
}
210+
}
211+
}
212+
107213
from_color!(to Xyz from Rgb, Luma, Lab, Lch, Hsv, Hsl);
108214

109215
impl From<Rgb> for Xyz {

0 commit comments

Comments
 (0)