Skip to content

Commit

Permalink
Fix rotated 2D movement gizmo
Browse files Browse the repository at this point in the history
  • Loading branch information
KoBeWi committed Sep 16, 2023
1 parent 5f1e56f commit 447a4b6
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions editor/plugins/canvas_item_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2056,27 +2056,31 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {

if (drag_type == DRAG_MOVE || drag_type == DRAG_MOVE_X || drag_type == DRAG_MOVE_Y) {
// Move the nodes
if (m.is_valid()) {
if (m.is_valid() && !drag_selection.is_empty()) {
_restore_canvas_item_state(drag_selection, true);

drag_to = transform.affine_inverse().xform(m->get_position());
Point2 previous_pos;
if (!drag_selection.is_empty()) {
if (drag_selection.size() == 1) {
Transform2D xform = drag_selection[0]->get_global_transform_with_canvas() * drag_selection[0]->get_transform().affine_inverse();
previous_pos = xform.xform(drag_selection[0]->_edit_get_position());
} else {
previous_pos = _get_encompassing_rect_from_list(drag_selection).position;
}
if (drag_selection.size() == 1) {
Transform2D xform = drag_selection[0]->get_global_transform_with_canvas() * drag_selection[0]->get_transform().affine_inverse();
previous_pos = xform.xform(drag_selection[0]->_edit_get_position());
} else {
previous_pos = _get_encompassing_rect_from_list(drag_selection).position;
}

Point2 new_pos = snap_point(previous_pos + (drag_to - drag_from), SNAP_GRID | SNAP_GUIDES | SNAP_PIXEL | SNAP_NODE_PARENT | SNAP_NODE_ANCHORS | SNAP_OTHER_NODES, 0, nullptr, drag_selection);
Point2 drag_delta = drag_to - drag_from;
if (drag_selection.size() == 1 && (drag_type == DRAG_MOVE_X || drag_type == DRAG_MOVE_Y)) {
const CanvasItem *selected = drag_selection.front()->get();
drag_delta = selected->get_transform().affine_inverse().basis_xform(drag_delta);

if (drag_type == DRAG_MOVE_X) {
new_pos.y = previous_pos.y;
} else if (drag_type == DRAG_MOVE_Y) {
new_pos.x = previous_pos.x;
if (drag_type == DRAG_MOVE_X) {
drag_delta.y = 0;
} else {
drag_delta.x = 0;
}
drag_delta = selected->get_transform().basis_xform(drag_delta);
}
Point2 new_pos = snap_point(previous_pos + drag_delta, SNAP_GRID | SNAP_GUIDES | SNAP_PIXEL | SNAP_NODE_PARENT | SNAP_NODE_ANCHORS | SNAP_OTHER_NODES, 0, nullptr, drag_selection);

bool single_axis = m->is_shift_pressed();
if (single_axis) {
Expand Down

0 comments on commit 447a4b6

Please sign in to comment.