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:
parent
4e80f22cc0
commit
d0eb35e5c3
2 changed files with 14 additions and 9 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue