mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +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)
|
inline ColorHSLA color_cast(const ColorHSVA &hsv)
|
||||||
{
|
{
|
||||||
float l = hsv.v * (1 - hsv.s * 0.5f);
|
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<>
|
template<>
|
||||||
inline ColorHSVA color_cast(const ColorHSLA &hsl)
|
inline ColorHSVA color_cast(const ColorHSLA &hsl)
|
||||||
{
|
{
|
||||||
float v = hsl.l + hsl.s * minimum(hsl.l, 1 - hsl.l);
|
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<>
|
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