From 2a72f7842700048d2da2f66e0678568ddc6cfdb4 Mon Sep 17 00:00:00 2001 From: Markus Sauermann <6299227+Sauermann@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:52:05 +0100 Subject: [PATCH] Fix `__focus_rect` meta access when resizing `Tree` `NOTIFICATION_RESIZED` outputs errors, if `select_mode == SELECT_ROW`. This PR unifies the access to the item focus rect. --- scene/gui/tree.cpp | 26 +++++++++++++------------- scene/gui/tree.h | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 643886c12df..f18f4e12324 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -3820,12 +3820,7 @@ void Tree::gui_input(const Ref &p_event) { Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); warp_mouse(range_drag_capture_pos); } else { - Rect2 rect; - if (select_mode == SELECT_ROW) { - rect = get_selected()->get_meta("__focus_col_" + itos(selected_col)); - } else { - rect = get_selected()->get_meta("__focus_rect"); - } + Rect2 rect = _get_item_focus_rect(get_selected()); Point2 mpos = mb->get_position(); int icon_size_x = 0; Ref icon = get_selected()->get_icon(selected_col); @@ -4203,12 +4198,7 @@ bool Tree::edit_selected(bool p_force_edit) { } float popup_scale = popup_editor->is_embedded() ? 1.0 : popup_editor->get_parent_visible_window()->get_content_scale_factor(); - Rect2 rect; - if (select_mode == SELECT_ROW) { - rect = s->get_meta("__focus_col_" + itos(selected_col)); - } else { - rect = s->get_meta("__focus_rect"); - } + Rect2 rect = _get_item_focus_rect(s); rect.position *= popup_scale; popup_edited_item = s; popup_edited_item_col = col; @@ -4315,6 +4305,16 @@ bool Tree::edit_selected(bool p_force_edit) { return false; } +Rect2 Tree::_get_item_focus_rect(const TreeItem *p_item) const { + Rect2 rect; + if (select_mode == SELECT_ROW) { + rect = p_item->get_meta("__focus_col_" + itos(selected_col)); + } else { + rect = p_item->get_meta("__focus_rect"); + } + return rect; +} + bool Tree::is_editing() { return popup_editor->is_visible(); } @@ -4597,7 +4597,7 @@ void Tree::_notification(int p_what) { case NOTIFICATION_RESIZED: case NOTIFICATION_TRANSFORM_CHANGED: { if (popup_edited_item != nullptr) { - Rect2 rect = popup_edited_item->get_meta("__focus_rect"); + Rect2 rect = _get_item_focus_rect(popup_edited_item); popup_editor->set_position(get_global_position() + rect.position); popup_editor->set_size(rect.size); diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 012963a25b5..e0739654dc1 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -716,6 +716,7 @@ private: Rect2 _get_scrollbar_layout_rect() const; Rect2 _get_content_rect() const; // Considering the background stylebox and scrollbars. + Rect2 _get_item_focus_rect(const TreeItem *p_item) const; protected: virtual void _update_theme_item_cache() override;