summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2016-06-27 10:47:51 -0300
committerJuan Linietsky <reduzio@gmail.com>2016-06-27 10:47:51 -0300
commite2d208f1226f802b941d099c2f16223e7446cb07 (patch)
tree304fe6f6cb880ee88a28028acc10268c89c6ab96
parent47d6cc08bbd745d63829e02ae408c4ce09ce1299 (diff)
Ability to rotate controls using tool, closes #3800
-rw-r--r--scene/gui/control.cpp12
-rw-r--r--tools/editor/plugins/canvas_item_editor_plugin.cpp38
2 files changed, 40 insertions, 10 deletions
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 2e28baa137..8f96fbbafc 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -49,14 +49,22 @@
Variant Control::edit_get_state() const {
- return get_rect();
+ Dictionary s;
+ s["rect"]=get_rect();
+ s["rot"]=get_rotation();
+ s["scale"]=get_scale();
+ return s;
}
void Control::edit_set_state(const Variant& p_state) {
- Rect2 state=p_state;
+ Dictionary s=p_state;
+
+ Rect2 state=s["rect"];
set_pos(state.pos);
set_size(state.size);
+ set_rotation(s["rot"]);
+ set_scale(s["scale"]);
}
void Control::set_custom_minimum_size(const Size2& p_custom) {
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp
index 0cbc867b47..81601a81a7 100644
--- a/tools/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -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;