mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 07:53:26 +00:00
Merge pull request #108162 from KoBeWi/preview_simplication
Change preview methods to take Callable
This commit is contained in:
commit
44c847c1a5
15 changed files with 76 additions and 113 deletions
|
@ -337,8 +337,7 @@ void FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory
|
||||||
if (main_scene == file_metadata) {
|
if (main_scene == file_metadata) {
|
||||||
file_item->set_custom_color(0, get_theme_color(SNAME("accent_color"), EditorStringName(Editor)));
|
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, callable_mp(this, &FileSystemDock::_tree_thumbnail_done).bind(tree_update_id, file_item->get_instance_id()));
|
||||||
EditorResourcePreview::get_singleton()->queue_resource_preview(file_metadata, this, "_tree_thumbnail_done", udata);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (lpath.get_base_dir() == current_path.get_base_dir()) {
|
if (lpath.get_base_dir() == current_path.get_base_dir()) {
|
||||||
|
@ -452,8 +451,7 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo
|
||||||
ti->set_metadata(0, favorite);
|
ti->set_metadata(0, favorite);
|
||||||
|
|
||||||
if (!favorite.ends_with("/")) {
|
if (!favorite.ends_with("/")) {
|
||||||
Array udata = { tree_update_id, ti };
|
EditorResourcePreview::get_singleton()->queue_resource_preview(favorite, callable_mp(this, &FileSystemDock::_tree_thumbnail_done).bind(tree_update_id, ti->get_instance_id()));
|
||||||
EditorResourcePreview::get_singleton()->queue_resource_preview(favorite, this, "_tree_thumbnail_done", udata);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,32 +825,24 @@ void FileSystemDock::navigate_to_path(const String &p_path) {
|
||||||
_update_import_dock();
|
_update_import_dock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index, const String &p_filename) {
|
||||||
if (p_preview.is_valid()) {
|
if (p_preview.is_valid()) {
|
||||||
Array uarr = p_udata;
|
if (p_index < files->get_item_count() && files->get_item_text(p_index) == p_filename && files->get_item_metadata(p_index) == p_path) {
|
||||||
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 (file_list_display_mode == FILE_LIST_DISPLAY_LIST) {
|
if (file_list_display_mode == FILE_LIST_DISPLAY_LIST) {
|
||||||
if (p_small_preview.is_valid()) {
|
if (p_small_preview.is_valid()) {
|
||||||
files->set_item_icon(idx, p_small_preview);
|
files->set_item_icon(p_index, p_small_preview);
|
||||||
}
|
}
|
||||||
} else {
|
} 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<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_update_id, ObjectID p_item) {
|
||||||
if (p_small_preview.is_valid()) {
|
TreeItem *item = ObjectDB::get_instance<TreeItem>(p_item);
|
||||||
Array uarr = p_udata;
|
if (item && tree_update_id == p_update_id && p_small_preview.is_valid()) {
|
||||||
if (tree_update_id == (int)uarr[0]) {
|
item->set_icon(0, p_small_preview);
|
||||||
TreeItem *file_item = Object::cast_to<TreeItem>(uarr[1]);
|
|
||||||
if (file_item) {
|
|
||||||
file_item->set_icon(0, p_small_preview);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1162,11 +1152,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) {
|
||||||
|
|
||||||
// Generate the preview.
|
// Generate the preview.
|
||||||
if (!finfo->import_broken) {
|
if (!finfo->import_broken) {
|
||||||
Array udata;
|
EditorResourcePreview::get_singleton()->queue_resource_preview(fpath, callable_mp(this, &FileSystemDock::_file_list_thumbnail_done).bind(item_index, fname));
|
||||||
udata.resize(2);
|
|
||||||
udata[0] = item_index;
|
|
||||||
udata[1] = fname;
|
|
||||||
EditorResourcePreview::get_singleton()->queue_resource_preview(fpath, this, "_file_list_thumbnail_done", udata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select the items.
|
// 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++) {
|
for (int i = 0; i < files->get_item_count(); i++) {
|
||||||
if (files->get_item_metadata(i) == p_path) {
|
if (files->get_item_metadata(i) == p_path) {
|
||||||
// Re-request preview.
|
// Re-request preview.
|
||||||
Array udata;
|
EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp(this, &FileSystemDock::_file_list_thumbnail_done).bind(i, files->get_item_text(i)));
|
||||||
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);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4060,9 +4042,6 @@ void FileSystemDock::_set_dock_horizontal(bool p_enable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileSystemDock::_bind_methods() {
|
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("navigate_to_path", "path"), &FileSystemDock::navigate_to_path);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("add_resource_tooltip_plugin", "plugin"), &FileSystemDock::add_resource_tooltip_plugin);
|
ClassDB::bind_method(D_METHOD("add_resource_tooltip_plugin", "plugin"), &FileSystemDock::add_resource_tooltip_plugin);
|
||||||
|
|
|
@ -345,8 +345,8 @@ private:
|
||||||
void _get_drag_target_folder(String &target, bool &target_favorites, const Point2 &p_point, Control *p_from) const;
|
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 _preview_invalidated(const String &p_path);
|
||||||
void _file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index, const String &p_filename);
|
||||||
void _tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_update_id, ObjectID p_item);
|
||||||
|
|
||||||
void _update_display_mode(bool p_force = false);
|
void _update_display_mode(bool p_force = false);
|
||||||
|
|
||||||
|
|
|
@ -511,7 +511,7 @@ void EditorFileDialog::_post_popup() {
|
||||||
set_process_shortcut_input(true);
|
set_process_shortcut_input(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview) {
|
||||||
if (display_mode == DISPLAY_LIST || p_preview.is_null()) {
|
if (display_mode == DISPLAY_LIST || p_preview.is_null()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -526,7 +526,7 @@ void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview) {
|
||||||
set_process(false);
|
set_process(false);
|
||||||
preview_waiting = false;
|
preview_waiting = false;
|
||||||
|
|
||||||
|
@ -552,7 +552,7 @@ void EditorFileDialog::_request_single_thumbnail(const String &p_path) {
|
||||||
set_process(true);
|
set_process(true);
|
||||||
preview_waiting = true;
|
preview_waiting = true;
|
||||||
preview_wheel_timeout = 0;
|
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() {
|
void EditorFileDialog::_action_pressed() {
|
||||||
|
@ -1173,7 +1173,7 @@ void EditorFileDialog::update_file_list() {
|
||||||
item_list->set_item_metadata(-1, d);
|
item_list->set_item_metadata(-1, d);
|
||||||
|
|
||||||
if (display_mode == DISPLAY_THUMBNAILS && previews_enabled) {
|
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) {
|
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("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("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("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("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("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("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("is_overwrite_warning_disabled"), &EditorFileDialog::is_overwrite_warning_disabled);
|
||||||
ClassDB::bind_method(D_METHOD("add_side_menu", "menu", "title"), &EditorFileDialog::add_side_menu, DEFVAL(""));
|
ClassDB::bind_method(D_METHOD("add_side_menu", "menu", "title"), &EditorFileDialog::add_side_menu, DEFVAL(""));
|
||||||
|
|
|
@ -272,8 +272,8 @@ private:
|
||||||
void _save_to_recent();
|
void _save_to_recent();
|
||||||
// Callback function is callback(String p_path,Ref<Texture2D> preview,Variant udata) preview null if could not load.
|
// Callback function is callback(String p_path,Ref<Texture2D> preview,Variant udata) preview null if could not load.
|
||||||
|
|
||||||
void _thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview);
|
||||||
void _thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview);
|
||||||
void _request_single_thumbnail(const String &p_path);
|
void _request_single_thumbnail(const String &p_path);
|
||||||
|
|
||||||
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
|
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
|
||||||
|
|
|
@ -82,7 +82,7 @@ void EditorResourcePicker::_update_resource() {
|
||||||
assign_button->set_tooltip_text(resource_path + TTR("Type:") + " " + class_name);
|
assign_button->set_tooltip_text(resource_path + TTR("Type:") + " " + class_name);
|
||||||
|
|
||||||
// Preview will override the above, so called at the end.
|
// 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()) {
|
} else if (edited_resource.is_valid()) {
|
||||||
assign_button->set_tooltip_text(resource_path + TTR("Type:") + " " + edited_resource->get_class());
|
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() {
|
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("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_base_type"), &EditorResourcePicker::get_base_type);
|
||||||
ClassDB::bind_method(D_METHOD("get_allowed_types"), &EditorResourcePicker::get_allowed_types);
|
ClassDB::bind_method(D_METHOD("get_allowed_types"), &EditorResourcePicker::get_allowed_types);
|
||||||
|
|
|
@ -132,7 +132,7 @@ void EditorResourcePreview::_thread_func(void *ud) {
|
||||||
erp->_thread();
|
erp->_thread();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorResourcePreview::_preview_ready(const String &p_path, int p_hash, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &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<Texture2D> &p_texture, const Ref<Texture2D> &p_small_texture, const Callable &p_callback, const Dictionary &p_metadata) {
|
||||||
{
|
{
|
||||||
MutexLock lock(preview_mutex);
|
MutexLock lock(preview_mutex);
|
||||||
|
|
||||||
|
@ -155,8 +155,7 @@ void EditorResourcePreview::_preview_ready(const String &p_path, int p_hash, con
|
||||||
|
|
||||||
cache[p_path] = item;
|
cache[p_path] = item;
|
||||||
}
|
}
|
||||||
|
p_callback.call_deferred(p_path, p_texture, p_small_texture);
|
||||||
Callable(id, p_func).call_deferred(p_path, p_texture, p_small_texture, p_ud);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<ImageTexture> &r_small_texture, const QueueItem &p_item, const String &cache_base, Dictionary &p_metadata) {
|
void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<ImageTexture> &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)) {
|
if (cache.has(item.path)) {
|
||||||
Item cached_item = cache[item.path];
|
Item cached_item = cache[item.path];
|
||||||
// Already has it because someone loaded it, just let it know it's ready.
|
// 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();
|
preview_mutex.unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -300,7 +299,7 @@ void EditorResourcePreview::_iterate() {
|
||||||
if (item.resource.is_valid()) {
|
if (item.resource.is_valid()) {
|
||||||
Dictionary preview_metadata;
|
Dictionary preview_metadata;
|
||||||
_generate_preview(texture, small_texture, item, String(), 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +387,7 @@ void EditorResourcePreview::_iterate() {
|
||||||
_generate_preview(texture, small_texture, item, cache_base, preview_metadata);
|
_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<FileAccess> p_file, int p_thumbnail_size, bool p_has_small_texture, uint64_t p_modified_time, const String &p_hash, const Dictionary &p_metadata) {
|
void EditorResourcePreview::_write_preview_cache(Ref<FileAccess> 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;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) {
|
void EditorResourcePreview::_queue_edited_resource_preview(const Ref<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) {
|
||||||
ERR_FAIL_NULL(p_receiver);
|
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<Resource> &p_res, const Callable &p_callback) {
|
||||||
ERR_FAIL_COND(p_res.is_null());
|
ERR_FAIL_COND(p_res.is_null());
|
||||||
_update_thumbnail_sizes();
|
_update_thumbnail_sizes();
|
||||||
|
|
||||||
|
@ -466,44 +469,46 @@ void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p
|
||||||
MutexLock lock(preview_mutex);
|
MutexLock lock(preview_mutex);
|
||||||
|
|
||||||
String path_id = "ID:" + itos(p_res->get_instance_id());
|
String path_id = "ID:" + itos(p_res->get_instance_id());
|
||||||
|
HashMap<String, EditorResourcePreview::Item>::Iterator I = cache.find(path_id);
|
||||||
|
|
||||||
if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version_for_preview()) {
|
if (I && I->value.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);
|
p_callback.call(path_id, I->value.preview, I->value.small_preview);
|
||||||
return;
|
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;
|
QueueItem item;
|
||||||
item.function = p_receiver_func;
|
|
||||||
item.id = p_receiver->get_instance_id();
|
|
||||||
item.resource = p_res;
|
item.resource = p_res;
|
||||||
item.path = path_id;
|
item.path = path_id;
|
||||||
item.userdata = p_userdata;
|
item.callback = p_callback;
|
||||||
|
|
||||||
queue.push_back(item);
|
queue.push_back(item);
|
||||||
}
|
}
|
||||||
preview_sem.post();
|
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);
|
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();
|
_update_thumbnail_sizes();
|
||||||
|
|
||||||
{
|
{
|
||||||
MutexLock lock(preview_mutex);
|
MutexLock lock(preview_mutex);
|
||||||
|
|
||||||
if (cache.has(p_path)) {
|
const Item *cached_item = cache.getptr(p_path);
|
||||||
p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata);
|
if (cached_item) {
|
||||||
|
p_callback.call(p_path, cached_item->preview, cached_item->small_preview);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueItem item;
|
QueueItem item;
|
||||||
item.function = p_receiver_func;
|
|
||||||
item.id = p_receiver->get_instance_id();
|
|
||||||
item.path = p_path;
|
item.path = p_path;
|
||||||
item.userdata = p_userdata;
|
item.callback = p_callback;
|
||||||
|
|
||||||
queue.push_back(item);
|
queue.push_back(item);
|
||||||
}
|
}
|
||||||
preview_sem.post();
|
preview_sem.post();
|
||||||
|
@ -522,8 +527,8 @@ EditorResourcePreview *EditorResourcePreview::get_singleton() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorResourcePreview::_bind_methods() {
|
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_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_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("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("remove_preview_generator", "generator"), &EditorResourcePreview::remove_preview_generator);
|
||||||
ClassDB::bind_method(D_METHOD("check_for_invalidation", "path"), &EditorResourcePreview::check_for_invalidation);
|
ClassDB::bind_method(D_METHOD("check_for_invalidation", "path"), &EditorResourcePreview::check_for_invalidation);
|
||||||
|
|
|
@ -79,9 +79,7 @@ class EditorResourcePreview : public Node {
|
||||||
struct QueueItem {
|
struct QueueItem {
|
||||||
Ref<Resource> resource;
|
Ref<Resource> resource;
|
||||||
String path;
|
String path;
|
||||||
ObjectID id;
|
Callable callback;
|
||||||
StringName function;
|
|
||||||
Variant userdata;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
List<QueueItem> queue;
|
List<QueueItem> queue;
|
||||||
|
@ -102,7 +100,7 @@ class EditorResourcePreview : public Node {
|
||||||
|
|
||||||
HashMap<String, Item> cache;
|
HashMap<String, Item> cache;
|
||||||
|
|
||||||
void _preview_ready(const String &p_path, int p_hash, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &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<Texture2D> &p_texture, const Ref<Texture2D> &p_small_texture, const Callable &p_callback, const Dictionary &p_metadata);
|
||||||
void _generate_preview(Ref<ImageTexture> &r_texture, Ref<ImageTexture> &r_small_texture, const QueueItem &p_item, const String &cache_base, Dictionary &p_metadata);
|
void _generate_preview(Ref<ImageTexture> &r_texture, Ref<ImageTexture> &r_small_texture, const QueueItem &p_item, const String &cache_base, Dictionary &p_metadata);
|
||||||
|
|
||||||
int small_thumbnail_size = -1;
|
int small_thumbnail_size = -1;
|
||||||
|
@ -119,6 +117,10 @@ class EditorResourcePreview : public Node {
|
||||||
|
|
||||||
void _update_thumbnail_sizes();
|
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<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
@ -131,10 +133,8 @@ public:
|
||||||
Ref<Texture2D> small_preview;
|
Ref<Texture2D> small_preview;
|
||||||
};
|
};
|
||||||
|
|
||||||
// p_receiver_func callback has signature (String p_path, Ref<Texture2D> p_preview, Ref<Texture2D> p_preview_small, Variant p_userdata)
|
void queue_resource_preview(const String &p_path, const Callable &p_callback);
|
||||||
// p_preview will be null if there was an error
|
void queue_edited_resource_preview(const Ref<Resource> &p_res, const Callable &p_callback);
|
||||||
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<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata);
|
|
||||||
const Dictionary get_preview_metadata(const String &p_path) const;
|
const Dictionary get_preview_metadata(const String &p_path) const;
|
||||||
|
|
||||||
PreviewItem get_resource_preview_if_available(const String &p_path);
|
PreviewItem get_resource_preview_if_available(const String &p_path);
|
||||||
|
|
|
@ -39,19 +39,14 @@
|
||||||
#include "scene/gui/label.h"
|
#include "scene/gui/label.h"
|
||||||
#include "scene/gui/texture_rect.h"
|
#include "scene/gui/texture_rect.h"
|
||||||
|
|
||||||
void EditorResourceTooltipPlugin::_thumbnail_ready(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void EditorResourceTooltipPlugin::_thumbnail_ready(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_trect_id) {
|
||||||
ObjectID trid = p_udata;
|
TextureRect *tr = ObjectDB::get_instance<TextureRect>(p_trect_id);
|
||||||
TextureRect *tr = ObjectDB::get_instance<TextureRect>(trid);
|
if (tr) {
|
||||||
|
tr->set_texture(p_preview);
|
||||||
if (!tr) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tr->set_texture(p_preview);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorResourceTooltipPlugin::_bind_methods() {
|
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);
|
ClassDB::bind_method(D_METHOD("request_thumbnail", "path", "control"), &EditorResourceTooltipPlugin::request_thumbnail);
|
||||||
|
|
||||||
GDVIRTUAL_BIND(_handles, "type");
|
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 {
|
void EditorResourceTooltipPlugin::request_thumbnail(const String &p_path, TextureRect *p_for_control) const {
|
||||||
ERR_FAIL_NULL(p_for_control);
|
ERR_FAIL_NULL(p_for_control);
|
||||||
EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, const_cast<EditorResourceTooltipPlugin *>(this), "_thumbnail_ready", p_for_control->get_instance_id());
|
EditorResourcePreview::get_singleton()->queue_resource_preview(p_path, callable_mp(const_cast<EditorResourceTooltipPlugin *>(this), &EditorResourceTooltipPlugin::_thumbnail_ready).bind(p_for_control->get_instance_id()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EditorResourceTooltipPlugin::handles(const String &p_resource_type) const {
|
bool EditorResourceTooltipPlugin::handles(const String &p_resource_type) const {
|
||||||
|
|
|
@ -41,7 +41,7 @@ class VBoxContainer;
|
||||||
class EditorResourceTooltipPlugin : public RefCounted {
|
class EditorResourceTooltipPlugin : public RefCounted {
|
||||||
GDCLASS(EditorResourceTooltipPlugin, RefCounted);
|
GDCLASS(EditorResourceTooltipPlugin, RefCounted);
|
||||||
|
|
||||||
void _thumbnail_ready(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _thumbnail_ready(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_trect_id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
|
@ -441,8 +441,7 @@ void TileMapLayerEditorTilesPlugin::_update_scenes_collection_view() {
|
||||||
int item_index = 0;
|
int item_index = 0;
|
||||||
if (scene.is_valid()) {
|
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));
|
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, callable_mp(this, &TileMapLayerEditorTilesPlugin::_scene_thumbnail_done).bind(i));
|
||||||
EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, this, "_scene_thumbnail_done", udata);
|
|
||||||
} else {
|
} else {
|
||||||
item_index = scene_tiles_list->add_item(TTR("Tile with Invalid Scene"), tiles_bottom_panel->get_editor_theme_icon(SNAME("PackedScene")));
|
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));
|
scene_tiles_list->set_fixed_icon_size(Vector2(int_size, int_size));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileMapLayerEditorTilesPlugin::_scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_ud) {
|
void TileMapLayerEditorTilesPlugin::_scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index) {
|
||||||
int index = p_ud;
|
if (p_index >= 0 && p_index < scene_tiles_list->get_item_count()) {
|
||||||
|
scene_tiles_list->set_item_icon(p_index, p_preview);
|
||||||
if (index >= 0 && index < scene_tiles_list->get_item_count()) {
|
|
||||||
scene_tiles_list->set_item_icon(index, p_preview);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2112,7 +2109,6 @@ void TileMapLayerEditorTilesPlugin::_set_source_sort(int p_sort) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileMapLayerEditorTilesPlugin::_bind_methods() {
|
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("_set_tile_map_selection", "selection"), &TileMapLayerEditorTilesPlugin::_set_tile_map_selection);
|
||||||
ClassDB::bind_method(D_METHOD("_get_tile_map_selection"), &TileMapLayerEditorTilesPlugin::_get_tile_map_selection);
|
ClassDB::bind_method(D_METHOD("_get_tile_map_selection"), &TileMapLayerEditorTilesPlugin::_get_tile_map_selection);
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,7 +211,7 @@ private:
|
||||||
ItemList *scene_tiles_list = nullptr;
|
ItemList *scene_tiles_list = nullptr;
|
||||||
|
|
||||||
void _update_scenes_collection_view();
|
void _update_scenes_collection_view();
|
||||||
void _scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_ud);
|
void _scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_index);
|
||||||
void _scenes_list_multi_selected(int p_index, bool p_selected);
|
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);
|
void _scenes_list_lmb_empty_clicked(const Vector2 &p_pos, MouseButton p_mouse_button_index);
|
||||||
|
|
||||||
|
|
|
@ -222,11 +222,9 @@ void TileSetScenesCollectionSourceEditor::_tile_set_scenes_collection_source_cha
|
||||||
tile_set_scenes_collection_source_changed_needs_update = true;
|
tile_set_scenes_collection_source_changed_needs_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileSetScenesCollectionSourceEditor::_scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_ud) {
|
void TileSetScenesCollectionSourceEditor::_scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_idx) {
|
||||||
int index = p_ud;
|
if (p_idx >= 0 && p_idx < scene_tiles_list->get_item_count()) {
|
||||||
|
scene_tiles_list->set_item_icon(p_idx, p_preview);
|
||||||
if (index >= 0 && index < scene_tiles_list->get_item_count()) {
|
|
||||||
scene_tiles_list->set_item_icon(index, p_preview);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,8 +325,7 @@ void TileSetScenesCollectionSourceEditor::_update_scenes_list() {
|
||||||
int item_index = 0;
|
int item_index = 0;
|
||||||
if (scene.is_valid()) {
|
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));
|
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, callable_mp(this, &TileSetScenesCollectionSourceEditor::_scene_thumbnail_done).bind(i));
|
||||||
EditorResourcePreview::get_singleton()->queue_edited_resource_preview(scene, this, "_scene_thumbnail_done", udata);
|
|
||||||
} else {
|
} else {
|
||||||
item_index = scene_tiles_list->add_item(TTR("Tile with Invalid Scene"), get_editor_theme_icon(SNAME("PackedScene")));
|
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() {
|
void TileSetScenesCollectionSourceEditor::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo("source_id_changed", PropertyInfo(Variant::INT, "source_id")));
|
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() {
|
TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() {
|
||||||
|
|
|
@ -118,7 +118,7 @@ private:
|
||||||
|
|
||||||
void _tile_set_scenes_collection_source_changed();
|
void _tile_set_scenes_collection_source_changed();
|
||||||
void _scenes_collection_source_proxy_object_changed(const String &p_what);
|
void _scenes_collection_source_proxy_object_changed(const String &p_what);
|
||||||
void _scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_ud);
|
void _scene_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_idx);
|
||||||
void _scenes_list_item_activated(int p_index);
|
void _scenes_list_item_activated(int p_index);
|
||||||
|
|
||||||
void _source_add_pressed();
|
void _source_add_pressed();
|
||||||
|
|
|
@ -111,7 +111,7 @@ void EditorSceneTabs::_scene_tab_hovered(int p_tab) {
|
||||||
} else {
|
} else {
|
||||||
String path = EditorNode::get_editor_data().get_scene_path(p_tab);
|
String path = EditorNode::get_editor_data().get_scene_path(p_tab);
|
||||||
if (!path.is_empty()) {
|
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<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) {
|
void EditorSceneTabs::_tab_preview_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_tab) {
|
||||||
int p_tab = p_udata;
|
|
||||||
if (p_preview.is_valid()) {
|
if (p_preview.is_valid()) {
|
||||||
tab_preview->set_texture(p_preview);
|
tab_preview->set_texture(p_preview);
|
||||||
|
|
||||||
|
@ -396,8 +395,6 @@ int EditorSceneTabs::get_current_tab() const {
|
||||||
void EditorSceneTabs::_bind_methods() {
|
void EditorSceneTabs::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab_index")));
|
ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab_index")));
|
||||||
ADD_SIGNAL(MethodInfo("tab_closed", 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() {
|
EditorSceneTabs::EditorSceneTabs() {
|
||||||
|
|
|
@ -80,7 +80,7 @@ private:
|
||||||
void _update_context_menu();
|
void _update_context_menu();
|
||||||
void _custom_menu_option(int p_option);
|
void _custom_menu_option(int p_option);
|
||||||
|
|
||||||
void _tab_preview_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata);
|
void _tab_preview_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, int p_tab);
|
||||||
|
|
||||||
void _global_menu_scene(const Variant &p_tag);
|
void _global_menu_scene(const Variant &p_tag);
|
||||||
void _global_menu_new_window(const Variant &p_tag);
|
void _global_menu_new_window(const Variant &p_tag);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue