1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:07:35 +00:00

LibGfx: Use a bit of constexpr in Color

This avoids a bunch of strlen()'s when we're parsing web colors.
This commit is contained in:
Andreas Kling 2020-05-30 16:06:59 +02:00
parent 4e80f22cc0
commit d0eb35e5c3
2 changed files with 14 additions and 9 deletions

View file

@ -204,11 +204,16 @@ Optional<Color> Color::from_string(const StringView& string)
return {}; return {};
struct ColorAndWebName { struct ColorAndWebName {
constexpr ColorAndWebName(RGBA32 c, const char* n)
: color(c)
, name(n)
{
}
RGBA32 color; RGBA32 color;
const char* name; StringView name;
}; };
const ColorAndWebName web_colors[] = { constexpr ColorAndWebName web_colors[] = {
// CSS Level 1 // CSS Level 1
{ 0x000000, "black" }, { 0x000000, "black" },
{ 0xc0c0c0, "silver" }, { 0xc0c0c0, "silver" },
@ -365,7 +370,7 @@ Optional<Color> Color::from_string(const StringView& string)
{ 0x000000, nullptr } { 0x000000, nullptr }
}; };
for (size_t i = 0; web_colors[i].name; ++i) { for (size_t i = 0; !web_colors[i].name.is_null(); ++i) {
if (string == web_colors[i].name) if (string == web_colors[i].name)
return Color::from_rgb(web_colors[i].color); return Color::from_rgb(web_colors[i].color);
} }

View file

@ -72,19 +72,19 @@ public:
MidMagenta, MidMagenta,
}; };
Color() {} constexpr Color() { }
Color(NamedColor); Color(NamedColor);
Color(u8 r, u8 g, u8 b) constexpr Color(u8 r, u8 g, u8 b)
: m_value(0xff000000 | (r << 16) | (g << 8) | b) : m_value(0xff000000 | (r << 16) | (g << 8) | b)
{ {
} }
Color(u8 r, u8 g, u8 b, u8 a) constexpr Color(u8 r, u8 g, u8 b, u8 a)
: m_value((a << 24) | (r << 16) | (g << 8) | b) : m_value((a << 24) | (r << 16) | (g << 8) | b)
{ {
} }
static Color from_rgb(unsigned rgb) { return Color(rgb | 0xff000000); } static constexpr Color from_rgb(unsigned rgb) { return Color(rgb | 0xff000000); }
static Color from_rgba(unsigned rgba) { return Color(rgba); } static constexpr Color from_rgba(unsigned rgba) { return Color(rgba); }
u8 red() const { return (m_value >> 16) & 0xff; } u8 red() const { return (m_value >> 16) & 0xff; }
u8 green() const { return (m_value >> 8) & 0xff; } u8 green() const { return (m_value >> 8) & 0xff; }
@ -267,7 +267,7 @@ public:
} }
private: private:
explicit Color(RGBA32 rgba) constexpr explicit Color(RGBA32 rgba)
: m_value(rgba) : m_value(rgba)
{ {
} }