diff options
| author | Juan Linietsky | 2016-06-27 10:47:51 -0300 |
|---|---|---|
| committer | Rémi Verschelde | 2016-07-08 18:34:31 +0200 |
| commit | c5fd6a3b69168f5cbfc02d4e9ee2d98ee4b248c9 (patch) | |
| tree | b5e93420162309d4719da8771099295aa03c51d3 /tools | |
| parent | 6813c8902157c0afe37c5c7892bb83b78a623d01 (diff) | |
| download | godot-c5fd6a3b69168f5cbfc02d4e9ee2d98ee4b248c9.tar.gz godot-c5fd6a3b69168f5cbfc02d4e9ee2d98ee4b248c9.tar.zst godot-c5fd6a3b69168f5cbfc02d4e9ee2d98ee4b248c9.zip | |
Ability to rotate controls using tool, closes #3800
(cherry picked from commit e2d208f1226f802b941d099c2f16223e7446cb07)
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/editor/plugins/canvas_item_editor_plugin.cpp | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index a41e1a41f..8fa7a1c39 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -1380,6 +1380,8 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) { se->undo_state=canvas_item->edit_get_state(); if (canvas_item->cast_to<Node2D>()) se->undo_pivot=canvas_item->cast_to<Node2D>()->edit_get_pivot(); + if (canvas_item->cast_to<Control>()) + se->undo_pivot=Vector2(); return; } @@ -1564,14 +1566,34 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) { if (drag==DRAG_ROTATE) { Vector2 center = canvas_item->get_global_transform_with_canvas().get_origin(); - if (Node2D *node = canvas_item->cast_to<Node2D>()) { - Matrix32 rot; - rot.elements[1] = (dfrom - center).normalized(); - rot.elements[0] = rot.elements[1].tangent(); - node->set_rot(snap_angle(rot.xform_inv(dto-center).angle() + node->get_rot(), node->get_rot())); - display_rotate_to = dto; - display_rotate_from = center; - viewport->update(); + { + Node2D *node = canvas_item->cast_to<Node2D>(); + + + if (node) { + Matrix32 rot; + rot.elements[1] = (dfrom - center).normalized(); + rot.elements[0] = rot.elements[1].tangent(); + node->set_rot(snap_angle(rot.xform_inv(dto-center).angle() + node->get_rot(), node->get_rot())); + display_rotate_to = dto; + display_rotate_from = center; + viewport->update(); + } + } + + { + Control *node = canvas_item->cast_to<Control>(); + + + if (node) { + Matrix32 rot; + rot.elements[1] = (dfrom - center).normalized(); + rot.elements[0] = rot.elements[1].tangent(); + node->set_rotation(snap_angle(rot.xform_inv(dto-center).angle() + node->get_rotation(), node->get_rotation())); + display_rotate_to = dto; + display_rotate_from = center; + viewport->update(); + } } continue; |
