[Bf-blender-cvs] [2a62a06] master: Mask spline slide: holding Ctrl will make handles free
Sergey Sharybin
noreply at git.blender.org
Fri Apr 4 13:08:56 CEST 2014
Commit: 2a62a06e863270aa5635e4ae72ccd7c06f7fad1a
Author: Sergey Sharybin
Date: Fri Apr 4 17:08:09 2014 +0600
https://developer.blender.org/rB2a62a06e863270aa5635e4ae72ccd7c06f7fad1a
Mask spline slide: holding Ctrl will make handles free
===================================================================
M source/blender/editors/mask/mask_ops.c
===================================================================
diff --git a/source/blender/editors/mask/mask_ops.c b/source/blender/editors/mask/mask_ops.c
index 78878ed..8011b29 100644
--- a/source/blender/editors/mask/mask_ops.c
+++ b/source/blender/editors/mask/mask_ops.c
@@ -1201,20 +1201,48 @@ static void slide_spline_solve_P2(const float u,
static int slide_spline_curvature_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
+ const float margin = 0.2f;
SlideSplineCurvatureData *slide_data = (SlideSplineCurvatureData *) op->customdata;
+ float u = slide_data->u;
switch (event->type) {
case LEFTSHIFTKEY:
case RIGHTSHIFTKEY:
- if (ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY))
+ case LEFTCTRLKEY:
+ case RIGHTCTRLKEY:
+ if (ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY)) {
slide_data->accurate = (event->val == KM_PRESS);
+ }
+
+ if (ELEM(event->type, LEFTCTRLKEY, RIGHTCTRLKEY)) {
+ if (event->val == KM_PRESS) {
+ slide_data->adjust_bezt->h1 = slide_data->adjust_bezt->h2 = HD_FREE;
+ if ((u > margin && u < 0.5f) || (u >= 0.5f && u < 1.0f - margin)) {
+ slide_data->other_bezt->h1 = slide_data->other_bezt->h2 = HD_FREE;
+ }
+ }
+ else if (event->val == KM_RELEASE) {
+ slide_data->adjust_bezt->h1 = slide_data->bezt_backup.h1;
+ slide_data->adjust_bezt->h2 = slide_data->bezt_backup.h2;
+ slide_data->other_bezt->h1 = slide_data->other_bezt_backup.h1;
+ slide_data->other_bezt->h2 = slide_data->other_bezt_backup.h2;
+ }
+
+ if (u < 0.5f) {
+ copy_v2_v2(slide_data->adjust_bezt->vec[0], slide_data->bezt_backup.vec[0]);
+ copy_v2_v2(slide_data->other_bezt->vec[2], slide_data->other_bezt_backup.vec[2]);
+ }
+ else {
+ copy_v2_v2(slide_data->adjust_bezt->vec[2], slide_data->bezt_backup.vec[2]);
+ copy_v2_v2(slide_data->other_bezt->vec[0], slide_data->other_bezt_backup.vec[0]);
+ }
+
+ }
/* fall-through */ /* update CV position */
case MOUSEMOVE:
{
- const float margin = 0.2f;
float B[2], mouse_coord[2], delta[2];
- float u = slide_data->u;
/* Get coordinate spline is expected to go through. */
ED_mask_mouse_pos(CTX_wm_area(C), CTX_wm_region(C), event->mval, mouse_coord);
More information about the Bf-blender-cvs
mailing list