diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/transform/transform_input.c | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/transform/transform_input.c')
-rw-r--r-- | source/blender/editors/transform/transform_input.c | 651 |
1 files changed, 339 insertions, 312 deletions
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index b03d50e11e7..46f6e576cf4 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -18,7 +18,6 @@ * \ingroup edtransform */ - #include <stdlib.h> #include <math.h> @@ -40,426 +39,454 @@ static void InputVector(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - convertViewVec(t, output, mval[0] - mi->imval[0], mval[1] - mi->imval[1]); + convertViewVec(t, output, mval[0] - mi->imval[0], mval[1] - mi->imval[1]); } -static void InputSpring(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) +static void InputSpring(TransInfo *UNUSED(t), + MouseInput *mi, + const double mval[2], + float output[3]) { - double dx, dy; - float ratio; + double dx, dy; + float ratio; - dx = ((double)mi->center[0] - mval[0]); - dy = ((double)mi->center[1] - mval[1]); - ratio = hypot(dx, dy) / (double)mi->factor; + dx = ((double)mi->center[0] - mval[0]); + dy = ((double)mi->center[1] - mval[1]); + ratio = hypot(dx, dy) / (double)mi->factor; - output[0] = ratio; + output[0] = ratio; } static void InputSpringFlip(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - InputSpring(t, mi, mval, output); - - /* flip scale */ - /* values can become really big when zoomed in so use longs [#26598] */ - if ((int64_t)((int)mi->center[0] - mval[0]) * (int64_t)((int)mi->center[0] - mi->imval[0]) + - (int64_t)((int)mi->center[1] - mval[1]) * (int64_t)((int)mi->center[1] - mi->imval[1]) < 0) - { - output[0] *= -1.0f; - } + InputSpring(t, mi, mval, output); + + /* flip scale */ + /* values can become really big when zoomed in so use longs [#26598] */ + if ((int64_t)((int)mi->center[0] - mval[0]) * (int64_t)((int)mi->center[0] - mi->imval[0]) + + (int64_t)((int)mi->center[1] - mval[1]) * (int64_t)((int)mi->center[1] - mi->imval[1]) < + 0) { + output[0] *= -1.0f; + } } static void InputSpringDelta(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - InputSpring(t, mi, mval, output); - output[0] -= 1.0f; + InputSpring(t, mi, mval, output); + output[0] -= 1.0f; } -static void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) +static void InputTrackBall(TransInfo *UNUSED(t), + MouseInput *mi, + const double mval[2], + float output[3]) { - output[0] = (float)(mi->imval[1] - mval[1]); - output[1] = (float)(mval[0] - mi->imval[0]); + output[0] = (float)(mi->imval[1] - mval[1]); + output[1] = (float)(mval[0] - mi->imval[0]); - output[0] *= mi->factor; - output[1] *= mi->factor; + output[0] *= mi->factor; + output[1] *= mi->factor; } -static void InputHorizontalRatio(TransInfo *t, MouseInput *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 int winx = t->ar ? t->ar->winx : 1; - output[0] = ((mval[0] - mi->imval[0]) / winx) * 2.0f; + output[0] = ((mval[0] - mi->imval[0]) / winx) * 2.0f; } -static void InputHorizontalAbsolute(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) +static void InputHorizontalAbsolute(TransInfo *t, + MouseInput *mi, + const double mval[2], + float output[3]) { - float vec[3]; + float vec[3]; - InputVector(t, mi, mval, vec); - project_v3_v3v3(vec, vec, t->viewinv[0]); + InputVector(t, mi, mval, vec); + project_v3_v3v3(vec, vec, t->viewinv[0]); - output[0] = dot_v3v3(t->viewinv[0], vec) * 2.0f; + output[0] = dot_v3v3(t->viewinv[0], vec) * 2.0f; } static void InputVerticalRatio(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - const int winy = t->ar ? t->ar->winy : 1; + const int winy = t->ar ? t->ar->winy : 1; - output[0] = ((mval[1] - mi->imval[1]) / winy) * 2.0f; + output[0] = ((mval[1] - mi->imval[1]) / winy) * 2.0f; } -static void InputVerticalAbsolute(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) +static void InputVerticalAbsolute(TransInfo *t, + MouseInput *mi, + const double mval[2], + float output[3]) { - float vec[3]; + float vec[3]; - InputVector(t, mi, mval, vec); - project_v3_v3v3(vec, vec, t->viewinv[1]); + InputVector(t, mi, mval, vec); + project_v3_v3v3(vec, vec, t->viewinv[1]); - output[0] = dot_v3v3(t->viewinv[1], vec) * 2.0f; + output[0] = dot_v3v3(t->viewinv[1], vec) * 2.0f; } -void setCustomPoints(TransInfo *UNUSED(t), MouseInput *mi, const int mval_start[2], const int mval_end[2]) +void setCustomPoints(TransInfo *UNUSED(t), + MouseInput *mi, + const int mval_start[2], + const int mval_end[2]) { - int *data; + int *data; - mi->data = MEM_reallocN(mi->data, sizeof(int) * 4); + mi->data = MEM_reallocN(mi->data, sizeof(int) * 4); - data = mi->data; + data = mi->data; - data[0] = mval_start[0]; - data[1] = mval_start[1]; - data[2] = mval_end[0]; - data[3] = mval_end[1]; + data[0] = mval_start[0]; + data[1] = mval_start[1]; + data[2] = mval_end[0]; + data[3] = mval_end[1]; } void setCustomPointsFromDirection(TransInfo *t, MouseInput *mi, const float dir[2]) { - BLI_ASSERT_UNIT_V2(dir); - const int win_axis = t->ar ? ((abs((int)(t->ar->winx * dir[0])) + abs((int)(t->ar->winy * dir[1]))) / 2) : 1; - const int mval_start[2] = { - mi->imval[0] + dir[0] * win_axis, - mi->imval[1] + dir[1] * win_axis, - }; - const int mval_end[2] = {mi->imval[0], mi->imval[1]}; - setCustomPoints(t, mi, mval_start, mval_end); + BLI_ASSERT_UNIT_V2(dir); + const int win_axis = t->ar ? + ((abs((int)(t->ar->winx * dir[0])) + abs((int)(t->ar->winy * dir[1]))) / + 2) : + 1; + const int mval_start[2] = { + mi->imval[0] + dir[0] * win_axis, + mi->imval[1] + dir[1] * win_axis, + }; + const int mval_end[2] = {mi->imval[0], mi->imval[1]}; + setCustomPoints(t, mi, mval_start, mval_end); } -static void InputCustomRatioFlip(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) +static void InputCustomRatioFlip(TransInfo *UNUSED(t), + MouseInput *mi, + const double mval[2], + float output[3]) { - double length; - double distance; - double dx, dy; - const int *data = mi->data; + double length; + double distance; + double dx, dy; + const int *data = mi->data; - if (data) { - int mdx, mdy; - dx = data[2] - data[0]; - dy = data[3] - data[1]; + if (data) { + int mdx, mdy; + dx = data[2] - data[0]; + dy = data[3] - data[1]; - length = hypot(dx, dy); + length = hypot(dx, dy); - mdx = mval[0] - data[2]; - mdy = mval[1] - data[3]; + mdx = mval[0] - data[2]; + mdy = mval[1] - data[3]; - distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length : 0.0; + distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length : 0.0; - output[0] = (length != 0.0) ? (double)(distance / length) : 0.0; - } + output[0] = (length != 0.0) ? (double)(distance / length) : 0.0; + } } static void InputCustomRatio(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - InputCustomRatioFlip(t, mi, mval, output); - output[0] = -output[0]; + InputCustomRatioFlip(t, mi, mval, output); + output[0] = -output[0]; } struct InputAngle_Data { - double angle; - double mval_prev[2]; + double angle; + double mval_prev[2]; }; static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) { - struct InputAngle_Data *data = mi->data; - double dx2 = mval[0] - (double)mi->center[0]; - double dy2 = mval[1] - (double)mi->center[1]; - double B = sqrt(dx2 * dx2 + dy2 * dy2); + struct InputAngle_Data *data = mi->data; + double dx2 = mval[0] - (double)mi->center[0]; + double dy2 = mval[1] - (double)mi->center[1]; + double B = sqrt(dx2 * dx2 + dy2 * dy2); - double dx1 = data->mval_prev[0] - (double)mi->center[0]; - double dy1 = data->mval_prev[1] - (double)mi->center[1]; - double A = sqrt(dx1 * dx1 + dy1 * dy1); + double dx1 = data->mval_prev[0] - (double)mi->center[0]; + double dy1 = data->mval_prev[1] - (double)mi->center[1]; + double A = sqrt(dx1 * dx1 + dy1 * dy1); - double dx3 = mval[0] - data->mval_prev[0]; - double dy3 = mval[1] - data->mval_prev[1]; + double dx3 = mval[0] - data->mval_prev[0]; + double dy3 = mval[1] - data->mval_prev[1]; - /* use doubles here, to make sure a "1.0" (no rotation) - * doesn't become 9.999999e-01, which gives 0.02 for acos */ - double deler = (((dx1 * dx1 + dy1 * dy1) + - (dx2 * dx2 + dy2 * dy2) - - (dx3 * dx3 + dy3 * dy3)) / (2.0 * (((A * B) != 0.0) ? (A * B) : 1.0))); - /* ((A * B) ? (A * B) : 1.0) this takes care of potential divide by zero errors */ + /* use doubles here, to make sure a "1.0" (no rotation) + * doesn't become 9.999999e-01, which gives 0.02 for acos */ + double deler = (((dx1 * dx1 + dy1 * dy1) + (dx2 * dx2 + dy2 * dy2) - (dx3 * dx3 + dy3 * dy3)) / + (2.0 * (((A * B) != 0.0) ? (A * B) : 1.0))); + /* ((A * B) ? (A * B) : 1.0) this takes care of potential divide by zero errors */ - float dphi; + float dphi; - dphi = saacos((float)deler); - if ((dx1 * dy2 - dx2 * dy1) > 0.0) dphi = -dphi; + dphi = saacos((float)deler); + if ((dx1 * dy2 - dx2 * dy1) > 0.0) + dphi = -dphi; - /* If the angle is zero, because of lack of precision close to the 1.0 value in acos - * approximate the angle with the opposite side of the normalized triangle - * This is a good approximation here since the smallest acos value seems to be around - * 0.02 degree and lower values don't even have a 0.01% error compared to the approximation - */ - if (dphi == 0) { - double dx, dy; + /* If the angle is zero, because of lack of precision close to the 1.0 value in acos + * approximate the angle with the opposite side of the normalized triangle + * This is a good approximation here since the smallest acos value seems to be around + * 0.02 degree and lower values don't even have a 0.01% error compared to the approximation + */ + if (dphi == 0) { + double dx, dy; - dx2 /= A; - dy2 /= A; + dx2 /= A; + dy2 /= A; - dx1 /= B; - dy1 /= B; + dx1 /= B; + dy1 /= B; - dx = dx1 - dx2; - dy = dy1 - dy2; + dx = dx1 - dx2; + dy = dy1 - dy2; - dphi = sqrt(dx * dx + dy * dy); - if ((dx1 * dy2 - dx2 * dy1) > 0.0) dphi = -dphi; - } + dphi = sqrt(dx * dx + dy * dy); + if ((dx1 * dy2 - dx2 * dy1) > 0.0) + dphi = -dphi; + } - data->angle += ((double)dphi) * (mi->precision ? (double)mi->precision_factor : 1.0); + data->angle += ((double)dphi) * (mi->precision ? (double)mi->precision_factor : 1.0); - data->mval_prev[0] = mval[0]; - data->mval_prev[1] = mval[1]; + data->mval_prev[0] = mval[0]; + data->mval_prev[1] = mval[1]; - output[0] = data->angle; + output[0] = data->angle; } static void InputAngleSpring(TransInfo *t, MouseInput *mi, const double mval[2], float output[3]) { - float toutput[3]; + float toutput[3]; - InputAngle(t, mi, mval, output); - InputSpring(t, mi, mval, toutput); + InputAngle(t, mi, mval, output); + InputSpring(t, mi, mval, toutput); - output[1] = toutput[0]; + output[1] = toutput[0]; } -void initMouseInput(TransInfo *UNUSED(t), MouseInput *mi, const float center[2], const int mval[2], const bool precision) +void initMouseInput(TransInfo *UNUSED(t), + MouseInput *mi, + const float center[2], + const int mval[2], + const bool precision) { - mi->factor = 0; - mi->precision = precision; + mi->factor = 0; + mi->precision = precision; - mi->center[0] = center[0]; - mi->center[1] = center[1]; + mi->center[0] = center[0]; + mi->center[1] = center[1]; - mi->imval[0] = mval[0]; - mi->imval[1] = mval[1]; + mi->imval[0] = mval[0]; + mi->imval[1] = mval[1]; - mi->post = NULL; + mi->post = NULL; } static void calcSpringFactor(MouseInput *mi) { - mi->factor = sqrtf(((float)(mi->center[1] - mi->imval[1])) * ((float)(mi->center[1] - mi->imval[1])) + - ((float)(mi->center[0] - mi->imval[0])) * ((float)(mi->center[0] - mi->imval[0]))); + mi->factor = sqrtf( + ((float)(mi->center[1] - mi->imval[1])) * ((float)(mi->center[1] - mi->imval[1])) + + ((float)(mi->center[0] - mi->imval[0])) * ((float)(mi->center[0] - mi->imval[0]))); - if (mi->factor == 0.0f) { - mi->factor = 1.0f; /* prevent Inf */ - } + if (mi->factor == 0.0f) { + mi->factor = 1.0f; /* prevent Inf */ + } } void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) { - /* incase we allocate a new value */ - void *mi_data_prev = mi->data; - - mi->use_virtual_mval = true; - mi->precision_factor = 1.0f / 10.0f; - - switch (mode) { - case INPUT_VECTOR: - mi->apply = InputVector; - t->helpline = HLP_NONE; - break; - case INPUT_SPRING: - calcSpringFactor(mi); - mi->apply = InputSpring; - t->helpline = HLP_SPRING; - break; - case INPUT_SPRING_FLIP: - calcSpringFactor(mi); - mi->apply = InputSpringFlip; - t->helpline = HLP_SPRING; - break; - case INPUT_SPRING_DELTA: - calcSpringFactor(mi); - mi->apply = InputSpringDelta; - t->helpline = HLP_SPRING; - break; - case INPUT_ANGLE: - case INPUT_ANGLE_SPRING: - { - struct InputAngle_Data *data; - mi->use_virtual_mval = false; - mi->precision_factor = 1.0f / 30.0f; - data = MEM_callocN(sizeof(struct InputAngle_Data), "angle accumulator"); - data->mval_prev[0] = mi->imval[0]; - data->mval_prev[1] = mi->imval[1]; - mi->data = data; - if (mode == INPUT_ANGLE) { - mi->apply = InputAngle; - } - else { - calcSpringFactor(mi); - mi->apply = InputAngleSpring; - } - t->helpline = HLP_ANGLE; - break; - } - case INPUT_TRACKBALL: - mi->precision_factor = 1.0f / 30.0f; - /* factor has to become setting or so */ - mi->factor = 0.01f; - mi->apply = InputTrackBall; - t->helpline = HLP_TRACKBALL; - break; - case INPUT_HORIZONTAL_RATIO: - mi->apply = InputHorizontalRatio; - t->helpline = HLP_HARROW; - break; - case INPUT_HORIZONTAL_ABSOLUTE: - mi->apply = InputHorizontalAbsolute; - t->helpline = HLP_HARROW; - break; - case INPUT_VERTICAL_RATIO: - mi->apply = InputVerticalRatio; - t->helpline = HLP_VARROW; - break; - case INPUT_VERTICAL_ABSOLUTE: - mi->apply = InputVerticalAbsolute; - t->helpline = HLP_VARROW; - break; - case INPUT_CUSTOM_RATIO: - mi->apply = InputCustomRatio; - t->helpline = HLP_CARROW; - break; - case INPUT_CUSTOM_RATIO_FLIP: - mi->apply = InputCustomRatioFlip; - t->helpline = HLP_CARROW; - break; - case INPUT_NONE: - default: - mi->apply = NULL; - break; - } - - /* setup for the mouse cursor: either set a custom one, - * or hide it if it will be drawn with the helpline */ - wmWindow *win = CTX_wm_window(t->context); - switch (t->helpline) { - case HLP_NONE: - /* INPUT_VECTOR, INPUT_CUSTOM_RATIO, INPUT_CUSTOM_RATIO_FLIP */ - if (t->flag & T_MODAL) { - t->flag |= T_MODAL_CURSOR_SET; - WM_cursor_modal_set(win, BC_NSEW_SCROLLCURSOR); - } - break; - case HLP_SPRING: - case HLP_ANGLE: - case HLP_TRACKBALL: - case HLP_HARROW: - case HLP_VARROW: - case HLP_CARROW: - if (t->flag & T_MODAL) { - t->flag |= T_MODAL_CURSOR_SET; - WM_cursor_modal_set(win, CURSOR_NONE); - } - break; - default: - break; - } - - /* if we've allocated new data, free the old data - * less hassle then checking before every alloc above */ - if (mi_data_prev && (mi_data_prev != mi->data)) { - MEM_freeN(mi_data_prev); - } + /* incase we allocate a new value */ + void *mi_data_prev = mi->data; + + mi->use_virtual_mval = true; + mi->precision_factor = 1.0f / 10.0f; + + switch (mode) { + case INPUT_VECTOR: + mi->apply = InputVector; + t->helpline = HLP_NONE; + break; + case INPUT_SPRING: + calcSpringFactor(mi); + mi->apply = InputSpring; + t->helpline = HLP_SPRING; + break; + case INPUT_SPRING_FLIP: + calcSpringFactor(mi); + mi->apply = InputSpringFlip; + t->helpline = HLP_SPRING; + break; + case INPUT_SPRING_DELTA: + calcSpringFactor(mi); + mi->apply = InputSpringDelta; + t->helpline = HLP_SPRING; + break; + case INPUT_ANGLE: + case INPUT_ANGLE_SPRING: { + struct InputAngle_Data *data; + mi->use_virtual_mval = false; + mi->precision_factor = 1.0f / 30.0f; + data = MEM_callocN(sizeof(struct InputAngle_Data), "angle accumulator"); + data->mval_prev[0] = mi->imval[0]; + data->mval_prev[1] = mi->imval[1]; + mi->data = data; + if (mode == INPUT_ANGLE) { + mi->apply = InputAngle; + } + else { + calcSpringFactor(mi); + mi->apply = InputAngleSpring; + } + t->helpline = HLP_ANGLE; + break; + } + case INPUT_TRACKBALL: + mi->precision_factor = 1.0f / 30.0f; + /* factor has to become setting or so */ + mi->factor = 0.01f; + mi->apply = InputTrackBall; + t->helpline = HLP_TRACKBALL; + break; + case INPUT_HORIZONTAL_RATIO: + mi->apply = InputHorizontalRatio; + t->helpline = HLP_HARROW; + break; + case INPUT_HORIZONTAL_ABSOLUTE: + mi->apply = InputHorizontalAbsolute; + t->helpline = HLP_HARROW; + break; + case INPUT_VERTICAL_RATIO: + mi->apply = InputVerticalRatio; + t->helpline = HLP_VARROW; + break; + case INPUT_VERTICAL_ABSOLUTE: + mi->apply = InputVerticalAbsolute; + t->helpline = HLP_VARROW; + break; + case INPUT_CUSTOM_RATIO: + mi->apply = InputCustomRatio; + t->helpline = HLP_CARROW; + break; + case INPUT_CUSTOM_RATIO_FLIP: + mi->apply = InputCustomRatioFlip; + t->helpline = HLP_CARROW; + break; + case INPUT_NONE: + default: + mi->apply = NULL; + break; + } + + /* setup for the mouse cursor: either set a custom one, + * or hide it if it will be drawn with the helpline */ + wmWindow *win = CTX_wm_window(t->context); + switch (t->helpline) { + case HLP_NONE: + /* INPUT_VECTOR, INPUT_CUSTOM_RATIO, INPUT_CUSTOM_RATIO_FLIP */ + if (t->flag & T_MODAL) { + t->flag |= T_MODAL_CURSOR_SET; + WM_cursor_modal_set(win, BC_NSEW_SCROLLCURSOR); + } + break; + case HLP_SPRING: + case HLP_ANGLE: + case HLP_TRACKBALL: + case HLP_HARROW: + case HLP_VARROW: + case HLP_CARROW: + if (t->flag & T_MODAL) { + t->flag |= T_MODAL_CURSOR_SET; + WM_cursor_modal_set(win, CURSOR_NONE); + } + break; + default: + break; + } + + /* if we've allocated new data, free the old data + * less hassle then checking before every alloc above */ + if (mi_data_prev && (mi_data_prev != mi->data)) { + MEM_freeN(mi_data_prev); + } } void setInputPostFct(MouseInput *mi, void (*post)(struct TransInfo *t, float values[3])) { - mi->post = post; + mi->post = post; } void applyMouseInput(TransInfo *t, MouseInput *mi, const int mval[2], float output[3]) { - double mval_db[2]; - - if (mi->use_virtual_mval) { - /* update accumulator */ - double mval_delta[2]; - - mval_delta[0] = (mval[0] - mi->imval[0]) - mi->virtual_mval.prev[0]; - mval_delta[1] = (mval[1] - mi->imval[1]) - mi->virtual_mval.prev[1]; - - mi->virtual_mval.prev[0] += mval_delta[0]; - mi->virtual_mval.prev[1] += mval_delta[1]; - - if (mi->precision) { - mval_delta[0] *= (double)mi->precision_factor; - mval_delta[1] *= (double)mi->precision_factor; - } - - mi->virtual_mval.accum[0] += mval_delta[0]; - mi->virtual_mval.accum[1] += mval_delta[1]; - - mval_db[0] = mi->imval[0] + mi->virtual_mval.accum[0]; - mval_db[1] = mi->imval[1] + mi->virtual_mval.accum[1]; - } - else { - mval_db[0] = mval[0]; - mval_db[1] = mval[1]; - } - - - if (mi->apply != NULL) { - mi->apply(t, mi, mval_db, output); - } - - if (!is_zero_v3(t->values_modal_offset)) { - float values_ofs[3]; - if (t->con.mode & CON_APPLY) { - mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset); - } - else { - copy_v3_v3(values_ofs, t->values_modal_offset); - } - add_v3_v3(t->values, values_ofs); - } - - if (mi->post) { - mi->post(t, output); - } + double mval_db[2]; + + if (mi->use_virtual_mval) { + /* update accumulator */ + double mval_delta[2]; + + mval_delta[0] = (mval[0] - mi->imval[0]) - mi->virtual_mval.prev[0]; + mval_delta[1] = (mval[1] - mi->imval[1]) - mi->virtual_mval.prev[1]; + + mi->virtual_mval.prev[0] += mval_delta[0]; + mi->virtual_mval.prev[1] += mval_delta[1]; + + if (mi->precision) { + mval_delta[0] *= (double)mi->precision_factor; + mval_delta[1] *= (double)mi->precision_factor; + } + + mi->virtual_mval.accum[0] += mval_delta[0]; + mi->virtual_mval.accum[1] += mval_delta[1]; + + mval_db[0] = mi->imval[0] + mi->virtual_mval.accum[0]; + mval_db[1] = mi->imval[1] + mi->virtual_mval.accum[1]; + } + else { + mval_db[0] = mval[0]; + mval_db[1] = mval[1]; + } + + if (mi->apply != NULL) { + mi->apply(t, mi, mval_db, output); + } + + if (!is_zero_v3(t->values_modal_offset)) { + float values_ofs[3]; + if (t->con.mode & CON_APPLY) { + mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset); + } + else { + copy_v3_v3(values_ofs, t->values_modal_offset); + } + add_v3_v3(t->values, values_ofs); + } + + if (mi->post) { + mi->post(t, output); + } } eRedrawFlag handleMouseInput(TransInfo *t, MouseInput *mi, const wmEvent *event) { - eRedrawFlag redraw = TREDRAW_NOTHING; - - switch (event->type) { - case LEFTSHIFTKEY: - case RIGHTSHIFTKEY: - if (event->val == KM_PRESS) { - t->modifiers |= MOD_PRECISION; - /* shift is modifier for higher precision transforn */ - mi->precision = 1; - redraw = TREDRAW_HARD; - } - else if (event->val == KM_RELEASE) { - t->modifiers &= ~MOD_PRECISION; - mi->precision = 0; - redraw = TREDRAW_HARD; - } - break; - } - - return redraw; + eRedrawFlag redraw = TREDRAW_NOTHING; + + switch (event->type) { + case LEFTSHIFTKEY: + case RIGHTSHIFTKEY: + if (event->val == KM_PRESS) { + t->modifiers |= MOD_PRECISION; + /* shift is modifier for higher precision transforn */ + mi->precision = 1; + redraw = TREDRAW_HARD; + } + else if (event->val == KM_RELEASE) { + t->modifiers &= ~MOD_PRECISION; + mi->precision = 0; + redraw = TREDRAW_HARD; + } + break; + } + + return redraw; } |