Selaa lähdekoodia

LibGUI: Introduce UIDimension properties

FrHun 3 vuotta sitten
vanhempi
commit
a4aced7f3a
2 muutettua tiedostoa jossa 44 lisäystä ja 6 poistoa
  1. 38 0
      Userland/Libraries/LibGUI/UIDimensions.h
  2. 6 6
      Userland/Libraries/LibGUI/Widget.cpp

+ 38 - 0
Userland/Libraries/LibGUI/UIDimensions.h

@@ -288,3 +288,41 @@ inline auto clamp<GUI::UIDimension>(GUI::UIDimension const& input, GUI::UIDimens
 }
 
 }
+
+#define REGISTER_UI_DIMENSION_PROPERTY(property_name, getter, setter)         \
+    register_property(                                                        \
+        property_name,                                                        \
+        [this] {                                                              \
+            return this->getter().as_json_value();                            \
+        },                                                                    \
+        [this](auto& value) {                                                 \
+            auto result = GUI::UIDimension::construct_from_json_value(value); \
+            if (result.has_value())                                           \
+                this->setter(result.value());                                 \
+            return result.has_value();                                        \
+        });
+
+#define REGISTER_UI_SIZE_PROPERTY(property_name, getter, setter)               \
+    register_property(                                                         \
+        property_name,                                                         \
+        [this] {                                                               \
+            auto size = this->getter();                                        \
+            JsonObject size_object;                                            \
+            size_object.set("width", size.width().as_json_value());            \
+            size_object.set("height", size.height().as_json_value());          \
+            return size_object;                                                \
+        },                                                                     \
+        [this](auto& value) {                                                  \
+            if (!value.is_object())                                            \
+                return false;                                                  \
+            auto result_width = GUI::UIDimension::construct_from_json_value(   \
+                value.as_object().get("width"));                               \
+            auto result_height = GUI::UIDimension::construct_from_json_value(  \
+                value.as_object().get("height"));                              \
+            if (result_width.has_value() && result_height.has_value()) {       \
+                GUI::UISize size(result_width.value(), result_height.value()); \
+                setter(size);                                                  \
+                return true;                                                   \
+            }                                                                  \
+            return false;                                                      \
+        });

+ 6 - 6
Userland/Libraries/LibGUI/Widget.cpp

@@ -49,14 +49,14 @@ Widget::Widget()
     REGISTER_BOOL_PROPERTY("enabled", is_enabled, set_enabled);
     REGISTER_STRING_PROPERTY("tooltip", tooltip, set_tooltip);
 
-    REGISTER_SIZE_PROPERTY("min_size", min_size, set_min_size);
-    REGISTER_SIZE_PROPERTY("max_size", max_size, set_max_size);
+    REGISTER_UI_SIZE_PROPERTY("min_size", min_size, set_min_size);
+    REGISTER_UI_SIZE_PROPERTY("max_size", max_size, set_max_size);
     REGISTER_INT_PROPERTY("width", width, set_width);
-    REGISTER_INT_PROPERTY("min_width", min_width, set_min_width);
-    REGISTER_INT_PROPERTY("max_width", max_width, set_max_width);
-    REGISTER_INT_PROPERTY("min_height", min_height, set_min_height);
+    REGISTER_UI_DIMENSION_PROPERTY("min_width", min_width, set_min_width);
+    REGISTER_UI_DIMENSION_PROPERTY("max_width", max_width, set_max_width);
     REGISTER_INT_PROPERTY("height", height, set_height);
-    REGISTER_INT_PROPERTY("max_height", max_height, set_max_height);
+    REGISTER_UI_DIMENSION_PROPERTY("min_height", min_height, set_min_height);
+    REGISTER_UI_DIMENSION_PROPERTY("max_height", max_height, set_max_height);
 
     REGISTER_INT_PROPERTY("fixed_width", dummy_fixed_width, set_fixed_width);
     REGISTER_INT_PROPERTY("fixed_height", dummy_fixed_height, set_fixed_height);