LibGUI: Make a macro for registering a GUI::Margins object property

This will allow anyone to register a margins property without having
to duplicate the parsing logic.
This commit is contained in:
Andreas Kling 2021-06-15 14:27:24 +02:00
parent f20c5e1872
commit 46a7e1b372
Notes: sideshowbarker 2024-07-18 12:13:43 +09:00
2 changed files with 22 additions and 20 deletions
Userland/Libraries/LibGUI

View file

@ -14,26 +14,7 @@ namespace GUI {
Layout::Layout()
{
REGISTER_INT_PROPERTY("spacing", spacing, set_spacing);
register_property(
"margins",
[this] {
JsonObject margins_object;
margins_object.set("left", m_margins.left());
margins_object.set("right", m_margins.right());
margins_object.set("top", m_margins.top());
margins_object.set("bottom", m_margins.bottom());
return margins_object;
},
[this](auto value) {
if (!value.is_array() || value.as_array().size() != 4)
return false;
int m[4];
for (size_t i = 0; i < 4; ++i)
m[i] = value.as_array().at(i).to_i32();
set_margins({ m[0], m[1], m[2], m[3] });
return true;
});
REGISTER_MARGINS_PROPERTY("margins", margins, set_margins);
register_property("entries",
[this] {

View file

@ -46,4 +46,25 @@ private:
int m_right { 0 };
int m_bottom { 0 };
};
}
#define REGISTER_MARGINS_PROPERTY(property_name, getter, setter) \
register_property( \
property_name, [this]() { \
auto m = getter(); \
JsonObject margins_object; \
margins_object.set("left", m.left()); \
margins_object.set("right", m.right()); \
margins_object.set("top", m.top()); \
margins_object.set("bottom", m.bottom()); \
return margins_object; }, \
[this](auto& value) { \
if (!value.is_array() || value.as_array().size() != 4) \
return false; \
int m[4]; \
for (size_t i = 0; i < 4; ++i) \
m[i] = value.as_array().at(i).to_i32(); \
setter({ m[0], m[1], m[2], m[3] }); \
return true; \
});