mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 22:48:11 +00:00
LibCore: Allow array-like rectangle specifications for rect properties
This allows rectangle specifications in the form [x, y, width, height], which mirrors margin properties and is much more convenient than the JSON object specifications that were allowed before. Those are still allowed, of course.
This commit is contained in:
parent
3b03077abb
commit
4777dc75c5
1 changed files with 30 additions and 22 deletions
|
@ -311,28 +311,36 @@ T* Object::find_descendant_of_type_named(String const& name) requires IsBaseOf<O
|
|||
}, \
|
||||
{});
|
||||
|
||||
#define REGISTER_RECT_PROPERTY(property_name, getter, setter) \
|
||||
register_property( \
|
||||
property_name, \
|
||||
[this] { \
|
||||
auto rect = this->getter(); \
|
||||
JsonObject rect_object; \
|
||||
rect_object.set("x"sv, rect.x()); \
|
||||
rect_object.set("y"sv, rect.y()); \
|
||||
rect_object.set("width"sv, rect.width()); \
|
||||
rect_object.set("height"sv, rect.height()); \
|
||||
return rect_object; \
|
||||
}, \
|
||||
[this](auto& value) { \
|
||||
if (!value.is_object()) \
|
||||
return false; \
|
||||
Gfx::IntRect rect; \
|
||||
rect.set_x(value.as_object().get("x"sv).to_i32()); \
|
||||
rect.set_y(value.as_object().get("y"sv).to_i32()); \
|
||||
rect.set_width(value.as_object().get("width"sv).to_i32()); \
|
||||
rect.set_height(value.as_object().get("height"sv).to_i32()); \
|
||||
setter(rect); \
|
||||
return true; \
|
||||
#define REGISTER_RECT_PROPERTY(property_name, getter, setter) \
|
||||
register_property( \
|
||||
property_name, \
|
||||
[this] { \
|
||||
auto rect = this->getter(); \
|
||||
JsonObject rect_object; \
|
||||
rect_object.set("x"sv, rect.x()); \
|
||||
rect_object.set("y"sv, rect.y()); \
|
||||
rect_object.set("width"sv, rect.width()); \
|
||||
rect_object.set("height"sv, rect.height()); \
|
||||
return rect_object; \
|
||||
}, \
|
||||
[this](auto& value) { \
|
||||
Gfx::IntRect rect; \
|
||||
if (value.is_object()) { \
|
||||
rect.set_x(value.as_object().get("x"sv).to_i32()); \
|
||||
rect.set_y(value.as_object().get("y"sv).to_i32()); \
|
||||
rect.set_width(value.as_object().get("width"sv).to_i32()); \
|
||||
rect.set_height(value.as_object().get("height"sv).to_i32()); \
|
||||
} else if (value.is_array() && value.as_array().size() == 4) { \
|
||||
rect.set_x(value.as_array()[0].to_i32()); \
|
||||
rect.set_y(value.as_array()[1].to_i32()); \
|
||||
rect.set_width(value.as_array()[2].to_i32()); \
|
||||
rect.set_height(value.as_array()[3].to_i32()); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
setter(rect); \
|
||||
\
|
||||
return true; \
|
||||
});
|
||||
|
||||
#define REGISTER_SIZE_PROPERTY(property_name, getter, setter) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue