Skip to content

Commit

Permalink
Add 'Color::as_lcha' function (#7757)
Browse files Browse the repository at this point in the history
  • Loading branch information
iwek7 committed Feb 20, 2023
1 parent c4f0de5 commit ff325a0
Showing 1 changed file with 59 additions and 3 deletions.
62 changes: 59 additions & 3 deletions crates/bevy_render/src/color/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,61 @@ impl Color {
}
}

/// Converts a `Color` to variant `Color::Lcha`
pub fn as_lcha(self: &Color) -> Color {
match self {
Color::Rgba {
red,
green,
blue,
alpha,
} => {
let (lightness, chroma, hue) =
LchRepresentation::nonlinear_srgb_to_lch([*red, *green, *blue]);
Color::Lcha {
lightness,
chroma,
hue,
alpha: *alpha,
}
}
Color::RgbaLinear {
red,
green,
blue,
alpha,
} => {
let (lightness, chroma, hue) = LchRepresentation::nonlinear_srgb_to_lch([
red.line(),
green.nonlinear_to_linear_srgb(),
blue.nonlinear_to_linear_srgb(),
]);
Color::Lcha {
lightness,
chroma,
hue,
alpha: *alpha,
}
}
Color::Hsla {
hue,
saturation,
lightness,
alpha,
} => {
let rgb = HslRepresentation::hsl_to_nonlinear_srgb(*hue, *saturation, *lightness);
let (lightness, chroma, hue) = LchRepresentation::nonlinear_srgb_to_lch(rgb);
Color::Lcha {
lightness,
chroma,
hue,
alpha: *alpha,
}
}
Color::Lcha { .. } => *self,
}
}

/// Converts a `Color` to a `[f32; 4]` from sRGB colorspace
pub fn as_rgba_f32(self: Color) -> [f32; 4] {
match self {
Expand Down Expand Up @@ -737,7 +792,7 @@ impl Color {
}

/// Converts a `Color` to a `[f32; 4]` from LCH colorspace
pub fn as_lch_f32(self: Color) -> [f32; 4] {
pub fn as_lcha_f32(self: Color) -> [f32; 4] {
match self {
Color::Rgba {
red,
Expand Down Expand Up @@ -958,7 +1013,7 @@ impl AddAssign<Color> for Color {
hue,
alpha,
} => {
let rhs = rhs.as_lch_f32();
let rhs = rhs.as_lcha_f32();
*lightness += rhs[0];
*chroma += rhs[1];
*hue += rhs[2];
Expand Down Expand Up @@ -1021,7 +1076,7 @@ impl Add<Color> for Color {
hue,
alpha,
} => {
let rhs = rhs.as_lch_f32();
let rhs = rhs.as_lcha_f32();

Color::Lcha {
lightness: lightness + rhs[0],
Expand Down Expand Up @@ -1617,6 +1672,7 @@ impl encase::private::ReadFrom for Color {
}
}
}

impl encase::private::CreateFrom for Color {
fn create_from<B>(reader: &mut encase::private::Reader<B>) -> Self
where
Expand Down

0 comments on commit ff325a0

Please sign in to comment.