diff options
Diffstat (limited to 'editor/gui/editor_file_dialog.cpp')
| -rw-r--r-- | editor/gui/editor_file_dialog.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/editor/gui/editor_file_dialog.cpp b/editor/gui/editor_file_dialog.cpp index 22761d3773..797cc3dde9 100644 --- a/editor/gui/editor_file_dialog.cpp +++ b/editor/gui/editor_file_dialog.cpp @@ -40,6 +40,7 @@ #include "editor/editor_resource_preview.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" +#include "editor/filesystem_dock.h" #include "scene/gui/center_container.h" #include "scene/gui/label.h" #include "scene/gui/margin_container.h" @@ -766,6 +767,28 @@ void EditorFileDialog::update_file_name() { } } +// TODO: Could use a unit test. +Color EditorFileDialog::get_dir_icon_color(const String &p_dir_path) { + const HashMap<String, Color> &folder_colors = FileSystemDock::get_singleton()->get_folder_colors(); + Dictionary assigned_folder_colors = FileSystemDock::get_singleton()->get_assigned_folder_colors(); + + Color folder_icon_color = theme_cache.folder_icon_color; + + // Check for a folder color to inherit (if one is assigned). + String parent_dir = p_dir_path; + while (parent_dir != "res://" && folder_icon_color == theme_cache.folder_icon_color) { + if (!parent_dir.ends_with("/")) { + parent_dir += "/"; + } + if (assigned_folder_colors.has(parent_dir)) { + folder_icon_color = folder_colors[assigned_folder_colors[parent_dir]]; + } + parent_dir = parent_dir.trim_suffix("/").get_base_dir(); + } + + return folder_icon_color; +} + // DO NOT USE THIS FUNCTION UNLESS NEEDED, CALL INVALIDATE() INSTEAD. void EditorFileDialog::update_file_list() { int thumbnail_size = EDITOR_GET("filesystem/file_dialog/thumbnail_size"); @@ -859,7 +882,7 @@ void EditorFileDialog::update_file_list() { d["dir"] = true; item_list->set_item_metadata(-1, d); - item_list->set_item_icon_modulate(-1, theme_cache.folder_icon_color); + item_list->set_item_icon_modulate(-1, get_dir_icon_color(String(d["path"]))); dirs.pop_front(); } @@ -1435,7 +1458,7 @@ void EditorFileDialog::_update_favorites() { for (int i = 0; i < favorited_paths.size(); i++) { favorites->add_item(favorited_names[i], theme_cache.folder); favorites->set_item_metadata(-1, favorited_paths[i]); - favorites->set_item_icon_modulate(-1, theme_cache.folder_icon_color); + favorites->set_item_icon_modulate(-1, get_dir_icon_color(favorited_paths[i])); if (i == current_favorite) { favorite->set_pressed(true); @@ -1518,7 +1541,7 @@ void EditorFileDialog::_update_recent() { for (int i = 0; i < recentd_paths.size(); i++) { recent->add_item(recentd_names[i], theme_cache.folder); recent->set_item_metadata(-1, recentd_paths[i]); - recent->set_item_icon_modulate(-1, theme_cache.folder_icon_color); + recent->set_item_icon_modulate(-1, get_dir_icon_color(recentd_paths[i])); } EditorSettings::get_singleton()->set_recent_dirs(recentd); } |
