Skip to content

Commit

Permalink
Add 'Color::as_lcha' function (bevyengine#7757)
Browse files Browse the repository at this point in the history
  • Loading branch information
iwek7 committed Feb 20, 2023
1 parent 16feb9a commit 78e28f6
Showing 1 changed file with 58 additions and 3 deletions.
61 changes: 58 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.linear_to_nonlinear_srgb(),
green.linear_to_nonlinear_srgb(),
blue.linear_to_nonlinear_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

0 comments on commit 78e28f6

Please sign in to comment.