From eae9ef2292eaebe34da75468771e96231eefda48 Mon Sep 17 00:00:00 2001 From: kobewi Date: Tue, 1 Jul 2025 01:04:59 +0200 Subject: [PATCH] Change preview methods to take Callable --- editor/docks/filesystem_dock.cpp | 45 +++++----------- editor/docks/filesystem_dock.h | 4 +- editor/gui/editor_file_dialog.cpp | 10 ++-- editor/gui/editor_file_dialog.h | 4 +- editor/inspector/editor_resource_picker.cpp | 4 +- editor/inspector/editor_resource_preview.cpp | 51 ++++++++++--------- editor/inspector/editor_resource_preview.h | 16 +++--- .../editor_resource_tooltip_plugins.cpp | 15 ++---- .../editor_resource_tooltip_plugins.h | 2 +- .../scene/2d/tiles/tile_map_layer_editor.cpp | 12 ++--- editor/scene/2d/tiles/tile_map_layer_editor.h | 2 +- ...le_set_scenes_collection_source_editor.cpp | 13 ++--- ...tile_set_scenes_collection_source_editor.h | 2 +- editor/scene/editor_scene_tabs.cpp | 7 +-- editor/scene/editor_scene_tabs.h | 2 +- 15 files changed, 76 insertions(+), 113 deletions(-) diff --git a/editor/docks/filesystem_dock.cpp b/editor/docks/filesystem_dock.cpp index 4fb2c0552d8..3d4e1d9f57e 100644 --- a/editor/docks/filesystem_dock.cpp +++ b/editor/docks/filesystem_dock.cpp @@ -337,8 +337,7 @@ void FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory if (main_scene == file_metadata) { file_item->set_custom_color(0, get_theme_color(SNAME("accent_color"), EditorStringName(Editor))); } - Array udata = { tree_update_id, file_item }; - EditorResourcePreview::get_singleton()->queue_resource_preview(file_metadata, this, "_tree_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_resource_preview(file_metadata, callable_mp(this, &FileSystemDock::_tree_thumbnail_done).bind(tree_update_id, file_item->get_instance_id())); } } else { if (lpath.get_base_dir() == current_path.get_base_dir()) { @@ -452,8 +451,7 @@ void FileSystemDock::_update_tree(const Vector &p_uncollapsed_paths, boo ti->set_metadata(0, favorite); if (!favorite.ends_with("/")) { - Array udata = { tree_update_id, ti }; - EditorResourcePreview::get_singleton()->queue_resource_preview(favorite, this, "_tree_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_resource_preview(favorite, callable_mp(this, &FileSystemDock::_tree_thumbnail_done).bind(tree_update_id, ti->get_instance_id())); } } @@ -827,32 +825,24 @@ void FileSystemDock::navigate_to_path(const String &p_path) { _update_import_dock(); } -void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { +void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_index, const String &p_filename) { if (p_preview.is_valid()) { - Array uarr = p_udata; - int idx = uarr[0]; - String file = uarr[1]; - if (idx < files->get_item_count() && files->get_item_text(idx) == file && files->get_item_metadata(idx) == p_path) { + if (p_index < files->get_item_count() && files->get_item_text(p_index) == p_filename && files->get_item_metadata(p_index) == p_path) { if (file_list_display_mode == FILE_LIST_DISPLAY_LIST) { if (p_small_preview.is_valid()) { - files->set_item_icon(idx, p_small_preview); + files->set_item_icon(p_index, p_small_preview); } } else { - files->set_item_icon(idx, p_preview); + files->set_item_icon(p_index, p_preview); } } } } -void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { - if (p_small_preview.is_valid()) { - Array uarr = p_udata; - if (tree_update_id == (int)uarr[0]) { - TreeItem *file_item = Object::cast_to(uarr[1]); - if (file_item) { - file_item->set_icon(0, p_small_preview); - } - } +void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_update_id, ObjectID p_item) { + TreeItem *item = ObjectDB::get_instance(p_item); + if (item && tree_update_id == p_update_id && p_small_preview.is_valid()) { + item->set_icon(0, p_small_preview); } } @@ -1162,11 +1152,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { // Generate the preview. if (!finfo->import_broken) { - Array udata; - udata.resize(2); - udata[0] = item_index; - udata[1] = fname; - EditorResourcePreview::get_singleton()->queue_resource_preview(fpath, this, "_file_list_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_resource_preview(fpath, callable_mp(this, &FileSystemDock::_file_list_thumbnail_done).bind(item_index, fname)); } // Select the items. @@ -1329,11 +1315,7 @@ void FileSystemDock::_preview_invalidated(const String &p_path) { for (int i = 0; i < files->get_item_count(); i++) { if (files->get_item_metadata(i) == p_path) { // Re-request preview. - Array udata; - udata.resize(2); - udata[0] = i; - udata[1] = files->get_item_text(i); - EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, this, "_file_list_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp(this, &FileSystemDock::_file_list_thumbnail_done).bind(i, files->get_item_text(i))); break; } } @@ -4060,9 +4042,6 @@ void FileSystemDock::_set_dock_horizontal(bool p_enable) { } void FileSystemDock::_bind_methods() { - ClassDB::bind_method(D_METHOD("_file_list_thumbnail_done"), &FileSystemDock::_file_list_thumbnail_done); - ClassDB::bind_method(D_METHOD("_tree_thumbnail_done"), &FileSystemDock::_tree_thumbnail_done); - ClassDB::bind_method(D_METHOD("navigate_to_path", "path"), &FileSystemDock::navigate_to_path); ClassDB::bind_method(D_METHOD("add_resource_tooltip_plugin", "plugin"), &FileSystemDock::add_resource_tooltip_plugin); diff --git a/editor/docks/filesystem_dock.h b/editor/docks/filesystem_dock.h index 1537eb99008..1be6542bc8f 100644 --- a/editor/docks/filesystem_dock.h +++ b/editor/docks/filesystem_dock.h @@ -345,8 +345,8 @@ private: void _get_drag_target_folder(String &target, bool &target_favorites, const Point2 &p_point, Control *p_from) const; void _preview_invalidated(const String &p_path); - void _file_list_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); - void _tree_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); + void _file_list_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_index, const String &p_filename); + void _tree_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_update_id, ObjectID p_item); void _update_display_mode(bool p_force = false); diff --git a/editor/gui/editor_file_dialog.cpp b/editor/gui/editor_file_dialog.cpp index 55b50c6ad26..7bbe1a7b700 100644 --- a/editor/gui/editor_file_dialog.cpp +++ b/editor/gui/editor_file_dialog.cpp @@ -511,7 +511,7 @@ void EditorFileDialog::_post_popup() { set_process_shortcut_input(true); } -void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { +void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref &p_preview, const Ref &p_small_preview) { if (display_mode == DISPLAY_LIST || p_preview.is_null()) { return; } @@ -526,7 +526,7 @@ void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { +void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview) { set_process(false); preview_waiting = false; @@ -552,7 +552,7 @@ void EditorFileDialog::_request_single_thumbnail(const String &p_path) { set_process(true); preview_waiting = true; preview_wheel_timeout = 0; - EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, this, "_thumbnail_done", p_path); + EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp(this, &EditorFileDialog::_thumbnail_done)); } void EditorFileDialog::_action_pressed() { @@ -1173,7 +1173,7 @@ void EditorFileDialog::update_file_list() { item_list->set_item_metadata(-1, d); if (display_mode == DISPLAY_THUMBNAILS && previews_enabled) { - EditorResourcePreview::get_singleton()->queue_resource_preview(file_info.path, this, "_thumbnail_result", file_info.path); + EditorResourcePreview::get_singleton()->queue_resource_preview(file_info.path, callable_mp(this, &EditorFileDialog::_thumbnail_result)); } if (file->get_text() == file_info.name) { @@ -2172,10 +2172,8 @@ void EditorFileDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("get_access"), &EditorFileDialog::get_access); ClassDB::bind_method(D_METHOD("set_show_hidden_files", "show"), &EditorFileDialog::set_show_hidden_files); ClassDB::bind_method(D_METHOD("is_showing_hidden_files"), &EditorFileDialog::is_showing_hidden_files); - ClassDB::bind_method(D_METHOD("_thumbnail_done"), &EditorFileDialog::_thumbnail_done); ClassDB::bind_method(D_METHOD("set_display_mode", "mode"), &EditorFileDialog::set_display_mode); ClassDB::bind_method(D_METHOD("get_display_mode"), &EditorFileDialog::get_display_mode); - ClassDB::bind_method(D_METHOD("_thumbnail_result"), &EditorFileDialog::_thumbnail_result); ClassDB::bind_method(D_METHOD("set_disable_overwrite_warning", "disable"), &EditorFileDialog::set_disable_overwrite_warning); ClassDB::bind_method(D_METHOD("is_overwrite_warning_disabled"), &EditorFileDialog::is_overwrite_warning_disabled); ClassDB::bind_method(D_METHOD("add_side_menu", "menu", "title"), &EditorFileDialog::add_side_menu, DEFVAL("")); diff --git a/editor/gui/editor_file_dialog.h b/editor/gui/editor_file_dialog.h index 41f922736f6..78405db687f 100644 --- a/editor/gui/editor_file_dialog.h +++ b/editor/gui/editor_file_dialog.h @@ -272,8 +272,8 @@ private: void _save_to_recent(); // Callback function is callback(String p_path,Ref preview,Variant udata) preview null if could not load. - void _thumbnail_result(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); - void _thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); + void _thumbnail_result(const String &p_path, const Ref &p_preview, const Ref &p_small_preview); + void _thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview); void _request_single_thumbnail(const String &p_path); virtual void shortcut_input(const Ref &p_event) override; diff --git a/editor/inspector/editor_resource_picker.cpp b/editor/inspector/editor_resource_picker.cpp index ef74dd8a2ab..be702f87e0d 100644 --- a/editor/inspector/editor_resource_picker.cpp +++ b/editor/inspector/editor_resource_picker.cpp @@ -82,7 +82,7 @@ void EditorResourcePicker::_update_resource() { assign_button->set_tooltip_text(resource_path + TTR("Type:") + " " + class_name); // Preview will override the above, so called at the end. - EditorResourcePreview::get_singleton()->queue_edited_resource_preview(edited_resource, this, "_update_resource_preview", edited_resource->get_instance_id()); + EditorResourcePreview::get_singleton()->queue_edited_resource_preview(edited_resource, callable_mp(this, &EditorResourcePicker::_update_resource_preview).bind(edited_resource->get_instance_id())); } } else if (edited_resource.is_valid()) { assign_button->set_tooltip_text(resource_path + TTR("Type:") + " " + edited_resource->get_class()); @@ -886,8 +886,6 @@ void EditorResourcePicker::drop_data_fw(const Point2 &p_point, const Variant &p_ } void EditorResourcePicker::_bind_methods() { - ClassDB::bind_method(D_METHOD("_update_resource_preview"), &EditorResourcePicker::_update_resource_preview); - ClassDB::bind_method(D_METHOD("set_base_type", "base_type"), &EditorResourcePicker::set_base_type); ClassDB::bind_method(D_METHOD("get_base_type"), &EditorResourcePicker::get_base_type); ClassDB::bind_method(D_METHOD("get_allowed_types"), &EditorResourcePicker::get_allowed_types); diff --git a/editor/inspector/editor_resource_preview.cpp b/editor/inspector/editor_resource_preview.cpp index e616a532f34..cfc0cacf7a9 100644 --- a/editor/inspector/editor_resource_preview.cpp +++ b/editor/inspector/editor_resource_preview.cpp @@ -132,7 +132,7 @@ void EditorResourcePreview::_thread_func(void *ud) { erp->_thread(); } -void EditorResourcePreview::_preview_ready(const String &p_path, int p_hash, const Ref &p_texture, const Ref &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud, const Dictionary &p_metadata) { +void EditorResourcePreview::_preview_ready(const String &p_path, int p_hash, const Ref &p_texture, const Ref &p_small_texture, const Callable &p_callback, const Dictionary &p_metadata) { { MutexLock lock(preview_mutex); @@ -155,8 +155,7 @@ void EditorResourcePreview::_preview_ready(const String &p_path, int p_hash, con cache[p_path] = item; } - - Callable(id, p_func).call_deferred(p_path, p_texture, p_small_texture, p_ud); + p_callback.call_deferred(p_path, p_texture, p_small_texture); } void EditorResourcePreview::_generate_preview(Ref &r_texture, Ref &r_small_texture, const QueueItem &p_item, const String &cache_base, Dictionary &p_metadata) { @@ -285,7 +284,7 @@ void EditorResourcePreview::_iterate() { if (cache.has(item.path)) { Item cached_item = cache[item.path]; // Already has it because someone loaded it, just let it know it's ready. - _preview_ready(item.path, cached_item.last_hash, cached_item.preview, cached_item.small_preview, item.id, item.function, item.userdata, cached_item.preview_metadata); + _preview_ready(item.path, cached_item.last_hash, cached_item.preview, cached_item.small_preview, item.callback, cached_item.preview_metadata); preview_mutex.unlock(); return; } @@ -300,7 +299,7 @@ void EditorResourcePreview::_iterate() { if (item.resource.is_valid()) { Dictionary preview_metadata; _generate_preview(texture, small_texture, item, String(), preview_metadata); - _preview_ready(item.path, item.resource->hash_edited_version_for_preview(), texture, small_texture, item.id, item.function, item.userdata, preview_metadata); + _preview_ready(item.path, item.resource->hash_edited_version_for_preview(), texture, small_texture, item.callback, preview_metadata); return; } @@ -388,7 +387,7 @@ void EditorResourcePreview::_iterate() { _generate_preview(texture, small_texture, item, cache_base, preview_metadata); } } - _preview_ready(item.path, 0, texture, small_texture, item.id, item.function, item.userdata, preview_metadata); + _preview_ready(item.path, 0, texture, small_texture, item.callback, preview_metadata); } void EditorResourcePreview::_write_preview_cache(Ref p_file, int p_thumbnail_size, bool p_has_small_texture, uint64_t p_modified_time, const String &p_hash, const Dictionary &p_metadata) { @@ -457,8 +456,12 @@ EditorResourcePreview::PreviewItem EditorResourcePreview::get_resource_preview_i return item; } -void EditorResourcePreview::queue_edited_resource_preview(const Ref &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { +void EditorResourcePreview::_queue_edited_resource_preview(const Ref &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { ERR_FAIL_NULL(p_receiver); + queue_edited_resource_preview(p_res, Callable(p_receiver, p_receiver_func).bind(p_userdata)); +} + +void EditorResourcePreview::queue_edited_resource_preview(const Ref &p_res, const Callable &p_callback) { ERR_FAIL_COND(p_res.is_null()); _update_thumbnail_sizes(); @@ -466,44 +469,46 @@ void EditorResourcePreview::queue_edited_resource_preview(const Ref &p MutexLock lock(preview_mutex); String path_id = "ID:" + itos(p_res->get_instance_id()); + HashMap::Iterator I = cache.find(path_id); - if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version_for_preview()) { - p_receiver->call(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); + if (I && I->value.last_hash == p_res->hash_edited_version_for_preview()) { + p_callback.call(path_id, I->value.preview, I->value.small_preview); return; } - cache.erase(path_id); //erase if exists, since it will be regen + if (I) { + cache.remove(I); // Erase if exists, since it will be regen. + } QueueItem item; - item.function = p_receiver_func; - item.id = p_receiver->get_instance_id(); item.resource = p_res; item.path = path_id; - item.userdata = p_userdata; - + item.callback = p_callback; queue.push_back(item); } preview_sem.post(); } -void EditorResourcePreview::queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { +void EditorResourcePreview::_queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { ERR_FAIL_NULL(p_receiver); + queue_resource_preview(p_path, Callable(p_receiver, p_receiver_func).bind(p_userdata)); +} + +void EditorResourcePreview::queue_resource_preview(const String &p_path, const Callable &p_callback) { _update_thumbnail_sizes(); { MutexLock lock(preview_mutex); - if (cache.has(p_path)) { - p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); + const Item *cached_item = cache.getptr(p_path); + if (cached_item) { + p_callback.call(p_path, cached_item->preview, cached_item->small_preview); return; } QueueItem item; - item.function = p_receiver_func; - item.id = p_receiver->get_instance_id(); item.path = p_path; - item.userdata = p_userdata; - + item.callback = p_callback; queue.push_back(item); } preview_sem.post(); @@ -522,8 +527,8 @@ EditorResourcePreview *EditorResourcePreview::get_singleton() { } void EditorResourcePreview::_bind_methods() { - ClassDB::bind_method(D_METHOD("queue_resource_preview", "path", "receiver", "receiver_func", "userdata"), &EditorResourcePreview::queue_resource_preview); - ClassDB::bind_method(D_METHOD("queue_edited_resource_preview", "resource", "receiver", "receiver_func", "userdata"), &EditorResourcePreview::queue_edited_resource_preview); + ClassDB::bind_method(D_METHOD("queue_resource_preview", "path", "receiver", "receiver_func", "userdata"), &EditorResourcePreview::_queue_resource_preview); + ClassDB::bind_method(D_METHOD("queue_edited_resource_preview", "resource", "receiver", "receiver_func", "userdata"), &EditorResourcePreview::_queue_edited_resource_preview); ClassDB::bind_method(D_METHOD("add_preview_generator", "generator"), &EditorResourcePreview::add_preview_generator); ClassDB::bind_method(D_METHOD("remove_preview_generator", "generator"), &EditorResourcePreview::remove_preview_generator); ClassDB::bind_method(D_METHOD("check_for_invalidation", "path"), &EditorResourcePreview::check_for_invalidation); diff --git a/editor/inspector/editor_resource_preview.h b/editor/inspector/editor_resource_preview.h index 899986bdb97..654f094de2b 100644 --- a/editor/inspector/editor_resource_preview.h +++ b/editor/inspector/editor_resource_preview.h @@ -79,9 +79,7 @@ class EditorResourcePreview : public Node { struct QueueItem { Ref resource; String path; - ObjectID id; - StringName function; - Variant userdata; + Callable callback; }; List queue; @@ -102,7 +100,7 @@ class EditorResourcePreview : public Node { HashMap cache; - void _preview_ready(const String &p_path, int p_hash, const Ref &p_texture, const Ref &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud, const Dictionary &p_metadata); + void _preview_ready(const String &p_path, int p_hash, const Ref &p_texture, const Ref &p_small_texture, const Callable &p_callback, const Dictionary &p_metadata); void _generate_preview(Ref &r_texture, Ref &r_small_texture, const QueueItem &p_item, const String &cache_base, Dictionary &p_metadata); int small_thumbnail_size = -1; @@ -119,6 +117,10 @@ class EditorResourcePreview : public Node { void _update_thumbnail_sizes(); + // TODO: These should be deprecated and the new methods exposed instead. + void _queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); + void _queue_edited_resource_preview(const Ref &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); + protected: void _notification(int p_what); static void _bind_methods(); @@ -131,10 +133,8 @@ public: Ref small_preview; }; - // p_receiver_func callback has signature (String p_path, Ref p_preview, Ref p_preview_small, Variant p_userdata) - // p_preview will be null if there was an error - void queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); - void queue_edited_resource_preview(const Ref &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); + void queue_resource_preview(const String &p_path, const Callable &p_callback); + void queue_edited_resource_preview(const Ref &p_res, const Callable &p_callback); const Dictionary get_preview_metadata(const String &p_path) const; PreviewItem get_resource_preview_if_available(const String &p_path); diff --git a/editor/inspector/editor_resource_tooltip_plugins.cpp b/editor/inspector/editor_resource_tooltip_plugins.cpp index 875193f9d71..8ef694f5fb1 100644 --- a/editor/inspector/editor_resource_tooltip_plugins.cpp +++ b/editor/inspector/editor_resource_tooltip_plugins.cpp @@ -39,19 +39,14 @@ #include "scene/gui/label.h" #include "scene/gui/texture_rect.h" -void EditorResourceTooltipPlugin::_thumbnail_ready(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { - ObjectID trid = p_udata; - TextureRect *tr = ObjectDB::get_instance(trid); - - if (!tr) { - return; +void EditorResourceTooltipPlugin::_thumbnail_ready(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, ObjectID p_trect_id) { + TextureRect *tr = ObjectDB::get_instance(p_trect_id); + if (tr) { + tr->set_texture(p_preview); } - - tr->set_texture(p_preview); } void EditorResourceTooltipPlugin::_bind_methods() { - ClassDB::bind_method(D_METHOD("_thumbnail_ready"), &EditorResourceTooltipPlugin::_thumbnail_ready); ClassDB::bind_method(D_METHOD("request_thumbnail", "path", "control"), &EditorResourceTooltipPlugin::request_thumbnail); GDVIRTUAL_BIND(_handles, "type"); @@ -95,7 +90,7 @@ VBoxContainer *EditorResourceTooltipPlugin::make_default_tooltip(const String &p void EditorResourceTooltipPlugin::request_thumbnail(const String &p_path, TextureRect *p_for_control) const { ERR_FAIL_NULL(p_for_control); - EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, const_cast(this), "_thumbnail_ready", p_for_control->get_instance_id()); + EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp(const_cast(this), &EditorResourceTooltipPlugin::_thumbnail_ready).bind(p_for_control->get_instance_id())); } bool EditorResourceTooltipPlugin::handles(const String &p_resource_type) const { diff --git a/editor/inspector/editor_resource_tooltip_plugins.h b/editor/inspector/editor_resource_tooltip_plugins.h index b679ebd0bba..5e6ddc3e6c2 100644 --- a/editor/inspector/editor_resource_tooltip_plugins.h +++ b/editor/inspector/editor_resource_tooltip_plugins.h @@ -41,7 +41,7 @@ class VBoxContainer; class EditorResourceTooltipPlugin : public RefCounted { GDCLASS(EditorResourceTooltipPlugin, RefCounted); - void _thumbnail_ready(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); + void _thumbnail_ready(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, ObjectID p_trect_id); protected: static void _bind_methods(); diff --git a/editor/scene/2d/tiles/tile_map_layer_editor.cpp b/editor/scene/2d/tiles/tile_map_layer_editor.cpp index 37467f0a1ba..e8fd7481a34 100644 --- a/editor/scene/2d/tiles/tile_map_layer_editor.cpp +++ b/editor/scene/2d/tiles/tile_map_layer_editor.cpp @@ -441,8 +441,7 @@ void TileMapLayerEditorTilesPlugin::_update_scenes_collection_view() { int item_index = 0; if (scene.is_valid()) { item_index = scene_tiles_list->add_item(vformat("%s (Path: %s, ID: %d)", scene->get_path().get_file().get_basename(), scene->get_path(), scene_id)); - Variant udata = i; - EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, this, "_scene_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, callable_mp(this, &TileMapLayerEditorTilesPlugin::_scene_thumbnail_done).bind(i)); } else { item_index = scene_tiles_list->add_item(TTR("Tile with Invalid Scene"), tiles_bottom_panel->get_editor_theme_icon(SNAME("PackedScene"))); } @@ -463,11 +462,9 @@ void TileMapLayerEditorTilesPlugin::_update_scenes_collection_view() { scene_tiles_list->set_fixed_icon_size(Vector2(int_size, int_size)); } -void TileMapLayerEditorTilesPlugin::_scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_ud) { - int index = p_ud; - - if (index >= 0 && index < scene_tiles_list->get_item_count()) { - scene_tiles_list->set_item_icon(index, p_preview); +void TileMapLayerEditorTilesPlugin::_scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_index) { + if (p_index >= 0 && p_index < scene_tiles_list->get_item_count()) { + scene_tiles_list->set_item_icon(p_index, p_preview); } } @@ -2112,7 +2109,6 @@ void TileMapLayerEditorTilesPlugin::_set_source_sort(int p_sort) { } void TileMapLayerEditorTilesPlugin::_bind_methods() { - ClassDB::bind_method(D_METHOD("_scene_thumbnail_done"), &TileMapLayerEditorTilesPlugin::_scene_thumbnail_done); ClassDB::bind_method(D_METHOD("_set_tile_map_selection", "selection"), &TileMapLayerEditorTilesPlugin::_set_tile_map_selection); ClassDB::bind_method(D_METHOD("_get_tile_map_selection"), &TileMapLayerEditorTilesPlugin::_get_tile_map_selection); } diff --git a/editor/scene/2d/tiles/tile_map_layer_editor.h b/editor/scene/2d/tiles/tile_map_layer_editor.h index 54d8d92568c..be15312df56 100644 --- a/editor/scene/2d/tiles/tile_map_layer_editor.h +++ b/editor/scene/2d/tiles/tile_map_layer_editor.h @@ -211,7 +211,7 @@ private: ItemList *scene_tiles_list = nullptr; void _update_scenes_collection_view(); - void _scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_ud); + void _scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_index); void _scenes_list_multi_selected(int p_index, bool p_selected); void _scenes_list_lmb_empty_clicked(const Vector2 &p_pos, MouseButton p_mouse_button_index); diff --git a/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.cpp b/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.cpp index 83255456c99..0ae5b8267c9 100644 --- a/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.cpp +++ b/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.cpp @@ -222,11 +222,9 @@ void TileSetScenesCollectionSourceEditor::_tile_set_scenes_collection_source_cha tile_set_scenes_collection_source_changed_needs_update = true; } -void TileSetScenesCollectionSourceEditor::_scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_ud) { - int index = p_ud; - - if (index >= 0 && index < scene_tiles_list->get_item_count()) { - scene_tiles_list->set_item_icon(index, p_preview); +void TileSetScenesCollectionSourceEditor::_scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_idx) { + if (p_idx >= 0 && p_idx < scene_tiles_list->get_item_count()) { + scene_tiles_list->set_item_icon(p_idx, p_preview); } } @@ -327,8 +325,7 @@ void TileSetScenesCollectionSourceEditor::_update_scenes_list() { int item_index = 0; if (scene.is_valid()) { item_index = scene_tiles_list->add_item(vformat("%s (path:%s id:%d)", scene->get_path().get_file().get_basename(), scene->get_path(), scene_id)); - Variant udata = i; - EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, this, "_scene_thumbnail_done", udata); + EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, callable_mp(this, &TileSetScenesCollectionSourceEditor::_scene_thumbnail_done).bind(i)); } else { item_index = scene_tiles_list->add_item(TTR("Tile with Invalid Scene"), get_editor_theme_icon(SNAME("PackedScene"))); } @@ -503,8 +500,6 @@ bool TileSetScenesCollectionSourceEditor::_can_drop_data_fw(const Point2 &p_poin void TileSetScenesCollectionSourceEditor::_bind_methods() { ADD_SIGNAL(MethodInfo("source_id_changed", PropertyInfo(Variant::INT, "source_id"))); - - ClassDB::bind_method(D_METHOD("_scene_thumbnail_done"), &TileSetScenesCollectionSourceEditor::_scene_thumbnail_done); } TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() { diff --git a/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.h b/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.h index 11271873cd1..6d3981258c3 100644 --- a/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.h +++ b/editor/scene/2d/tiles/tile_set_scenes_collection_source_editor.h @@ -118,7 +118,7 @@ private: void _tile_set_scenes_collection_source_changed(); void _scenes_collection_source_proxy_object_changed(const String &p_what); - void _scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_ud); + void _scene_thumbnail_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_idx); void _scenes_list_item_activated(int p_index); void _source_add_pressed(); diff --git a/editor/scene/editor_scene_tabs.cpp b/editor/scene/editor_scene_tabs.cpp index f2088e970ab..76dc181bd55 100644 --- a/editor/scene/editor_scene_tabs.cpp +++ b/editor/scene/editor_scene_tabs.cpp @@ -111,7 +111,7 @@ void EditorSceneTabs::_scene_tab_hovered(int p_tab) { } else { String path = EditorNode::get_editor_data().get_scene_path(p_tab); if (!path.is_empty()) { - EditorResourcePreview::get_singleton()->queue_resource_preview(path, this, "_tab_preview_done", p_tab); + EditorResourcePreview::get_singleton()->queue_resource_preview(path, callable_mp(this, &EditorSceneTabs::_tab_preview_done).bind(p_tab)); } } } @@ -338,8 +338,7 @@ void EditorSceneTabs::_scene_tabs_resized() { } } -void EditorSceneTabs::_tab_preview_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata) { - int p_tab = p_udata; +void EditorSceneTabs::_tab_preview_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_tab) { if (p_preview.is_valid()) { tab_preview->set_texture(p_preview); @@ -396,8 +395,6 @@ int EditorSceneTabs::get_current_tab() const { void EditorSceneTabs::_bind_methods() { ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab_index"))); ADD_SIGNAL(MethodInfo("tab_closed", PropertyInfo(Variant::INT, "tab_index"))); - - ClassDB::bind_method("_tab_preview_done", &EditorSceneTabs::_tab_preview_done); } EditorSceneTabs::EditorSceneTabs() { diff --git a/editor/scene/editor_scene_tabs.h b/editor/scene/editor_scene_tabs.h index 75c29606d00..ab885480b85 100644 --- a/editor/scene/editor_scene_tabs.h +++ b/editor/scene/editor_scene_tabs.h @@ -80,7 +80,7 @@ private: void _update_context_menu(); void _custom_menu_option(int p_option); - void _tab_preview_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, const Variant &p_udata); + void _tab_preview_done(const String &p_path, const Ref &p_preview, const Ref &p_small_preview, int p_tab); void _global_menu_scene(const Variant &p_tag); void _global_menu_new_window(const Variant &p_tag);