You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-13 13:31:48 +00:00
Fix editor crash when unsupported Resource is dropped in scene
This commit is contained in:
@@ -5901,21 +5901,20 @@ void CanvasItemEditorViewport::_perform_drop_data() {
|
|||||||
|
|
||||||
bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
|
bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
|
||||||
Dictionary d = p_data;
|
Dictionary d = p_data;
|
||||||
if (d.has("type")) {
|
if (!d.has("type") || (String(d["type"]) != "files")) {
|
||||||
if (String(d["type"]) == "files") {
|
label->hide();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Vector<String> files = d["files"];
|
Vector<String> files = d["files"];
|
||||||
bool can_instantiate = false;
|
bool can_instantiate = false;
|
||||||
|
|
||||||
List<String> scene_extensions;
|
// Check if at least one of the dragged files is a texture or scene.
|
||||||
ResourceLoader::get_recognized_extensions_for_type("PackedScene", &scene_extensions);
|
|
||||||
List<String> texture_extensions;
|
|
||||||
ResourceLoader::get_recognized_extensions_for_type("Texture2D", &texture_extensions);
|
|
||||||
|
|
||||||
for (int i = 0; i < files.size(); i++) {
|
for (int i = 0; i < files.size(); i++) {
|
||||||
String extension = files[i].get_extension().to_lower();
|
bool is_scene = ClassDB::is_parent_class(ResourceLoader::get_resource_type(files[i]), "PackedScene");
|
||||||
|
bool is_texture = ClassDB::is_parent_class(ResourceLoader::get_resource_type(files[i]), "Texture2D");
|
||||||
|
|
||||||
// Check if dragged files with texture or scene extension can be created at least once.
|
if (is_scene || is_texture) {
|
||||||
if (texture_extensions.find(extension) || scene_extensions.find(extension)) {
|
|
||||||
Ref<Resource> res = ResourceLoader::load(files[i]);
|
Ref<Resource> res = ResourceLoader::load(files[i]);
|
||||||
if (res.is_null()) {
|
if (res.is_null()) {
|
||||||
continue;
|
continue;
|
||||||
@@ -5936,6 +5935,8 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian
|
|||||||
if (!preview_node->get_parent()) { // create preview only once
|
if (!preview_node->get_parent()) { // create preview only once
|
||||||
_create_preview(files);
|
_create_preview(files);
|
||||||
}
|
}
|
||||||
|
ERR_FAIL_COND_V(preview_node->get_child_count() == 0, false);
|
||||||
|
|
||||||
Transform2D trans = canvas_item_editor->get_canvas_transform();
|
Transform2D trans = canvas_item_editor->get_canvas_transform();
|
||||||
preview_node->set_position((p_point - trans.get_origin()) / trans.get_scale().x);
|
preview_node->set_position((p_point - trans.get_origin()) / trans.get_scale().x);
|
||||||
String scene_file_path = preview_node->get_child(0)->get_scene_file_path();
|
String scene_file_path = preview_node->get_child(0)->get_scene_file_path();
|
||||||
@@ -5954,10 +5955,6 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian
|
|||||||
}
|
}
|
||||||
return can_instantiate;
|
return can_instantiate;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
label->hide();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CanvasItemEditorViewport::_show_resource_type_selector() {
|
void CanvasItemEditorViewport::_show_resource_type_selector() {
|
||||||
_remove_preview();
|
_remove_preview();
|
||||||
|
|||||||
Reference in New Issue
Block a user