Browse Source

Fixed node scaling arrows being wrong

Patch for #21755. Node scaling arrows pointed the wrong way when nodes were rotated. Ammend: made math cleaner.

Simplified expression

Changes suggested by Aaron Franke

Co-authored-by: Aaron Franke <[email protected]>
SekoiaTree 5 years ago
parent
commit
603febdbfe
1 changed files with 25 additions and 4 deletions
  1. 25 4
      editor/plugins/canvas_item_editor_plugin.cpp

+ 25 - 4
editor/plugins/canvas_item_editor_plugin.cpp

@@ -2599,6 +2599,11 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) {
 
 
 void CanvasItemEditor::_update_cursor() {
 void CanvasItemEditor::_update_cursor() {
 	CursorShape c = CURSOR_ARROW;
 	CursorShape c = CURSOR_ARROW;
+	bool should_switch = false;
+	if (drag_selection.size() != 0) {
+		float angle = drag_selection[0]->_edit_get_rotation();
+		should_switch = abs(Math::cos(angle)) < Math_SQRT12;
+	}
 	switch (drag_type) {
 	switch (drag_type) {
 		case DRAG_NONE:
 		case DRAG_NONE:
 			switch (tool) {
 			switch (tool) {
@@ -2621,21 +2626,37 @@ void CanvasItemEditor::_update_cursor() {
 		case DRAG_LEFT:
 		case DRAG_LEFT:
 		case DRAG_RIGHT:
 		case DRAG_RIGHT:
 		case DRAG_V_GUIDE:
 		case DRAG_V_GUIDE:
-			c = CURSOR_HSIZE;
+			if (should_switch) {
+				c = CURSOR_VSIZE;
+			} else {
+				c = CURSOR_HSIZE;
+			}
 			break;
 			break;
 		case DRAG_TOP:
 		case DRAG_TOP:
 		case DRAG_BOTTOM:
 		case DRAG_BOTTOM:
 		case DRAG_H_GUIDE:
 		case DRAG_H_GUIDE:
-			c = CURSOR_VSIZE;
+			if (should_switch) {
+				c = CURSOR_HSIZE;
+			} else {
+				c = CURSOR_VSIZE;
+			}
 			break;
 			break;
 		case DRAG_TOP_LEFT:
 		case DRAG_TOP_LEFT:
 		case DRAG_BOTTOM_RIGHT:
 		case DRAG_BOTTOM_RIGHT:
 		case DRAG_DOUBLE_GUIDE:
 		case DRAG_DOUBLE_GUIDE:
-			c = CURSOR_FDIAGSIZE;
+			if (should_switch) {
+				c = CURSOR_BDIAGSIZE;
+			} else {
+				c = CURSOR_FDIAGSIZE;
+			}
 			break;
 			break;
 		case DRAG_TOP_RIGHT:
 		case DRAG_TOP_RIGHT:
 		case DRAG_BOTTOM_LEFT:
 		case DRAG_BOTTOM_LEFT:
-			c = CURSOR_BDIAGSIZE;
+			if (should_switch) {
+				c = CURSOR_FDIAGSIZE;
+			} else {
+				c = CURSOR_BDIAGSIZE;
+			}
 			break;
 			break;
 		case DRAG_MOVE:
 		case DRAG_MOVE:
 			c = CURSOR_MOVE;
 			c = CURSOR_MOVE;