forked from bartvdbraak/blender
Fix T51691: Shear cursor input scales w/ zoom
Use relative value from cursor movement.
This commit is contained in:
parent
0d8bf4bf94
commit
863f0434ec
@ -3051,19 +3051,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;
|
||||
@ -3085,24 +3079,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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user