|
@@ -30,6 +30,7 @@
|
|
|
|
|
|
#include "control.h"
|
|
|
|
|
|
+#include "container.h"
|
|
|
#include "core/config/project_settings.h"
|
|
|
#include "core/math/geometry_2d.h"
|
|
|
#include "core/object/message_queue.h"
|
|
@@ -168,6 +169,20 @@ Size2 Control::_edit_get_minimum_size() const {
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+String Control::properties_managed_by_container[] = {
|
|
|
+ "offset_left",
|
|
|
+ "offset_top",
|
|
|
+ "offset_right",
|
|
|
+ "offset_bottom",
|
|
|
+ "anchor_left",
|
|
|
+ "anchor_top",
|
|
|
+ "anchor_right",
|
|
|
+ "anchor_bottom",
|
|
|
+ "rect_position",
|
|
|
+ "rect_scale",
|
|
|
+ "rect_size"
|
|
|
+};
|
|
|
+
|
|
|
void Control::accept_event() {
|
|
|
if (is_inside_tree()) {
|
|
|
get_viewport()->_gui_accept_event();
|
|
@@ -442,6 +457,20 @@ void Control::_validate_property(PropertyInfo &property) const {
|
|
|
|
|
|
property.hint_string = hint_string;
|
|
|
}
|
|
|
+ if (!Object::cast_to<Container>(get_parent())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // Disable the property if it's managed by the parent container.
|
|
|
+ bool property_is_managed_by_container = false;
|
|
|
+ for (unsigned i = 0; i < properties_managed_by_container_count; i++) {
|
|
|
+ property_is_managed_by_container = properties_managed_by_container[i] == property.name;
|
|
|
+ if (property_is_managed_by_container) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (property_is_managed_by_container) {
|
|
|
+ property.usage |= PROPERTY_USAGE_READ_ONLY;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
Control *Control::get_parent_control() const {
|