summaryrefslogtreecommitdiffstats
path: root/scene/gui/tree.h
diff options
context:
space:
mode:
authorDanil Alexeev <danil@alexeev.xyz>2023-07-11 11:58:19 +0300
committerDanil Alexeev <danil@alexeev.xyz>2023-08-04 16:11:26 +0300
commit5fb975e4a578579bd02d287e4aa3b98daa2c0e3a (patch)
tree0e8ba6fb45f206d4bca507b496e997d25a85a05e /scene/gui/tree.h
parenteb4301b941fa211de204e37bd4d701f7e490a945 (diff)
downloadredot-engine-5fb975e4a578579bd02d287e4aa3b98daa2c0e3a.tar.gz
GUI: Fix `Tree` performance regression by using cache
Diffstat (limited to 'scene/gui/tree.h')
-rw-r--r--scene/gui/tree.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index ce4379d7fe..cb00889cb9 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -452,6 +452,10 @@ private:
Ref<TextParagraph> text_buf;
String language;
Control::TextDirection text_direction = Control::TEXT_DIRECTION_INHERITED;
+
+ mutable int cached_minimum_width = 0;
+ mutable bool cached_minimum_width_dirty = true;
+
ColumnInfo() {
text_buf.instantiate();
}
@@ -484,7 +488,7 @@ private:
void update_item_cache(TreeItem *p_item);
//void draw_item_text(String p_text,const Ref<Texture2D>& p_icon,int p_icon_max_w,bool p_tool,Rect2i p_rect,const Color& p_color);
void draw_item_rect(TreeItem::Cell &p_cell, const Rect2i &p_rect, const Color &p_color, const Color &p_icon_color, int p_ol_size, const Color &p_ol_color);
- int draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item, int *r_self_height = nullptr);
+ int draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item, int &r_self_height);
void select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_col, TreeItem *p_prev = nullptr, bool *r_in_range = nullptr, bool p_force_deselect = false);
int propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x_limit, bool p_double_click, TreeItem *p_item, MouseButton p_button, const Ref<InputEventWithModifiers> &p_mod);
void _line_editor_submit(String p_text);