summaryrefslogtreecommitdiff
path: root/Libraries/LibGfx
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-09-15 21:33:37 +0200
committerAndreas Kling <kling@serenityos.org>2020-09-15 21:46:26 +0200
commite2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd (patch)
treebcc49c2fd5a87ffbfc992d0b1406b4c64e47941b /Libraries/LibGfx
parent1e96e46a8137e297d1d38271373145ac21f4da3e (diff)
downloadserenity-e2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd.zip
LibCore: Make Core::Object properties more dynamic
Instead of everyone overriding save_to() and set_property() and doing a pretty asymmetric job of implementing the various properties, let's add a bit of structure here. Object properties are now represented by a Core::Property. Properties are registered with a getter and setter (optional) in constructors. I've added some convenience macros for creating and registering properties, but this does still feel a bit bulky. We'll have to iterate on this and see where it goes.
Diffstat (limited to 'Libraries/LibGfx')
-rw-r--r--Libraries/LibGfx/TextAlignment.h44
1 files changed, 26 insertions, 18 deletions
diff --git a/Libraries/LibGfx/TextAlignment.h b/Libraries/LibGfx/TextAlignment.h
index a29846afdb..5c34b4cf26 100644
--- a/Libraries/LibGfx/TextAlignment.h
+++ b/Libraries/LibGfx/TextAlignment.h
@@ -31,13 +31,18 @@
namespace Gfx {
+#define GFX_ENUMERATE_TEXT_ALIGNMENTS(M) \
+ M(TopLeft) \
+ M(CenterLeft) \
+ M(Center) \
+ M(CenterRight) \
+ M(TopRight) \
+ M(BottomRight)
+
enum class TextAlignment {
- TopLeft,
- CenterLeft,
- Center,
- CenterRight,
- TopRight,
- BottomRight,
+#define __ENUMERATE(x) x,
+ GFX_ENUMERATE_TEXT_ALIGNMENTS(__ENUMERATE)
+#undef __ENUMERATE
};
inline bool is_right_text_alignment(TextAlignment alignment)
@@ -54,18 +59,21 @@ inline bool is_right_text_alignment(TextAlignment alignment)
inline Optional<TextAlignment> text_alignment_from_string(const StringView& string)
{
- if (string == "TopLeft")
- return TextAlignment::TopLeft;
- if (string == "CenterLeft")
- return TextAlignment::CenterLeft;
- if (string == "Center")
- return TextAlignment::Center;
- if (string == "CenterRight")
- return TextAlignment::CenterRight;
- if (string == "TopRight")
- return TextAlignment::TopRight;
- if (string == "BottomRight")
- return TextAlignment::BottomRight;
+#define __ENUMERATE(x) \
+ if (string == #x) \
+ return TextAlignment::x;
+ GFX_ENUMERATE_TEXT_ALIGNMENTS(__ENUMERATE)
+#undef __ENUMERATE
+ return {};
+}
+
+inline const char* to_string(TextAlignment text_alignment)
+{
+#define __ENUMERATE(x) \
+ if (text_alignment == TextAlignment::x) \
+ return #x;
+ GFX_ENUMERATE_TEXT_ALIGNMENTS(__ENUMERATE)
+#undef __ENUMERATE
return {};
}