1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-06 12:20:30 +00:00

Ability to rotate controls using tool, closes #3800

This commit is contained in:
Juan Linietsky
2016-06-27 10:47:51 -03:00
parent 47d6cc08bb
commit e2d208f122
2 changed files with 40 additions and 10 deletions

View File

@@ -1382,6 +1382,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;
}
@@ -1566,14 +1568,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;