From f22043a225e5ded85ccffcebbf712a8109fa7879 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 1 Nov 2021 16:25:49 +0000 Subject: [PATCH] LibGfx: Add FlagRole to GUI::Variant --- Userland/Libraries/LibGUI/Variant.cpp | 16 ++++++++++++++++ Userland/Libraries/LibGUI/Variant.h | 11 +++++++++++ Userland/Libraries/LibGfx/SystemTheme.h | 16 ++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/Userland/Libraries/LibGUI/Variant.cpp b/Userland/Libraries/LibGUI/Variant.cpp index 3c2aa75f87..541ed1a542 100644 --- a/Userland/Libraries/LibGUI/Variant.cpp +++ b/Userland/Libraries/LibGUI/Variant.cpp @@ -48,6 +48,8 @@ const char* to_string(Variant::Type type) return "TextAlignment"; case Variant::Type::ColorRole: return "ColorRole"; + case Variant::Type::FlagRole: + return "FlagRole"; case Variant::Type::MetricRole: return "MetricRole"; case Variant::Type::PathRole: @@ -97,6 +99,12 @@ Variant::Variant(Gfx::ColorRole value) m_value.as_color_role = value; } +Variant::Variant(Gfx::FlagRole value) + : m_type(Type::FlagRole) +{ + m_value.as_flag_role = value; +} + Variant::Variant(Gfx::MetricRole value) : m_type(Type::MetricRole) { @@ -347,6 +355,9 @@ void Variant::copy_from(const Variant& other) case Type::ColorRole: m_value.as_color_role = other.m_value.as_color_role; break; + case Type::FlagRole: + m_value.as_flag_role = other.m_value.as_flag_role; + break; case Type::MetricRole: m_value.as_metric_role = other.m_value.as_metric_role; break; @@ -395,6 +406,8 @@ bool Variant::operator==(const Variant& other) const return m_value.as_text_alignment == other.m_value.as_text_alignment; case Type::ColorRole: return m_value.as_color_role == other.m_value.as_color_role; + case Type::FlagRole: + return m_value.as_flag_role == other.m_value.as_flag_role; case Type::MetricRole: return m_value.as_metric_role == other.m_value.as_metric_role; case Type::PathRole: @@ -438,6 +451,7 @@ bool Variant::operator<(const Variant& other) const case Type::Font: case Type::TextAlignment: case Type::ColorRole: + case Type::FlagRole: case Type::MetricRole: case Type::PathRole: // FIXME: Figure out how to compare these. @@ -498,6 +512,8 @@ String Variant::to_string() const } case Type::ColorRole: return String::formatted("Gfx::ColorRole::{}", Gfx::to_string(m_value.as_color_role)); + case Type::FlagRole: + return String::formatted("Gfx::FlagRole::{}", Gfx::to_string(m_value.as_flag_role)); case Type::MetricRole: return String::formatted("Gfx::MetricRole::{}", Gfx::to_string(m_value.as_metric_role)); case Type::PathRole: diff --git a/Userland/Libraries/LibGUI/Variant.h b/Userland/Libraries/LibGUI/Variant.h index 7059d9a464..3bfb91e39e 100644 --- a/Userland/Libraries/LibGUI/Variant.h +++ b/Userland/Libraries/LibGUI/Variant.h @@ -35,6 +35,7 @@ public: Variant(const Gfx::Font&); Variant(const Gfx::TextAlignment); Variant(const Gfx::ColorRole); + Variant(const Gfx::FlagRole); Variant(const Gfx::MetricRole); Variant(const Gfx::PathRole); Variant(const JsonValue&); @@ -67,6 +68,7 @@ public: Font, TextAlignment, ColorRole, + FlagRole, MetricRole, PathRole, }; @@ -88,6 +90,7 @@ public: bool is_font() const { return m_type == Type::Font; } bool is_text_alignment() const { return m_type == Type::TextAlignment; } bool is_color_role() const { return m_type == Type::ColorRole; } + bool is_flag_role() const { return m_type == Type::FlagRole; } bool is_metric_role() const { return m_type == Type::MetricRole; } bool is_path_role() const { return m_type == Type::PathRole; } Type type() const { return m_type; } @@ -251,6 +254,13 @@ public: return m_value.as_color_role; } + Gfx::FlagRole to_flag_role() const + { + if (type() != Type::FlagRole) + return Gfx::FlagRole::NoRole; + return m_value.as_flag_role; + } + Gfx::MetricRole to_metric_role() const { if (type() != Type::MetricRole) @@ -315,6 +325,7 @@ private: Gfx::RGBA32 as_color; Gfx::TextAlignment as_text_alignment; Gfx::ColorRole as_color_role; + Gfx::FlagRole as_flag_role; Gfx::MetricRole as_metric_role; Gfx::PathRole as_path_role; RawPoint as_point; diff --git a/Userland/Libraries/LibGfx/SystemTheme.h b/Userland/Libraries/LibGfx/SystemTheme.h index c922963037..d81408b5a6 100644 --- a/Userland/Libraries/LibGfx/SystemTheme.h +++ b/Userland/Libraries/LibGfx/SystemTheme.h @@ -147,6 +147,22 @@ enum class FlagRole { __Count, }; +inline const char* to_string(FlagRole role) +{ + switch (role) { + case FlagRole::NoRole: + return "NoRole"; +#undef __ENUMERATE_FLAG_ROLE +#define __ENUMERATE_FLAG_ROLE(role) \ + case FlagRole::role: \ + return #role; + ENUMERATE_FLAG_ROLES(__ENUMERATE_FLAG_ROLE) +#undef __ENUMERATE_FLAG_ROLE + default: + VERIFY_NOT_REACHED(); + } +} + enum class MetricRole { NoRole,