summaryrefslogtreecommitdiffstats
path: root/scene
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-09-12 10:28:44 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-09-12 10:28:44 +0200
commitcc5211214432515bf36af8b01e5eaaea242022a2 (patch)
tree1588e2925d36a3fa118b5b3915f8ab21b04e0386 /scene
parent6b9f4418bb3802992fbf41e52c032d07e02974b4 (diff)
parentda4f5fb953dfeac78093235b0d0828ca944aa0a4 (diff)
downloadredot-engine-cc5211214432515bf36af8b01e5eaaea242022a2.tar.gz
Merge pull request #96643 from bruvzg/fs_links
[FileSystem Dock] Add symlink indicator and tooltip.
Diffstat (limited to 'scene')
-rw-r--r--scene/gui/tree.cpp28
-rw-r--r--scene/gui/tree.h4
2 files changed, 32 insertions, 0 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 8871af23cb..e4f52ee8ee 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -62,8 +62,15 @@ void TreeItem::Cell::draw_icon(const RID &p_where, const Point2 &p_pos, const Si
if (icon_region == Rect2i()) {
icon->draw_rect_region(p_where, Rect2(p_pos, dsize), Rect2(Point2(), icon->get_size()), p_color);
+ if (icon_overlay.is_valid()) {
+ Vector2 offset = icon->get_size() - icon_overlay->get_size();
+ icon_overlay->draw_rect_region(p_where, Rect2(p_pos + offset, dsize), Rect2(Point2(), icon_overlay->get_size()), p_color);
+ }
} else {
icon->draw_rect_region(p_where, Rect2(p_pos, dsize), icon_region, p_color);
+ if (icon_overlay.is_valid()) {
+ icon_overlay->draw_rect_region(p_where, Rect2(p_pos, dsize), icon_region, p_color);
+ }
}
}
@@ -477,6 +484,24 @@ Ref<Texture2D> TreeItem::get_icon(int p_column) const {
return cells[p_column].icon;
}
+void TreeItem::set_icon_overlay(int p_column, const Ref<Texture2D> &p_icon_overlay) {
+ ERR_FAIL_INDEX(p_column, cells.size());
+
+ if (cells[p_column].icon_overlay == p_icon_overlay) {
+ return;
+ }
+
+ cells.write[p_column].icon_overlay = p_icon_overlay;
+ cells.write[p_column].cached_minimum_size_dirty = true;
+
+ _changed_notify(p_column);
+}
+
+Ref<Texture2D> TreeItem::get_icon_overlay(int p_column) const {
+ ERR_FAIL_INDEX_V(p_column, cells.size(), Ref<Texture2D>());
+ return cells[p_column].icon_overlay;
+}
+
void TreeItem::set_icon_region(int p_column, const Rect2 &p_icon_region) {
ERR_FAIL_INDEX(p_column, cells.size());
@@ -1633,6 +1658,9 @@ void TreeItem::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_icon", "column", "texture"), &TreeItem::set_icon);
ClassDB::bind_method(D_METHOD("get_icon", "column"), &TreeItem::get_icon);
+ ClassDB::bind_method(D_METHOD("set_icon_overlay", "column", "texture"), &TreeItem::set_icon_overlay);
+ ClassDB::bind_method(D_METHOD("get_icon_overlay", "column"), &TreeItem::get_icon_overlay);
+
ClassDB::bind_method(D_METHOD("set_icon_region", "column", "region"), &TreeItem::set_icon_region);
ClassDB::bind_method(D_METHOD("get_icon_region", "column"), &TreeItem::get_icon_region);
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index 4518708685..17ea31a733 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -60,6 +60,7 @@ private:
TreeCellMode mode = TreeItem::CELL_MODE_STRING;
Ref<Texture2D> icon;
+ Ref<Texture2D> icon_overlay;
Rect2i icon_region;
String text;
String xl_text;
@@ -257,6 +258,9 @@ public:
void set_icon(int p_column, const Ref<Texture2D> &p_icon);
Ref<Texture2D> get_icon(int p_column) const;
+ void set_icon_overlay(int p_column, const Ref<Texture2D> &p_icon_overlay);
+ Ref<Texture2D> get_icon_overlay(int p_column) const;
+
void set_icon_region(int p_column, const Rect2 &p_icon_region);
Rect2 get_icon_region(int p_column) const;