Use a different color for folder icons in file dialogs

This makes them easier to distinguish from files for quick
visual grepping.

This can also be used in projects by setting the FileDialog "folder"
color. The default value (`Color(1, 1, 1)`) has no visual impact,
for compatibility with existing projects.
This commit is contained in:
Hugo Locurcio 2019-08-20 00:08:40 +02:00
parent cce148b024
commit be8d569744
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C
5 changed files with 22 additions and 0 deletions

View file

@ -257,6 +257,7 @@ void EditorFileDialog::_post_popup() {
if (is_visible_in_tree()) { if (is_visible_in_tree()) {
Ref<Texture> folder = get_icon("folder", "FileDialog"); Ref<Texture> folder = get_icon("folder", "FileDialog");
const Color folder_color = get_color("folder", "FileDialog");
recent->clear(); recent->clear();
bool res = access == ACCESS_RESOURCES; bool res = access == ACCESS_RESOURCES;
@ -274,6 +275,7 @@ void EditorFileDialog::_post_popup() {
recent->add_item(name, folder); recent->add_item(name, folder);
recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]); recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]);
recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color);
} }
local_history.clear(); local_history.clear();
@ -734,6 +736,7 @@ void EditorFileDialog::update_file_list() {
dir_access->list_dir_begin(); dir_access->list_dir_begin();
Ref<Texture> folder = get_icon("folder", "FileDialog"); Ref<Texture> folder = get_icon("folder", "FileDialog");
const Color folder_color = get_color("folder", "FileDialog");
List<String> files; List<String> files;
List<String> dirs; List<String> dirs;
@ -774,6 +777,7 @@ void EditorFileDialog::update_file_list() {
d["dir"] = true; d["dir"] = true;
item_list->set_item_metadata(item_list->get_item_count() - 1, d); item_list->set_item_metadata(item_list->get_item_count() - 1, d);
item_list->set_item_icon_modulate(item_list->get_item_count() - 1, folder_color);
dirs.pop_front(); dirs.pop_front();
} }
@ -1200,6 +1204,7 @@ void EditorFileDialog::_update_favorites() {
String current = get_current_dir(); String current = get_current_dir();
Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons"); Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons");
const Color folder_color = get_color("folder", "FileDialog");
favorites->clear(); favorites->clear();
favorite->set_pressed(false); favorite->set_pressed(false);
@ -1230,6 +1235,7 @@ void EditorFileDialog::_update_favorites() {
} }
favorites->set_item_metadata(favorites->get_item_count() - 1, favorited[i]); favorites->set_item_metadata(favorites->get_item_count() - 1, favorited[i]);
favorites->set_item_icon_modulate(favorites->get_item_count() - 1, folder_color);
if (setthis) { if (setthis) {
favorite->set_pressed(true); favorite->set_pressed(true);

View file

@ -1066,6 +1066,9 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// FileDialog // FileDialog
theme->set_icon("folder", "FileDialog", theme->get_icon("Folder", "EditorIcons")); theme->set_icon("folder", "FileDialog", theme->get_icon("Folder", "EditorIcons"));
// Use a different color for folder icons to make them easier to distinguish from files.
// On a light theme, the icon will be dark, so we need to lighten it before blending it with the accent color.
theme->set_color("folder", "FileDialog", (dark_theme ? Color(1, 1, 1) : Color(5, 5, 5)).linear_interpolate(accent_color, 0.7));
theme->set_color("files_disabled", "FileDialog", font_color_disabled); theme->set_color("files_disabled", "FileDialog", font_color_disabled);
// color picker // color picker

View file

@ -64,6 +64,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory
subdirectory_item->set_text(0, dname); subdirectory_item->set_text(0, dname);
subdirectory_item->set_icon(0, get_icon("Folder", "EditorIcons")); subdirectory_item->set_icon(0, get_icon("Folder", "EditorIcons"));
subdirectory_item->set_icon_color(0, get_color("folder", "FileDialog"));
subdirectory_item->set_selectable(0, true); subdirectory_item->set_selectable(0, true);
String lpath = p_dir->get_path(); String lpath = p_dir->get_path();
subdirectory_item->set_metadata(0, lpath); subdirectory_item->set_metadata(0, lpath);
@ -186,15 +187,19 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo
continue; continue;
Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons"); Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons");
const Color folder_color = get_color("folder", "FileDialog");
String text; String text;
Ref<Texture> icon; Ref<Texture> icon;
Color color;
if (fave == "res://") { if (fave == "res://") {
text = "/"; text = "/";
icon = folder_icon; icon = folder_icon;
color = folder_color;
} else if (fave.ends_with("/")) { } else if (fave.ends_with("/")) {
text = fave.substr(0, fave.length() - 1).get_file(); text = fave.substr(0, fave.length() - 1).get_file();
icon = folder_icon; icon = folder_icon;
color = folder_color;
} else { } else {
text = fave.get_file(); text = fave.get_file();
int index; int index;
@ -204,12 +209,14 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo
} else { } else {
icon = get_icon("File", "EditorIcons"); icon = get_icon("File", "EditorIcons");
} }
color = Color(1, 1, 1);
} }
if (searched_string.length() == 0 || text.to_lower().find(searched_string) >= 0) { if (searched_string.length() == 0 || text.to_lower().find(searched_string) >= 0) {
TreeItem *ti = tree->create_item(favorites); TreeItem *ti = tree->create_item(favorites);
ti->set_text(0, text); ti->set_text(0, text);
ti->set_icon(0, icon); ti->set_icon(0, icon);
ti->set_icon_color(0, color);
ti->set_tooltip(0, fave); ti->set_tooltip(0, fave);
ti->set_selectable(0, true); ti->set_selectable(0, true);
ti->set_metadata(0, fave); ti->set_metadata(0, fave);
@ -639,6 +646,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) {
} }
Ref<Texture> folder_icon = (use_thumbnails) ? folder_thumbnail : get_icon("folder", "FileDialog"); Ref<Texture> folder_icon = (use_thumbnails) ? folder_thumbnail : get_icon("folder", "FileDialog");
const Color folder_color = get_color("folder", "FileDialog");
// Build the FileInfo list // Build the FileInfo list
List<FileInfo> filelist; List<FileInfo> filelist;
@ -716,6 +724,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) {
files->set_item_metadata(files->get_item_count() - 1, bd); files->set_item_metadata(files->get_item_count() - 1, bd);
files->set_item_selectable(files->get_item_count() - 1, false); files->set_item_selectable(files->get_item_count() - 1, false);
files->set_item_icon_modulate(files->get_item_count() - 1, folder_color);
} }
for (int i = 0; i < efd->get_subdir_count(); i++) { for (int i = 0; i < efd->get_subdir_count(); i++) {
@ -724,6 +733,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) {
files->add_item(dname, folder_icon, true); files->add_item(dname, folder_icon, true);
files->set_item_metadata(files->get_item_count() - 1, directory.plus_file(dname) + "/"); files->set_item_metadata(files->get_item_count() - 1, directory.plus_file(dname) + "/");
files->set_item_icon_modulate(files->get_item_count() - 1, folder_color);
if (cselection.has(dname)) { if (cselection.has(dname)) {
files->select(files->get_item_count() - 1, false); files->select(files->get_item_count() - 1, false);

View file

@ -400,6 +400,7 @@ void FileDialog::update_file_list() {
TreeItem *root = tree->create_item(); TreeItem *root = tree->create_item();
Ref<Texture> folder = get_icon("folder"); Ref<Texture> folder = get_icon("folder");
const Color folder_color = get_color("folder");
List<String> files; List<String> files;
List<String> dirs; List<String> dirs;
@ -429,6 +430,7 @@ void FileDialog::update_file_list() {
TreeItem *ti = tree->create_item(root); TreeItem *ti = tree->create_item(root);
ti->set_text(0, dir_name); ti->set_text(0, dir_name);
ti->set_icon(0, folder); ti->set_icon(0, folder);
ti->set_icon_color(0, folder_color);
Dictionary d; Dictionary d;
d["name"] = dir_name; d["name"] = dir_name;

View file

@ -760,6 +760,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
// FileDialog // FileDialog
theme->set_icon("folder", "FileDialog", make_icon(icon_folder_png)); theme->set_icon("folder", "FileDialog", make_icon(icon_folder_png));
theme->set_color("folder", "FileDialog", Color(1, 1, 1));
theme->set_color("files_disabled", "FileDialog", Color(0, 0, 0, 0.7)); theme->set_color("files_disabled", "FileDialog", Color(0, 0, 0, 0.7));
// colorPicker // colorPicker