You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Make drag and drop into viewport add to root node by default
When dragging and dropping a texture, mesh, or scene from the FileSystem into the 2D or 3D viewport, it will be added as a child of the current scene's root node.
This commit is contained in:
@@ -5733,11 +5733,14 @@ void CanvasItemEditorViewport::_create_preview(const Vector<String> &files) cons
|
||||
preview_node->add_child(sprite);
|
||||
label->show();
|
||||
label_desc->show();
|
||||
label_desc->set_text(TTR("Drag and drop to add as child of current scene's root node.\nHold Ctrl when dropping to add as child of selected node.\nHold Shift when dropping to add as sibling of selected node.\nHold Alt when dropping to add as a different node type."));
|
||||
} else {
|
||||
if (scene.is_valid()) {
|
||||
Node *instance = scene->instantiate();
|
||||
if (instance) {
|
||||
preview_node->add_child(instance);
|
||||
label_desc->show();
|
||||
label_desc->set_text(TTR("Drag and drop to add as child of current scene's root node.\nHold Ctrl when dropping to add as child of selected node.\nHold Shift when dropping to add as sibling of selected node."));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6036,6 +6039,7 @@ bool CanvasItemEditorViewport::_only_packed_scenes_selected() const {
|
||||
|
||||
void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p_data) {
|
||||
bool is_shift = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
|
||||
bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CTRL);
|
||||
bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
|
||||
|
||||
selected_files.clear();
|
||||
@@ -6047,24 +6051,25 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p
|
||||
return;
|
||||
}
|
||||
|
||||
List<Node *> list = editor->get_editor_selection()->get_selected_node_list();
|
||||
if (list.size() == 0) {
|
||||
Node *root_node = editor->get_edited_scene();
|
||||
List<Node *> selected_nodes = editor->get_editor_selection()->get_selected_node_list();
|
||||
Node *root_node = editor->get_edited_scene();
|
||||
if (selected_nodes.size() > 0) {
|
||||
Node *selected_node = selected_nodes[0];
|
||||
target_node = root_node;
|
||||
if (is_ctrl) {
|
||||
target_node = selected_node;
|
||||
} else if (is_shift && selected_node != root_node) {
|
||||
target_node = selected_node->get_parent();
|
||||
}
|
||||
} else {
|
||||
if (root_node) {
|
||||
list.push_back(root_node);
|
||||
target_node = root_node;
|
||||
} else {
|
||||
drop_pos = p_point;
|
||||
target_node = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (list.size() > 0) {
|
||||
target_node = list[0];
|
||||
if (is_shift && target_node != editor->get_edited_scene()) {
|
||||
target_node = target_node->get_parent();
|
||||
}
|
||||
}
|
||||
|
||||
drop_pos = p_point;
|
||||
|
||||
if (is_alt && !_only_packed_scenes_selected()) {
|
||||
@@ -6145,7 +6150,6 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte
|
||||
canvas_item_editor->get_controls_container()->add_child(label);
|
||||
|
||||
label_desc = memnew(Label);
|
||||
label_desc->set_text(TTR("Drag & drop + Shift : Add node as sibling\nDrag & drop + Alt : Change node type"));
|
||||
label_desc->add_theme_color_override("font_color", Color(0.6f, 0.6f, 0.6f, 1));
|
||||
label_desc->add_theme_color_override("font_shadow_color", Color(0.2f, 0.2f, 0.2f, 1));
|
||||
label_desc->add_theme_constant_override("shadow_as_outline", 1 * EDSCALE);
|
||||
|
||||
Reference in New Issue
Block a user