Browse Source

Merge pull request #73526 from YuriSizov/branded-project-llc

Add a custom icon for the `project.godot` file in the `EditorFileDialog`
Rémi Verschelde 2 years ago
parent
commit
9ccfe68d50

+ 10 - 2
editor/editor_file_dialog.cpp

@@ -50,7 +50,7 @@
 #include "servers/display_server.h"
 
 EditorFileDialog::GetIconFunc EditorFileDialog::get_icon_func = nullptr;
-EditorFileDialog::GetIconFunc EditorFileDialog::get_large_icon_func = nullptr;
+EditorFileDialog::GetIconFunc EditorFileDialog::get_thumbnail_func = nullptr;
 
 EditorFileDialog::RegisterFunc EditorFileDialog::register_func = nullptr;
 EditorFileDialog::RegisterFunc EditorFileDialog::unregister_func = nullptr;
@@ -902,7 +902,15 @@ void EditorFileDialog::update_file_list() {
 			if (get_icon_func) {
 				Ref<Texture2D> icon = get_icon_func(cdir.path_join(files.front()->get()));
 				if (display_mode == DISPLAY_THUMBNAILS) {
-					item_list->set_item_icon(-1, file_thumbnail);
+					Ref<Texture2D> thumbnail;
+					if (get_thumbnail_func) {
+						thumbnail = get_thumbnail_func(cdir.path_join(files.front()->get()));
+					}
+					if (thumbnail.is_null()) {
+						thumbnail = file_thumbnail;
+					}
+
+					item_list->set_item_icon(-1, thumbnail);
 					item_list->set_item_tag_icon(-1, icon);
 				} else {
 					item_list->set_item_icon(-1, icon);

+ 1 - 1
editor/editor_file_dialog.h

@@ -68,7 +68,7 @@ public:
 	typedef void (*RegisterFunc)(EditorFileDialog *);
 
 	static GetIconFunc get_icon_func;
-	static GetIconFunc get_large_icon_func;
+	static GetIconFunc get_thumbnail_func;
 	static RegisterFunc register_func;
 	static RegisterFunc unregister_func;
 

File diff suppressed because it is too large
+ 0 - 0
editor/icons/GodotFile.svg


File diff suppressed because it is too large
+ 0 - 0
editor/icons/GodotMonochrome.svg


+ 2 - 0
editor/icons/editor_icons_builders.py

@@ -58,6 +58,8 @@ def make_editor_icons_action(target, source, env):
             thumb_medium_indices.append(str(index))
         if icon_name.endswith("BigThumb"):  # don't know a better way to handle this
             thumb_big_indices.append(str(index))
+        if icon_name.endswith("GodotFile"):  # don't know a better way to handle this
+            thumb_big_indices.append(str(index))
 
         s.write('\t"{0}"'.format(icon_name))
 

+ 14 - 4
editor/project_manager.cpp

@@ -2013,16 +2013,25 @@ void ProjectManager::_notification(int p_what) {
 }
 
 Ref<Texture2D> ProjectManager::_file_dialog_get_icon(const String &p_path) {
-	return singleton->icon_type_cache["ObjectHR"];
+	if (p_path.get_extension().to_lower() == "godot") {
+		return singleton->icon_type_cache["GodotMonochrome"];
+	}
+
+	return singleton->icon_type_cache["Object"];
+}
+
+Ref<Texture2D> ProjectManager::_file_dialog_get_thumbnail(const String &p_path) {
+	if (p_path.get_extension().to_lower() == "godot") {
+		return singleton->icon_type_cache["GodotFile"];
+	}
+
+	return Ref<Texture2D>();
 }
 
 void ProjectManager::_build_icon_type_cache(Ref<Theme> p_theme) {
 	List<StringName> tl;
 	p_theme->get_icon_list(SNAME("EditorIcons"), &tl);
 	for (List<StringName>::Element *E = tl.front(); E; E = E->next()) {
-		if (!ClassDB::class_exists(E->get())) {
-			continue;
-		}
 		icon_type_cache[E->get()] = p_theme->get_icon(E->get(), SNAME("EditorIcons"));
 	}
 }
@@ -2651,6 +2660,7 @@ ProjectManager::ProjectManager() {
 				break;
 		}
 		EditorFileDialog::get_icon_func = &ProjectManager::_file_dialog_get_icon;
+		EditorFileDialog::get_thumbnail_func = &ProjectManager::_file_dialog_get_thumbnail;
 	}
 
 	// TRANSLATORS: This refers to the application where users manage their Godot projects.

+ 1 - 0
editor/project_manager.h

@@ -144,6 +144,7 @@ class ProjectManager : public Control {
 	void _on_search_term_changed(const String &p_term);
 
 	static Ref<Texture2D> _file_dialog_get_icon(const String &p_path);
+	static Ref<Texture2D> _file_dialog_get_thumbnail(const String &p_path);
 
 protected:
 	void _notification(int p_what);

+ 0 - 1
scene/gui/file_dialog.cpp

@@ -35,7 +35,6 @@
 #include "scene/gui/label.h"
 
 FileDialog::GetIconFunc FileDialog::get_icon_func = nullptr;
-FileDialog::GetIconFunc FileDialog::get_large_icon_func = nullptr;
 
 FileDialog::RegisterFunc FileDialog::register_func = nullptr;
 FileDialog::RegisterFunc FileDialog::unregister_func = nullptr;

+ 0 - 1
scene/gui/file_dialog.h

@@ -60,7 +60,6 @@ public:
 	typedef void (*RegisterFunc)(FileDialog *);
 
 	static GetIconFunc get_icon_func;
-	static GetIconFunc get_large_icon_func;
 	static RegisterFunc register_func;
 	static RegisterFunc unregister_func;
 

Some files were not shown because too many files changed in this diff