summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-06-03 10:36:02 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-06-03 10:36:02 +0200
commit9b4cfcba5f636b5557f68663fcbb781cbd82ab7d (patch)
tree5ec8f8eec7422e018fec0e4dce9efc89ba08eb5b
parentd1522847785b4ad7a4b732e0df48c119543f7c1e (diff)
parent81395cf9bdca881cd4bcc759546f9a89f16c6b2f (diff)
downloadredot-engine-9b4cfcba5f636b5557f68663fcbb781cbd82ab7d.tar.gz
Merge pull request #92669 from Hilderin/fix-huge-tscn-icon-in-background-of-file-system-panel
Fix huge .tscn icon and icon in background of File System panel
-rw-r--r--editor/filesystem_dock.cpp3
-rw-r--r--scene/gui/item_list.cpp22
-rw-r--r--scene/gui/item_list.h3
3 files changed, 26 insertions, 2 deletions
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index f91e970283..f8a82187b9 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -962,6 +962,9 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) {
files->set_max_text_lines(2);
files->set_fixed_icon_size(Size2(thumbnail_size, thumbnail_size));
+ const int icon_size = get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor));
+ files->set_fixed_tag_icon_size(Size2(icon_size, icon_size));
+
if (thumbnail_size < 64) {
folder_thumbnail = get_editor_theme_icon(SNAME("FolderMediumThumb"));
file_thumbnail = get_editor_theme_icon(SNAME("FileMediumThumb"));
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index cfb46aebc8..40c694184c 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -638,6 +638,16 @@ Size2 ItemList::Item::get_icon_size() const {
return size_result;
}
+void ItemList::set_fixed_tag_icon_size(const Size2i &p_size) {
+ if (fixed_tag_icon_size == p_size) {
+ return;
+ }
+
+ fixed_tag_icon_size = p_size;
+ queue_redraw();
+ shape_changed = true;
+}
+
void ItemList::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
@@ -1225,13 +1235,21 @@ void ItemList::_notification(int p_what) {
}
if (items[i].tag_icon.is_valid()) {
+ Size2 tag_icon_size;
+ if (fixed_tag_icon_size.x > 0 && fixed_tag_icon_size.y > 0) {
+ tag_icon_size = fixed_tag_icon_size;
+ } else {
+ tag_icon_size = items[i].tag_icon->get_size();
+ }
+
Point2 draw_pos = items[i].rect_cache.position;
draw_pos.x += theme_cache.h_separation / 2;
draw_pos.y += theme_cache.v_separation / 2;
if (rtl) {
- draw_pos.x = size.width - draw_pos.x - items[i].tag_icon->get_width();
+ draw_pos.x = size.width - draw_pos.x - tag_icon_size.x;
}
- draw_texture(items[i].tag_icon, draw_pos + base_ofs);
+
+ draw_texture_rect(items[i].tag_icon, Rect2(draw_pos + base_ofs, tag_icon_size));
}
if (!items[i].text.is_empty()) {
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index 9a57b9d8fe..a20688b3d0 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -120,6 +120,7 @@ private:
Size2 fixed_icon_size;
Size2 max_item_size_cache;
+ Size2 fixed_tag_icon_size;
int defer_select_single = -1;
bool allow_rmb_select = false;
@@ -261,6 +262,8 @@ public:
void set_fixed_icon_size(const Size2i &p_size);
Size2i get_fixed_icon_size() const;
+ void set_fixed_tag_icon_size(const Size2i &p_size);
+
void set_allow_rmb_select(bool p_allow);
bool get_allow_rmb_select() const;