diff options
author | Andreas Kling <kling@serenityos.org> | 2020-09-15 21:33:37 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-15 21:46:26 +0200 |
commit | e2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd (patch) | |
tree | bcc49c2fd5a87ffbfc992d0b1406b4c64e47941b /Libraries/LibGfx | |
parent | 1e96e46a8137e297d1d38271373145ac21f4da3e (diff) | |
download | serenity-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.h | 44 |
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 {}; } |