1- use crate :: { Alpha , Hsla , Hsva , Hwba , Laba , Lcha , LinearRgba , Oklaba , Srgba , StandardColor , Xyza } ;
1+ use crate :: {
2+ Alpha , Hsla , Hsva , Hwba , Laba , Lcha , LinearRgba , Oklaba , Oklcha , Srgba , StandardColor , Xyza ,
3+ } ;
24use bevy_reflect:: { Reflect , ReflectDeserialize , ReflectSerialize } ;
35use serde:: { Deserialize , Serialize } ;
46
@@ -29,6 +31,8 @@ pub enum Color {
2931 Lcha ( Lcha ) ,
3032 /// A color in the Oklaba color space with alpha.
3133 Oklaba ( Oklaba ) ,
34+ /// A color in the Oklcha color space with alpha.
35+ Oklcha ( Oklcha ) ,
3236 /// A color in the XYZ color space with alpha.
3337 Xyza ( Xyza ) ,
3438}
@@ -196,6 +200,26 @@ impl Color {
196200 } )
197201 }
198202
203+ /// Creates a new [`Color`] object storing a [`Oklcha`] color.
204+ pub const fn oklcha ( lightness : f32 , chroma : f32 , hue : f32 , alpha : f32 ) -> Self {
205+ Self :: Oklcha ( Oklcha {
206+ lightness,
207+ chroma,
208+ hue,
209+ alpha,
210+ } )
211+ }
212+
213+ /// Creates a new [`Color`] object storing a [`Oklcha`] color with an alpha of 1.0.
214+ pub const fn oklch ( lightness : f32 , chroma : f32 , hue : f32 ) -> Self {
215+ Self :: Oklcha ( Oklcha {
216+ lightness,
217+ chroma,
218+ hue,
219+ alpha : 1.0 ,
220+ } )
221+ }
222+
199223 /// Creates a new [`Color`] object storing a [`Xyza`] color.
200224 pub const fn xyza ( x : f32 , y : f32 , z : f32 , alpha : f32 ) -> Self {
201225 Self :: Xyza ( Xyza { x, y, z, alpha } )
@@ -241,6 +265,7 @@ impl Alpha for Color {
241265 Color :: Laba ( x) => * x = x. with_alpha ( alpha) ,
242266 Color :: Lcha ( x) => * x = x. with_alpha ( alpha) ,
243267 Color :: Oklaba ( x) => * x = x. with_alpha ( alpha) ,
268+ Color :: Oklcha ( x) => * x = x. with_alpha ( alpha) ,
244269 Color :: Xyza ( x) => * x = x. with_alpha ( alpha) ,
245270 }
246271
@@ -257,6 +282,7 @@ impl Alpha for Color {
257282 Color :: Laba ( x) => x. alpha ( ) ,
258283 Color :: Lcha ( x) => x. alpha ( ) ,
259284 Color :: Oklaba ( x) => x. alpha ( ) ,
285+ Color :: Oklcha ( x) => x. alpha ( ) ,
260286 Color :: Xyza ( x) => x. alpha ( ) ,
261287 }
262288 }
@@ -298,6 +324,12 @@ impl From<Oklaba> for Color {
298324 }
299325}
300326
327+ impl From < Oklcha > for Color {
328+ fn from ( value : Oklcha ) -> Self {
329+ Self :: Oklcha ( value)
330+ }
331+ }
332+
301333impl From < Lcha > for Color {
302334 fn from ( value : Lcha ) -> Self {
303335 Self :: Lcha ( value)
@@ -327,6 +359,7 @@ impl From<Color> for Srgba {
327359 Color :: Laba ( laba) => laba. into ( ) ,
328360 Color :: Lcha ( lcha) => lcha. into ( ) ,
329361 Color :: Oklaba ( oklab) => oklab. into ( ) ,
362+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
330363 Color :: Xyza ( xyza) => xyza. into ( ) ,
331364 }
332365 }
@@ -343,6 +376,7 @@ impl From<Color> for LinearRgba {
343376 Color :: Laba ( laba) => laba. into ( ) ,
344377 Color :: Lcha ( lcha) => lcha. into ( ) ,
345378 Color :: Oklaba ( oklab) => oklab. into ( ) ,
379+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
346380 Color :: Xyza ( xyza) => xyza. into ( ) ,
347381 }
348382 }
@@ -359,6 +393,7 @@ impl From<Color> for Hsla {
359393 Color :: Laba ( laba) => laba. into ( ) ,
360394 Color :: Lcha ( lcha) => lcha. into ( ) ,
361395 Color :: Oklaba ( oklab) => oklab. into ( ) ,
396+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
362397 Color :: Xyza ( xyza) => xyza. into ( ) ,
363398 }
364399 }
@@ -375,6 +410,7 @@ impl From<Color> for Hsva {
375410 Color :: Laba ( laba) => laba. into ( ) ,
376411 Color :: Lcha ( lcha) => lcha. into ( ) ,
377412 Color :: Oklaba ( oklab) => oklab. into ( ) ,
413+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
378414 Color :: Xyza ( xyza) => xyza. into ( ) ,
379415 }
380416 }
@@ -391,6 +427,7 @@ impl From<Color> for Hwba {
391427 Color :: Laba ( laba) => laba. into ( ) ,
392428 Color :: Lcha ( lcha) => lcha. into ( ) ,
393429 Color :: Oklaba ( oklab) => oklab. into ( ) ,
430+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
394431 Color :: Xyza ( xyza) => xyza. into ( ) ,
395432 }
396433 }
@@ -407,6 +444,7 @@ impl From<Color> for Laba {
407444 Color :: Laba ( laba) => laba,
408445 Color :: Lcha ( lcha) => lcha. into ( ) ,
409446 Color :: Oklaba ( oklab) => oklab. into ( ) ,
447+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
410448 Color :: Xyza ( xyza) => xyza. into ( ) ,
411449 }
412450 }
@@ -423,6 +461,7 @@ impl From<Color> for Lcha {
423461 Color :: Laba ( laba) => laba. into ( ) ,
424462 Color :: Lcha ( lcha) => lcha,
425463 Color :: Oklaba ( oklab) => oklab. into ( ) ,
464+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
426465 Color :: Xyza ( xyza) => xyza. into ( ) ,
427466 }
428467 }
@@ -439,6 +478,24 @@ impl From<Color> for Oklaba {
439478 Color :: Laba ( laba) => laba. into ( ) ,
440479 Color :: Lcha ( lcha) => lcha. into ( ) ,
441480 Color :: Oklaba ( oklab) => oklab,
481+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
482+ Color :: Xyza ( xyza) => xyza. into ( ) ,
483+ }
484+ }
485+ }
486+
487+ impl From < Color > for Oklcha {
488+ fn from ( value : Color ) -> Self {
489+ match value {
490+ Color :: Srgba ( srgba) => srgba. into ( ) ,
491+ Color :: LinearRgba ( linear) => linear. into ( ) ,
492+ Color :: Hsla ( hsla) => hsla. into ( ) ,
493+ Color :: Hsva ( hsva) => hsva. into ( ) ,
494+ Color :: Hwba ( hwba) => hwba. into ( ) ,
495+ Color :: Laba ( laba) => laba. into ( ) ,
496+ Color :: Lcha ( lcha) => lcha. into ( ) ,
497+ Color :: Oklaba ( oklab) => oklab. into ( ) ,
498+ Color :: Oklcha ( oklch) => oklch,
442499 Color :: Xyza ( xyza) => xyza. into ( ) ,
443500 }
444501 }
@@ -455,6 +512,7 @@ impl From<Color> for Xyza {
455512 Color :: Laba ( laba) => laba. into ( ) ,
456513 Color :: Lcha ( x) => x. into ( ) ,
457514 Color :: Oklaba ( x) => x. into ( ) ,
515+ Color :: Oklcha ( oklch) => oklch. into ( ) ,
458516 Color :: Xyza ( xyza) => xyza,
459517 }
460518 }
0 commit comments