Commit: 0d749dbc77d1d60fbef241c2e245f5b2cbf91cb3
Author: Campbell Barton
Date:   Fri Jun 2 20:40:41 2017 +1000
Branches: greasepencil-object
https://developer.blender.org/rB0d749dbc77d1d60fbef241c2e245f5b2cbf91cb3

Fix T51691: Shear cursor input scales w/ zoom

Use relative value from cursor movement.

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

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

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

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index c7970b410f2..e48bbc8cc05 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -3094,19 +3094,13 @@ static void Bend(TransInfo *t, const int 
UNUSED(mval[2]))
 /** \name Transform Shear
  * \{ */
 
-static void postInputShear(TransInfo *UNUSED(t), float values[3])
-{
-       mul_v3_fl(values, 0.05f);
-}
-
 static void initShear(TransInfo *t)
 {
        t->mode = TFM_SHEAR;
        t->transform = applyShear;
        t->handleEvent = handleEventShear;
-       
-       setInputPostFct(&t->mouse, postInputShear);
-       initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE);
+
+       initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_RATIO);
        
        t->idx_max = 0;
        t->num.idx_max = 0;
@@ -3128,24 +3122,24 @@ static eRedrawFlag handleEventShear(TransInfo *t, const 
wmEvent *event)
        if (event->type == MIDDLEMOUSE && event->val == KM_PRESS) {
                /* Use custom.mode.data pointer to signal Shear direction */
                if (t->custom.mode.data == NULL) {
-                       initMouseInputMode(t, &t->mouse, 
INPUT_VERTICAL_ABSOLUTE);
+                       initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_RATIO);
                        t->custom.mode.data = (void *)1;
                }
                else {
-                       initMouseInputMode(t, &t->mouse, 
INPUT_HORIZONTAL_ABSOLUTE);
+                       initMouseInputMode(t, &t->mouse, 
INPUT_HORIZONTAL_RATIO);
                        t->custom.mode.data = NULL;
                }
 
                status = TREDRAW_HARD;
        }
        else if (event->type == XKEY && event->val == KM_PRESS) {
-               initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE);
+               initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_RATIO);
                t->custom.mode.data = NULL;
                
                status = TREDRAW_HARD;
        }
        else if (event->type == YKEY && event->val == KM_PRESS) {
-               initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE);
+               initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_RATIO);
                t->custom.mode.data = (void *)1;
                
                status = TREDRAW_HARD;
diff --git a/source/blender/editors/transform/transform_input.c 
b/source/blender/editors/transform/transform_input.c
index 22c39d6ed0c..5f2e5a99090 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -86,12 +86,11 @@ static void InputTrackBall(TransInfo *UNUSED(t), MouseInput 
*mi, const double mv
        output[1] *= mi->factor;
 }
 
-static void InputHorizontalRatio(TransInfo *t, MouseInput *UNUSED(mi), const 
double mval[2], float output[3])
+static void InputHorizontalRatio(TransInfo *t, MouseInput *mi, const double 
mval[2], float output[3])
 {
        const int winx = t->ar ? t->ar->winx : 1;
-       const double pad = winx / 10;
 
-       output[0] = (mval[0] - pad) / (winx - 2 * pad);
+       output[0] = ((mval[0] - mi->imval[0]) / winx) * 2.0f;
 }
 
 static void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, const double 
mval[2], float output[3])
@@ -104,12 +103,11 @@ static void InputHorizontalAbsolute(TransInfo *t, 
MouseInput *mi, const double m
        output[0] = dot_v3v3(t->viewinv[0], vec) * 2.0f;
 }
 
-static void InputVerticalRatio(TransInfo *t, MouseInput *UNUSED(mi), const 
double mval[2], float output[3])
+static void InputVerticalRatio(TransInfo *t, MouseInput *mi, const double 
mval[2], float output[3])
 {
        const int winy = t->ar ? t->ar->winy : 1;
-       const double pad = winy / 10;
 
-       output[0] = (mval[1] - pad) / (winy - 2 * pad);
+       output[0] = ((mval[1] - mi->imval[1]) / winy) * 2.0f;
 }
 
 static void InputVerticalAbsolute(TransInfo *t, MouseInput *mi, const double 
mval[2], float output[3])
@@ -314,7 +312,6 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, 
MouseInputMode mode)
                        t->helpline = HLP_TRACKBALL;
                        break;
                case INPUT_HORIZONTAL_RATIO:
-                       mi->factor = (float)(mi->center[0] - mi->imval[0]);
                        mi->apply = InputHorizontalRatio;
                        t->helpline = HLP_HARROW;
                        break;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to