diff --git a/editor/scene/canvas_item_editor_plugin.cpp b/editor/scene/canvas_item_editor_plugin.cpp index 8d3f338716d..c7aac9c602c 100644 --- a/editor/scene/canvas_item_editor_plugin.cpp +++ b/editor/scene/canvas_item_editor_plugin.cpp @@ -2736,175 +2736,173 @@ void CanvasItemEditor::_gui_input_viewport(const Ref &p_event) { } void CanvasItemEditor::_commit_drag() { - if (drag_selection.is_empty()) { - return; - } - - switch (drag_type) { - // Confirm the pivot move. - case DRAG_PIVOT: { - _commit_canvas_item_state( - drag_selection, - vformat( - TTR("Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"), - drag_selection.front()->get()->get_name(), - drag_selection.front()->get()->_edit_get_pivot().x, - drag_selection.front()->get()->_edit_get_pivot().y)); - } break; - - // Confirm the node rotation. - case DRAG_ROTATE: { - if (drag_selection.size() != 1) { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Rotate %d CanvasItems"), drag_selection.size()), - true); - } else { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Rotate CanvasItem \"%s\" to %d degrees"), - drag_selection.front()->get()->get_name(), - Math::rad_to_deg(drag_selection.front()->get()->_edit_get_rotation())), - true); - } - - if (key_auto_insert_button->is_pressed()) { - _insert_animation_keys(false, true, false, true); - } - } break; - - // Confirm new anchor position. - case DRAG_ANCHOR_TOP_LEFT: - case DRAG_ANCHOR_TOP_RIGHT: - case DRAG_ANCHOR_BOTTOM_RIGHT: - case DRAG_ANCHOR_BOTTOM_LEFT: - case DRAG_ANCHOR_ALL: { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Move CanvasItem \"%s\" Anchor"), drag_selection.front()->get()->get_name())); - snap_target[0] = SNAP_TARGET_NONE; - snap_target[1] = SNAP_TARGET_NONE; - } break; - - // Confirm resize. - case DRAG_LEFT: - case DRAG_RIGHT: - case DRAG_TOP: - case DRAG_BOTTOM: - case DRAG_TOP_LEFT: - case DRAG_TOP_RIGHT: - case DRAG_BOTTOM_LEFT: - case DRAG_BOTTOM_RIGHT: { - const Node2D *node2d = Object::cast_to(drag_selection.front()->get()); - if (node2d) { - // Extends from Node2D. - // Node2D doesn't have an actual stored rect size, unlike Controls. + if (!drag_selection.is_empty()) { + switch (drag_type) { + // Confirm the pivot move. + case DRAG_PIVOT: { _commit_canvas_item_state( drag_selection, vformat( - TTR("Scale Node2D \"%s\" to (%s, %s)"), + TTR("Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"), drag_selection.front()->get()->get_name(), - Math::snapped(drag_selection.front()->get()->_edit_get_scale().x, 0.01), - Math::snapped(drag_selection.front()->get()->_edit_get_scale().y, 0.01)), - true); - } else { - // Extends from Control. - _commit_canvas_item_state( - drag_selection, - vformat( - TTR("Resize Control \"%s\" to (%d, %d)"), - drag_selection.front()->get()->get_name(), - drag_selection.front()->get()->_edit_get_rect().size.x, - drag_selection.front()->get()->_edit_get_rect().size.y), - true); - } + drag_selection.front()->get()->_edit_get_pivot().x, + drag_selection.front()->get()->_edit_get_pivot().y)); + } break; - if (key_auto_insert_button->is_pressed()) { - _insert_animation_keys(false, false, true, true); - } - - snap_target[0] = SNAP_TARGET_NONE; - snap_target[1] = SNAP_TARGET_NONE; - } break; - - // Confirm resize. - case DRAG_SCALE_BOTH: - case DRAG_SCALE_X: - case DRAG_SCALE_Y: { - if (drag_selection.size() != 1) { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Scale %d CanvasItems"), drag_selection.size()), - true); - } else { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Scale CanvasItem \"%s\" to (%s, %s)"), - drag_selection.front()->get()->get_name(), - Math::snapped(drag_selection.front()->get()->_edit_get_scale().x, 0.01), - Math::snapped(drag_selection.front()->get()->_edit_get_scale().y, 0.01)), - true); - } - if (key_auto_insert_button->is_pressed()) { - _insert_animation_keys(false, false, true, true); - } - } break; - - // Confirm the canvas items move. - case DRAG_MOVE: - case DRAG_MOVE_X: - case DRAG_MOVE_Y: { - if (transform.affine_inverse().xform(get_viewport()->get_mouse_position()) != drag_from) { + // Confirm the node rotation. + case DRAG_ROTATE: { if (drag_selection.size() != 1) { _commit_canvas_item_state( drag_selection, - vformat(TTR("Move %d CanvasItems"), drag_selection.size()), + vformat(TTR("Rotate %d CanvasItems"), drag_selection.size()), true); } else { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Rotate CanvasItem \"%s\" to %d degrees"), + drag_selection.front()->get()->get_name(), + Math::rad_to_deg(drag_selection.front()->get()->_edit_get_rotation())), + true); + } + + if (key_auto_insert_button->is_pressed()) { + _insert_animation_keys(false, true, false, true); + } + } break; + + // Confirm new anchor position. + case DRAG_ANCHOR_TOP_LEFT: + case DRAG_ANCHOR_TOP_RIGHT: + case DRAG_ANCHOR_BOTTOM_RIGHT: + case DRAG_ANCHOR_BOTTOM_LEFT: + case DRAG_ANCHOR_ALL: { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Move CanvasItem \"%s\" Anchor"), drag_selection.front()->get()->get_name())); + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; + } break; + + // Confirm resize. + case DRAG_LEFT: + case DRAG_RIGHT: + case DRAG_TOP: + case DRAG_BOTTOM: + case DRAG_TOP_LEFT: + case DRAG_TOP_RIGHT: + case DRAG_BOTTOM_LEFT: + case DRAG_BOTTOM_RIGHT: { + const Node2D *node2d = Object::cast_to(drag_selection.front()->get()); + if (node2d) { + // Extends from Node2D. + // Node2D doesn't have an actual stored rect size, unlike Controls. _commit_canvas_item_state( drag_selection, vformat( - TTR("Move CanvasItem \"%s\" to (%d, %d)"), + TTR("Scale Node2D \"%s\" to (%s, %s)"), + drag_selection.front()->get()->get_name(), + Math::snapped(drag_selection.front()->get()->_edit_get_scale().x, 0.01), + Math::snapped(drag_selection.front()->get()->_edit_get_scale().y, 0.01)), + true); + } else { + // Extends from Control. + _commit_canvas_item_state( + drag_selection, + vformat( + TTR("Resize Control \"%s\" to (%d, %d)"), + drag_selection.front()->get()->get_name(), + drag_selection.front()->get()->_edit_get_rect().size.x, + drag_selection.front()->get()->_edit_get_rect().size.y), + true); + } + + if (key_auto_insert_button->is_pressed()) { + _insert_animation_keys(false, false, true, true); + } + + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; + } break; + + // Confirm resize. + case DRAG_SCALE_BOTH: + case DRAG_SCALE_X: + case DRAG_SCALE_Y: { + if (drag_selection.size() != 1) { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Scale %d CanvasItems"), drag_selection.size()), + true); + } else { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Scale CanvasItem \"%s\" to (%s, %s)"), + drag_selection.front()->get()->get_name(), + Math::snapped(drag_selection.front()->get()->_edit_get_scale().x, 0.01), + Math::snapped(drag_selection.front()->get()->_edit_get_scale().y, 0.01)), + true); + } + if (key_auto_insert_button->is_pressed()) { + _insert_animation_keys(false, false, true, true); + } + } break; + + // Confirm the canvas items move. + case DRAG_MOVE: + case DRAG_MOVE_X: + case DRAG_MOVE_Y: { + if (transform.affine_inverse().xform(get_viewport()->get_mouse_position()) != drag_from) { + if (drag_selection.size() != 1) { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Move %d CanvasItems"), drag_selection.size()), + true); + } else { + _commit_canvas_item_state( + drag_selection, + vformat( + TTR("Move CanvasItem \"%s\" to (%d, %d)"), + drag_selection.front()->get()->get_name(), + drag_selection.front()->get()->_edit_get_position().x, + drag_selection.front()->get()->_edit_get_position().y), + true); + } + } + + if (key_auto_insert_button->is_pressed()) { + _insert_animation_keys(true, false, false, true); + } + + // Make sure smart snapping lines disappear. + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; + } break; + + // Confirm the canvas items move by arrow keys. + case DRAG_KEY_MOVE: { + if (tool != TOOL_SELECT && tool != TOOL_MOVE) { + return; + } + + if (drag_selection.size() > 1) { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Move %d CanvasItems"), drag_selection.size()), + true); + } else if (drag_selection.size() == 1) { + _commit_canvas_item_state( + drag_selection, + vformat(TTR("Move CanvasItem \"%s\" to (%d, %d)"), drag_selection.front()->get()->get_name(), drag_selection.front()->get()->_edit_get_position().x, drag_selection.front()->get()->_edit_get_position().y), true); } - } + } break; - if (key_auto_insert_button->is_pressed()) { - _insert_animation_keys(true, false, false, true); - } - - // Make sure smart snapping lines disappear. - snap_target[0] = SNAP_TARGET_NONE; - snap_target[1] = SNAP_TARGET_NONE; - } break; - - // Confirm the canvas items move by arrow keys. - case DRAG_KEY_MOVE: { - if (tool != TOOL_SELECT && tool != TOOL_MOVE) { - return; - } - - if (drag_selection.size() > 1) { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Move %d CanvasItems"), drag_selection.size()), - true); - } else if (drag_selection.size() == 1) { - _commit_canvas_item_state( - drag_selection, - vformat(TTR("Move CanvasItem \"%s\" to (%d, %d)"), - drag_selection.front()->get()->get_name(), - drag_selection.front()->get()->_edit_get_position().x, - drag_selection.front()->get()->_edit_get_position().y), - true); - } - } break; - - default: - break; + default: + break; + } } _reset_drag();