mirror of
https://github.com/lisk77/comet.git
synced 2025-10-23 21:38:50 +00:00
fix: some color conversions were incorrect
This commit is contained in:
parent
ac690694a3
commit
81d3b2f714
4 changed files with 32 additions and 41 deletions
|
@ -94,12 +94,12 @@ impl Hwba {
|
|||
let w = self.whiteness.min(1.0 - self.blackness);
|
||||
let c = 1.0 - self.whiteness - self.blackness;
|
||||
|
||||
let hue = self.hue % 360.0;
|
||||
let hue = (self.hue % 360.0 + 360.0) % 360.0;
|
||||
let h_prime = hue / 60.0;
|
||||
|
||||
let x = c * (1.0 - (h_prime % 2.0 - 1.0).abs());
|
||||
|
||||
let (r1, g1, b1) = match h_prime as u32 {
|
||||
let (r1, g1, b1) = match h_prime.floor() as u32 {
|
||||
0 => (c, x, 0.0),
|
||||
1 => (x, c, 0.0),
|
||||
2 => (0.0, c, x),
|
||||
|
@ -110,20 +110,25 @@ impl Hwba {
|
|||
};
|
||||
|
||||
sRgba::<f32>::new(
|
||||
r1 + w,
|
||||
g1 + w,
|
||||
b1 + w,
|
||||
(r1 + w).min(1.0),
|
||||
(g1 + w).min(1.0),
|
||||
(b1 + w).min(1.0),
|
||||
self.alpha()
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
pub fn to_hsva(&self) -> Hsva {
|
||||
let value = 1.0 - self.blackness;
|
||||
let saturation = 1.0 - (self.whiteness / value);
|
||||
|
||||
Hsva::new(
|
||||
self.hue,
|
||||
1.0 - self.hue / (1.0 - self.blackness),
|
||||
1.0 - self.blackness,
|
||||
saturation,
|
||||
value,
|
||||
self.alpha
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
pub fn to_hsla(&self) -> Hsla {
|
||||
|
|
|
@ -48,8 +48,8 @@ impl Lcha {
|
|||
pub fn to_laba(&self) -> Laba {
|
||||
Laba::new(
|
||||
self.lightness,
|
||||
self.chroma * self.hue.cos().to_radians(),
|
||||
self.chroma * self.hue.sin().to_radians(),
|
||||
self.chroma * self.hue.to_radians().cos(),
|
||||
self.chroma * self.hue.to_radians().sin(),
|
||||
self.alpha
|
||||
)
|
||||
}
|
||||
|
|
|
@ -151,7 +151,7 @@ impl sRgba<u8> {
|
|||
|
||||
impl sRgba<f32> {
|
||||
pub fn new(red: f32, green: f32, blue: f32, alpha: f32) -> Self {
|
||||
assert!((0.0..1.0).contains(&red) && (0.0..1.0).contains(&green) && (0.0..1.0).contains(&blue) && (0.0..1.0).contains(&alpha), "Red needs to be in range 0..1\nGreen needs to be in range 0..1\nBlue needs to be in range 0..1\nAlpha needs to be in range 0..1");
|
||||
assert!((0.0..=1.0).contains(&red) && (0.0..=1.0).contains(&green) && (0.0..=1.0).contains(&blue) && (0.0..=1.0).contains(&alpha), "Red needs to be in range 0..=1\nGreen needs to be in range 0..=1\nBlue needs to be in range 0..=1\nAlpha needs to be in range 0..=1");
|
||||
Self {
|
||||
red,
|
||||
green,
|
||||
|
@ -300,43 +300,29 @@ impl sRgba<f32> {
|
|||
}
|
||||
|
||||
pub fn to_hwba(&self) -> Hwba {
|
||||
let w = self.red.min(self.green).min(self.blue);
|
||||
let v = self.red.max(self.green).max(self.blue);
|
||||
let b = 1.0 - v;
|
||||
let (r,g,b) = (self.red, self.green, self.blue);
|
||||
|
||||
if v == w {
|
||||
return Hwba::new(
|
||||
0.0,
|
||||
w,
|
||||
b,
|
||||
self.alpha()
|
||||
)
|
||||
}
|
||||
let c_max = r.max(g).max(b);
|
||||
let c_min = r.min(g).min(b);
|
||||
let delta = c_max - c_min;
|
||||
|
||||
let f = if self.red == v {
|
||||
(self.green - self.blue) / (v - w)
|
||||
} else if self.green == v {
|
||||
(self.blue - self.red) / (v - w)
|
||||
let mut hue = if c_max == self.red {
|
||||
60.0 * (((self.green - self.blue) / delta) % 6.0)
|
||||
} else if c_max == self.green {
|
||||
60.0 * (((self.blue - self.red) / delta) + 2.0)
|
||||
} else if c_max == self.blue {
|
||||
60.0 * (((self.red - self.green) / delta) + 4.0)
|
||||
} else {
|
||||
(self.red - self.green) / (v - w)
|
||||
0.0
|
||||
};
|
||||
|
||||
let h = if self.red == v {
|
||||
(f / 6.0) % 1.0
|
||||
} else if self.green == v {
|
||||
(f + 2.0) / 6.0
|
||||
} else {
|
||||
(f + 4.0) / 6.0
|
||||
};
|
||||
|
||||
let mut h = if h < 0.0 { h + 1.0 } else { h };
|
||||
h *= 360.0;
|
||||
hue = if hue < 0.0 { hue + 360.0 } else { hue };
|
||||
|
||||
Hwba::new(
|
||||
h,
|
||||
w,
|
||||
b,
|
||||
self.alpha() as f32 / 255.0
|
||||
hue,
|
||||
c_min,
|
||||
1.0 - c_max,
|
||||
self.alpha
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ pub struct Entity {
|
|||
}
|
||||
|
||||
impl Entity {
|
||||
pub fn new(id: u32) -> Self {
|
||||
pub(crate) fn new(id: u32) -> Self {
|
||||
let mut components = BitSet::new();
|
||||
components.insert(0);
|
||||
Self {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue