diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 30e0dc95c73..626da0e3b3b 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -5659,7 +5659,7 @@ void CanvasItemEditorViewport::_create_preview(const Vector &files) cons Ref scene = Ref(Object::cast_to(*res)); if (texture != nullptr || scene != nullptr) { bool root_node_selected = EditorNode::get_singleton()->get_editor_selection()->is_selected(EditorNode::get_singleton()->get_edited_scene()); - String desc = TTR("Drag and drop to add as child of current scene's root node.") + "\n" + vformat(TTR("Hold %s when dropping to add as child of selected node."), keycode_get_string((Key)KeyModifierMask::CMD_OR_CTRL)); + String desc = TTR("Drag and drop to add as child of selected node.") + "\n" + TTR("Hold Alt when dropping to add as child of root node."); if (!root_node_selected) { desc += "\n" + TTR("Hold Shift when dropping to add as sibling of selected node."); } @@ -5670,7 +5670,7 @@ void CanvasItemEditorViewport::_create_preview(const Vector &files) cons preview_node->add_child(sprite); label->show(); label_desc->show(); - desc += "\n" + TTR("Hold Alt when dropping to add as a different node type."); + desc += "\n" + TTR("Hold Alt + Shift when dropping to add as a different node type."); label_desc->set_text(desc); } else { if (scene.is_valid()) { @@ -5963,7 +5963,6 @@ 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::CMD_OR_CTRL); bool is_alt = Input::get_singleton()->is_key_pressed(Key::ALT); selected_files.clear(); @@ -5979,9 +5978,9 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p Node *root_node = EditorNode::get_singleton()->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; + target_node = selected_node; + if (is_alt) { + target_node = root_node; } else if (is_shift && selected_node != root_node) { target_node = selected_node->get_parent(); } @@ -5995,7 +5994,7 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p drop_pos = p_point; - if (is_alt && !_only_packed_scenes_selected()) { + if (is_alt && is_shift && !_only_packed_scenes_selected()) { _show_resource_type_selector(); } else { _perform_drop_data(); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index e4d24832bff..c57265166d7 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -4530,7 +4530,7 @@ void Node3DEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p_ } 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(); Dictionary d = p_data; @@ -4540,15 +4540,15 @@ void Node3DEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p_ List selected_nodes = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list(); Node *root_node = EditorNode::get_singleton()->get_edited_scene(); - if (selected_nodes.size() == 1) { + if (selected_nodes.size() > 0) { Node *selected_node = selected_nodes[0]; - target_node = root_node; - if (is_ctrl) { - target_node = selected_node; + target_node = selected_node; + if (is_alt) { + target_node = root_node; } else if (is_shift && selected_node != root_node) { target_node = selected_node->get_parent(); } - } else if (selected_nodes.size() == 0) { + } else { if (root_node) { target_node = root_node; } else { @@ -4556,11 +4556,6 @@ void Node3DEditorViewport::drop_data_fw(const Point2 &p_point, const Variant &p_ SceneTreeDock::get_singleton()->add_root_node(memnew(Node3D)); target_node = get_tree()->get_edited_scene_root(); } - } else { - accept->set_text(TTR("Cannot drag and drop into multiple selected nodes.")); - accept->popup_centered(); - _remove_preview_node(); - return; } drop_pos = p_point; @@ -6500,20 +6495,20 @@ void vertex() { // Points are already in world space, so no need for MODEL_MATRIX anymore. vec4 clip_a = PROJECTION_MATRIX * (VIEW_MATRIX * vec4(point_a, 1.0)); vec4 clip_b = PROJECTION_MATRIX * (VIEW_MATRIX * vec4(point_b, 1.0)); - + vec2 screen_a = VIEWPORT_SIZE * (0.5 * clip_a.xy / clip_a.w + 0.5); vec2 screen_b = VIEWPORT_SIZE * (0.5 * clip_b.xy / clip_b.w + 0.5); - + vec2 x_basis = normalize(screen_b - screen_a); vec2 y_basis = vec2(-x_basis.y, x_basis.x); - + float width = 3.0; vec2 screen_point_a = screen_a + width * (VERTEX.x * x_basis + VERTEX.y * y_basis); vec2 screen_point_b = screen_b + width * (VERTEX.x * x_basis + VERTEX.y * y_basis); vec2 screen_point_final = mix(screen_point_a, screen_point_b, VERTEX.z); - + vec4 clip_final = mix(clip_a, clip_b, VERTEX.z); - + POSITION = vec4(clip_final.w * ((2.0 * screen_point_final) / VIEWPORT_SIZE - 1.0), clip_final.z, clip_final.w); UV = VERTEX.yz * clip_final.w;