|
@@ -71,7 +71,21 @@ Ref<Texture> EditorResourcePreviewGenerator::generate_from_path(const String &p_
|
|
|
return generate(res, p_size);
|
|
|
}
|
|
|
|
|
|
-bool EditorResourcePreviewGenerator::should_generate_small_preview() const {
|
|
|
+bool EditorResourcePreviewGenerator::generate_small_preview_automatically() const {
|
|
|
+
|
|
|
+ if (get_script_instance() && get_script_instance()->has_method("generate_small_preview_automatically")) {
|
|
|
+ return get_script_instance()->call("generate_small_preview_automatically");
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool EditorResourcePreviewGenerator::can_generate_small_preview() const {
|
|
|
+
|
|
|
+ if (get_script_instance() && get_script_instance()->has_method("can_generate_small_preview")) {
|
|
|
+ return get_script_instance()->call("can_generate_small_preview");
|
|
|
+ }
|
|
|
+
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -80,6 +94,8 @@ void EditorResourcePreviewGenerator::_bind_methods() {
|
|
|
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "handles", PropertyInfo(Variant::STRING, "type")));
|
|
|
ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture), "generate", PropertyInfo(Variant::OBJECT, "from", PROPERTY_HINT_RESOURCE_TYPE, "Resource"), PropertyInfo(Variant::VECTOR2, "size")));
|
|
|
ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture), "generate_from_path", PropertyInfo(Variant::STRING, "path", PROPERTY_HINT_FILE), PropertyInfo(Variant::VECTOR2, "size")));
|
|
|
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "generate_small_preview_automatically"));
|
|
|
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "can_generate_small_preview"));
|
|
|
}
|
|
|
|
|
|
EditorResourcePreviewGenerator::EditorResourcePreviewGenerator() {
|
|
@@ -154,16 +170,27 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<
|
|
|
}
|
|
|
r_texture = generated;
|
|
|
|
|
|
- if (r_texture.is_valid() && preview_generators[i]->should_generate_small_preview()) {
|
|
|
- int small_thumbnail_size = EditorNode::get_singleton()->get_theme_base()->get_icon("Object", "EditorIcons")->get_width(); // Kind of a workaround to retrieve the default icon size
|
|
|
- small_thumbnail_size *= EDSCALE;
|
|
|
+ int small_thumbnail_size = EditorNode::get_singleton()->get_theme_base()->get_icon("Object", "EditorIcons")->get_width(); // Kind of a workaround to retrieve the default icon size
|
|
|
+ small_thumbnail_size *= EDSCALE;
|
|
|
|
|
|
+ if (preview_generators[i]->can_generate_small_preview()) {
|
|
|
+ Ref<Texture> generated_small;
|
|
|
+ if (p_item.resource.is_valid()) {
|
|
|
+ generated_small = preview_generators[i]->generate(p_item.resource, Vector2(small_thumbnail_size, small_thumbnail_size));
|
|
|
+ } else {
|
|
|
+ generated_small = preview_generators[i]->generate_from_path(p_item.path, Vector2(small_thumbnail_size, small_thumbnail_size));
|
|
|
+ }
|
|
|
+ r_small_texture = generated_small;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!r_small_texture.is_valid() && r_texture.is_valid() && preview_generators[i]->generate_small_preview_automatically()) {
|
|
|
Ref<Image> small_image = r_texture->get_data();
|
|
|
small_image = small_image->duplicate();
|
|
|
small_image->resize(small_thumbnail_size, small_thumbnail_size, Image::INTERPOLATE_CUBIC);
|
|
|
r_small_texture.instance();
|
|
|
r_small_texture->create_from_image(small_image);
|
|
|
}
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
|