diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index d31340b2d46..3c6c9282c8c 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2402,11 +2402,11 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 } } - if ((select_mode == SELECT_ROW && selected_item == p_item) || (select_mode == SELECT_MULTI && selected_item == p_item && selected_col == i) || p_item->cells[i].selected || !p_item->has_meta("__focus_rect")) { + if ((select_mode == SELECT_ROW && selected_item == p_item) || (select_mode == SELECT_MULTI && selected_item == p_item && selected_col == i) || p_item->cells[i].selected || !p_item->focus_rect.has_area()) { Rect2i r = cell_rect; if (select_mode != SELECT_ROW) { - p_item->set_meta("__focus_rect", Rect2(r.position, r.size)); + p_item->focus_rect = Rect2(r.position, r.size); r = convert_rtl_rect(r); if (p_item->cells[i].selected) { if (is_cell_hovered) { @@ -2424,7 +2424,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 } } } else { - p_item->set_meta("__focus_col_" + itos(i), Rect2(r.position, r.size)); + p_item->cells.write[i].focus_rect = Rect2(r.position, r.size); } } @@ -4483,9 +4483,9 @@ bool Tree::edit_selected(bool p_force_edit) { 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)); + rect = p_item->cells[selected_col].focus_rect; } else { - rect = p_item->get_meta("__focus_rect"); + rect = p_item->focus_rect; } return rect; } @@ -4691,9 +4691,9 @@ void Tree::_accessibility_action_edit_custom(const Variant &p_data, TreeItem *p_ 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 = p_item->get_meta("__focus_col_" + itos(p_col)); + rect = p_item->cells[p_col].focus_rect; } else { - rect = p_item->get_meta("__focus_rect"); + rect = p_item->focus_rect; } rect.position *= popup_scale; diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 2d085677236..6b18bd486a8 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -100,6 +100,7 @@ private: Color icon_color = Color(1, 1, 1); Ref custom_stylebox; + Rect2 focus_rect; Size2i cached_minimum_size; bool cached_minimum_size_dirty = true; @@ -139,6 +140,7 @@ private: Vector cells; + Rect2 focus_rect; bool collapsed = false; // Won't show children. bool visible = true; bool parent_visible_in_tree = true;