1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:07:45 +00:00

LibGfx: Accept decimal numbers when parsing rgb and rgba strings

This will round all numbers and clamp them within the limits of a u8.
This also standardises on returning u8 instead of uint/int.
This commit is contained in:
timmot 2023-11-18 20:14:42 +11:00 committed by Andreas Kling
parent da3cfd5bbc
commit 2ecc1d64d8

View file

@ -49,14 +49,14 @@ static Optional<Color> parse_rgb_color(StringView string)
if (parts.size() != 3) if (parts.size() != 3)
return {}; return {};
auto r = parts[0].to_uint().value_or(256); auto r = parts[0].to_double().map(AK::clamp_to<u8, double>);
auto g = parts[1].to_uint().value_or(256); auto g = parts[1].to_double().map(AK::clamp_to<u8, double>);
auto b = parts[2].to_uint().value_or(256); auto b = parts[2].to_double().map(AK::clamp_to<u8, double>);
if (r > 255 || g > 255 || b > 255) if (!r.has_value() || !g.has_value() || !b.has_value())
return {}; return {};
return Color(r, g, b); return Color(*r, *g, *b);
} }
static Optional<Color> parse_rgba_color(StringView string) static Optional<Color> parse_rgba_color(StringView string)
@ -70,9 +70,9 @@ static Optional<Color> parse_rgba_color(StringView string)
if (parts.size() != 4) if (parts.size() != 4)
return {}; return {};
auto r = parts[0].to_int().value_or(256); auto r = parts[0].to_double().map(AK::clamp_to<u8, double>);
auto g = parts[1].to_int().value_or(256); auto g = parts[1].to_double().map(AK::clamp_to<u8, double>);
auto b = parts[2].to_int().value_or(256); auto b = parts[2].to_double().map(AK::clamp_to<u8, double>);
double alpha = 0; double alpha = 0;
auto alpha_str = parts[3].trim_whitespace(); auto alpha_str = parts[3].trim_whitespace();
@ -83,10 +83,10 @@ static Optional<Color> parse_rgba_color(StringView string)
unsigned a = alpha * 255; unsigned a = alpha * 255;
if (r > 255 || g > 255 || b > 255 || a > 255) if (!r.has_value() || !g.has_value() || !b.has_value() || a > 255)
return {}; return {};
return Color(r, g, b, a); return Color(*r, *g, *b, a);
} }
Optional<Color> Color::from_named_css_color_string(StringView string) Optional<Color> Color::from_named_css_color_string(StringView string)