Example #1
0
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);
}
Example #2
0
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);
}