mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-18 22:18:19 +00:00
Merge #6706
6706: Fix `color_cast` between `ColorHSLA` and `ColorHSVA` losing alpha, add test r=def- a=Robyt3 ## Checklist - [X] Tested the change ingame - [ ] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [X] Written a unit test (especially base/) or added coverage to integration test - [ ] Considered possible null pointers and out of bounds array indexing - [ ] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) Co-authored-by: Robert Müller <robytemueller@gmail.com>
This commit is contained in:
commit
f178bdf325
|
@ -228,14 +228,14 @@ template<>
|
|||
inline ColorHSLA color_cast(const ColorHSVA &hsv)
|
||||
{
|
||||
float l = hsv.v * (1 - hsv.s * 0.5f);
|
||||
return ColorHSLA(hsv.h, (l == 0.0f || l == 1.0f) ? 0 : (hsv.v - l) / minimum(l, 1 - l), l);
|
||||
return ColorHSLA(hsv.h, (l == 0.0f || l == 1.0f) ? 0 : (hsv.v - l) / minimum(l, 1 - l), l, hsv.a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline ColorHSVA color_cast(const ColorHSLA &hsl)
|
||||
{
|
||||
float v = hsl.l + hsl.s * minimum(hsl.l, 1 - hsl.l);
|
||||
return ColorHSVA(hsl.h, v == 0.0f ? 0 : 2 - (2 * hsl.l / v), v);
|
||||
return ColorHSVA(hsl.h, v == 0.0f ? 0 : 2 - (2 * hsl.l / v), v, hsl.a);
|
||||
}
|
||||
|
||||
template<>
|
||||
|
|
|
@ -23,3 +23,19 @@ TEST(Color, HRHConv)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Any color_cast should keep the same alpha value
|
||||
TEST(Color, ConvKeepsAlpha)
|
||||
{
|
||||
const int Max = 10;
|
||||
for(int i = 0; i <= Max; i++)
|
||||
{
|
||||
const float Alpha = i / (float)Max;
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorRGBA>(ColorHSLA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorRGBA>(ColorHSVA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorHSLA>(ColorRGBA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorHSLA>(ColorHSVA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorHSVA>(ColorRGBA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
EXPECT_FLOAT_EQ(color_cast<ColorHSVA>(ColorHSLA(0.1f, 0.2f, 0.3f, Alpha)).a, Alpha);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue