void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) { 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_ANGLE: mi->data = MEM_callocN(sizeof(double), "angle accumulator"); mi->apply = InputAngle; t->helpline = HLP_ANGLE; break; case INPUT_TRACKBALL: /* factor has to become setting or so */ mi->factor = 0.01f; mi->apply = InputTrackBall; 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; 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_NONE; break; case INPUT_NONE: default: mi->apply = NULL; break; } /* bootstrap mouse input with initial values */ applyMouseInput(t, mi, mi->imval, t->values); }
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->factor = (float)(mi->center[0] - mi->imval[0]); 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_NONE; break; case INPUT_CUSTOM_RATIO_FLIP: mi->apply = InputCustomRatioFlip; t->helpline = HLP_NONE; break; case INPUT_NONE: default: mi->apply = NULL; 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); } /* bootstrap mouse input with initial values */ applyMouseInput(t, mi, mi->imval, t->values); }
void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) { /* may have been allocated previously */ /* TODO, holding R-key can cause mem leak, but this causes [#28903] * disable for now. */ #if 0 if (mi->data) { MEM_freeN(mi->data); mi->data = NULL; } #endif 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_ANGLE: mi->data = MEM_callocN(sizeof(double), "angle accumulator"); mi->apply = InputAngle; t->helpline = HLP_ANGLE; break; case INPUT_TRACKBALL: /* factor has to become setting or so */ mi->factor = 0.01f; mi->apply = InputTrackBall; 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; 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_NONE; break; case INPUT_NONE: default: mi->apply = NULL; break; } /* bootstrap mouse input with initial values */ applyMouseInput(t, mi, mi->imval, t->values); }