1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Expose FileDialog callbacks for getting custom icons

This commit is contained in:
kobewi
2025-06-30 19:07:12 +02:00
parent d705613db3
commit f88b51995b
6 changed files with 138 additions and 13 deletions

View File

@@ -687,6 +687,10 @@ void EditorNode::_update_theme(bool p_skip_creation) {
_update_renderer_color();
}
Ref<Texture2D> thumbnail_icon = gui_base->get_theme_icon(SNAME("file_thumbnail"), SNAME("FileDialog"));
default_thumbnail.instantiate();
default_thumbnail->set_image(thumbnail_icon->get_image());
editor_dock_manager->update_tab_styles();
editor_dock_manager->update_docks_menu();
editor_dock_manager->set_tab_icon_max_width(theme->get_constant(SNAME("class_icon_size"), EditorStringName(Editor)));
@@ -5625,6 +5629,19 @@ Ref<Texture2D> EditorNode::_file_dialog_get_icon(const String &p_path) {
return singleton->icon_type_cache["Object"];
}
Ref<Texture2D> EditorNode::_file_dialog_get_thumbnail(const String &p_path) {
Ref<ImageTexture> texture = singleton->default_thumbnail->duplicate();
EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp_static(EditorNode::_file_dialog_thumbnail_callback).bind(texture));
return texture;
}
void EditorNode::_file_dialog_thumbnail_callback(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, Ref<ImageTexture> p_texture) {
ERR_FAIL_COND(p_texture.is_null());
if (p_preview.is_valid()) {
p_texture->set_image(p_preview->get_image());
}
}
void EditorNode::_build_icon_type_cache() {
List<StringName> tl;
theme->get_icon_list(EditorStringName(EditorIcons), &tl);
@@ -7817,7 +7834,8 @@ EditorNode::EditorNode() {
EditorContextMenuPluginManager::create();
// Used for previews.
FileDialog::get_icon_func = _file_dialog_get_icon;
FileDialog::set_get_icon_callback(callable_mp_static(_file_dialog_get_icon));
FileDialog::set_get_thumbnail_callback(callable_mp_static(_file_dialog_get_thumbnail));
FileDialog::register_func = _file_dialog_register;
FileDialog::unregister_func = _file_dialog_unregister;
@@ -8919,7 +8937,6 @@ EditorNode::~EditorNode() {
GDExtensionEditorPlugins::editor_node_add_plugin = nullptr;
GDExtensionEditorPlugins::editor_node_remove_plugin = nullptr;
FileDialog::get_icon_func = nullptr;
FileDialog::register_func = nullptr;
FileDialog::unregister_func = nullptr;