diff --git a/Userland/Libraries/LibGUI/Layout.cpp b/Userland/Libraries/LibGUI/Layout.cpp index 051a10b4ce..c90dbad25d 100644 --- a/Userland/Libraries/LibGUI/Layout.cpp +++ b/Userland/Libraries/LibGUI/Layout.cpp @@ -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] { diff --git a/Userland/Libraries/LibGUI/Margins.h b/Userland/Libraries/LibGUI/Margins.h index 55ccec266a..96078cb0d5 100644 --- a/Userland/Libraries/LibGUI/Margins.h +++ b/Userland/Libraries/LibGUI/Margins.h @@ -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; \ + });