Merge pull request #71183 from YuriSizov/control-refresh-layouts-by-parents

Ensure that the cached layout mode is in sync
This commit is contained in:
Rémi Verschelde 2023-01-11 01:29:51 +01:00 committed by GitHub
commit 3e2843e3ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 0 deletions

View File

@ -727,6 +727,7 @@ void ControlEditorToolbar::_anchors_preset_selected(int p_preset) {
for (Node *E : selection) { for (Node *E : selection) {
Control *control = Object::cast_to<Control>(E); Control *control = Object::cast_to<Control>(E);
if (control) { if (control) {
undo_redo->add_do_property(control, "layout_mode", LayoutMode::LAYOUT_MODE_ANCHORS);
undo_redo->add_do_property(control, "anchors_preset", preset); undo_redo->add_do_property(control, "anchors_preset", preset);
undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state()); undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state());
} }

View File

@ -864,6 +864,14 @@ void Control::_set_layout_mode(LayoutMode p_mode) {
} }
} }
void Control::_update_layout_mode() {
LayoutMode computed_layout = _get_layout_mode();
if (data.stored_layout_mode != computed_layout) {
data.stored_layout_mode = computed_layout;
notify_property_list_changed();
}
}
Control::LayoutMode Control::_get_layout_mode() const { Control::LayoutMode Control::_get_layout_mode() const {
Node *parent_node = get_parent_control(); Node *parent_node = get_parent_control();
// In these modes the property is read-only. // In these modes the property is read-only.
@ -2894,6 +2902,8 @@ void Control::_notification(int p_notification) {
data.parent_window = Object::cast_to<Window>(parent_node); data.parent_window = Object::cast_to<Window>(parent_node);
data.theme_owner->assign_theme_on_parented(this); data.theme_owner->assign_theme_on_parented(this);
_update_layout_mode();
} break; } break;
case NOTIFICATION_UNPARENTED: { case NOTIFICATION_UNPARENTED: {

View File

@ -282,6 +282,7 @@ private:
void _compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]); void _compute_anchors(Rect2 p_rect, const real_t p_offsets[4], real_t (&r_anchors)[4]);
void _set_layout_mode(LayoutMode p_mode); void _set_layout_mode(LayoutMode p_mode);
void _update_layout_mode();
LayoutMode _get_layout_mode() const; LayoutMode _get_layout_mode() const;
LayoutMode _get_default_layout_mode() const; LayoutMode _get_default_layout_mode() const;
void _set_anchors_layout_preset(int p_preset); void _set_anchors_layout_preset(int p_preset);