[Bf-blender-cvs] [19137e8] master: Fix T46606: Trackball Rotate jumps releasing shift

Campbell Barton noreply at git.blender.org
Tue Oct 27 11:55:35 CET 2015


Commit: 19137e86bb9e718726898228e11657a57ae4f311
Author: Campbell Barton
Date:   Tue Oct 27 21:46:22 2015 +1100
Branches: master
https://developer.blender.org/rB19137e86bb9e718726898228e11657a57ae4f311

Fix T46606: Trackball Rotate jumps releasing shift

===================================================================

M	source/blender/editors/transform/transform_input.c

===================================================================

diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index 61b2dea..3b8d87c 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -39,6 +39,11 @@
 
 #include "MEM_guardedalloc.h" 
 
+struct InputTrackBall_Data {
+	float value_accum[2];
+	float value_prev[2];
+};
+
 /* ************************** INPUT FROM MOUSE *************************** */
 
 static void InputVector(TransInfo *t, MouseInput *mi, const int mval[2], float output[3])
@@ -102,18 +107,23 @@ static void InputSpringDelta(TransInfo *t, MouseInput *mi, const int mval[2], fl
 
 static void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], float output[3])
 {
+	struct InputTrackBall_Data *data = mi->data;
+	float dxy[2];
+	float dxy_accum[2];
+
+	dxy[0] = (mi->imval[1] - mval[1]);
+	dxy[1] = (mval[0] - mi->imval[0]);
+
+	sub_v2_v2v2(dxy_accum, dxy, data->value_prev);
+
+	add_v2_v2(data->value_prev, dxy_accum);
 
 	if (mi->precision) {
-		output[0] = (mi->imval[1] - mi->precision_mval[1]) + (mi->precision_mval[1] - mval[1]) * 0.1f;
-		output[1] = (mi->precision_mval[0] - mi->imval[0]) + (mval[0] - mi->precision_mval[0]) * 0.1f;
-	}
-	else {
-		output[0] = (float)(mi->imval[1] - mval[1]);
-		output[1] = (float)(mval[0] - mi->imval[0]);
+		mul_v2_fl(dxy_accum, 1.0f / 30.0f);
 	}
 
-	output[0] *= mi->factor;
-	output[1] *= mi->factor;
+	add_v2_v2(data->value_accum, dxy_accum);
+	mul_v2_v2fl(output, data->value_accum, mi->factor);
 }
 
 static void InputHorizontalRatio(TransInfo *t, MouseInput *mi, const int mval[2], float output[3])
@@ -358,6 +368,7 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
 		case INPUT_TRACKBALL:
 			/* factor has to become setting or so */
 			mi->factor = 0.01f;
+			mi->data = MEM_callocN(sizeof(struct InputTrackBall_Data), "angle accumulator");
 			mi->apply = InputTrackBall;
 			t->helpline = HLP_TRACKBALL;
 			break;




More information about the Bf-blender-cvs mailing list