impliment restrict select option.
authorCampbell Barton <ideasman42@gmail.com>
Wed, 30 May 2012 12:54:50 +0000 (12:54 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 30 May 2012 12:54:50 +0000 (12:54 +0000)
source/blender/editors/interface/interface_templates.c
source/blender/editors/mask/mask_draw.c
source/blender/editors/mask/mask_ops.c
source/blender/editors/mask/mask_relationships.c
source/blender/editors/mask/mask_select.c
source/blender/editors/mask/mask_shapekey.c
source/blender/editors/transform/transform_conversions.c

index 54b87fd45095af837e04593c740b41a2f6166d24..1acfefe8a4c4fd43718c44658037700847fbfbcf 100644 (file)
@@ -2242,14 +2242,15 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
                }
        }
        else if (itemptr->type == &RNA_MaskObject) {
-               split = uiLayoutSplit(sub, 0.5f, 0);
+               split = uiLayoutSplit(sub, 0.66f, 0);
 
                uiItemL(split, name, icon);
 
                uiBlockSetEmboss(block, UI_EMBOSSN);
                row = uiLayoutRow(split, 1);
-               uiItemR(row, itemptr, "alpha", 0, "", ICON_NONE);
+               // uiItemR(row, itemptr, "alpha", 0, "", ICON_NONE); // enable when used
                uiItemR(row, itemptr, "hide", 0, "", 0);
+               uiItemR(row, itemptr, "hide_select", 0, "", 0);
 
                uiBlockSetEmboss(block, UI_EMBOSS);
        }
index 0cf2cb77177c07339268c133154d86f018052341..ef1dee3f2fe62e193c5390b1a431892fc6d8421b 100644 (file)
@@ -51,7 +51,7 @@
 
 static void set_spline_color(MaskObject *maskobj, MaskSpline *spline)
 {
-       if (spline->flag & SELECT) {
+       if ((spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0) {
                if (maskobj->act_spline == spline)
                        glColor3f(1.0f, 1.0f, 1.0f);
                else
@@ -246,7 +246,7 @@ static void draw_spline_curve(MaskObject *maskobj, MaskSpline *spline)
        feather_points = BKE_mask_spline_feather_differentiated_points(spline, &tot_feather_point);
 
        /* draw feather */
-       if (spline->flag & SELECT)
+       if ((spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0)
                glColor3f(0.0f, 1.0f, 0.0f);
        else
                glColor3f(0.0f, 0.5f, 0.0f);
@@ -278,8 +278,10 @@ static void draw_maskobjs(Mask *mask)
 
 //                     draw_spline_parents(maskobj, spline);
 
-                       /* ...and then handles over the curve so they're nicely visible */
-                       draw_spline_points(maskobj, spline);
+                       if (!(maskobj->restrictflag & MASK_RESTRICT_SELECT)) {
+                               /* ...and then handles over the curve so they're nicely visible */
+                               draw_spline_points(maskobj, spline);
+                       }
 
                        /* show undeform for testing */
                        if (0) {
index c5371e7760a9b340099077f4ccd5ddc9a6ed776b..a2e634bdebad9de717b255ebe4d9150fefac56ff 100644 (file)
@@ -143,7 +143,7 @@ MaskSplinePoint *ED_mask_point_find_nearest(bContext *C, Mask *mask, float norma
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -245,7 +245,7 @@ int ED_mask_feather_find_nearest(bContext *C, Mask *mask, float normal_co[2], in
                        int i, tot_feather_point;
                        float *feather_points, *fp;
 
-                       if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+                       if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                                continue;
                        }
 
@@ -336,7 +336,7 @@ static int find_nearest_diff_point(bContext *C, Mask *mask, const float normal_c
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -1060,9 +1060,8 @@ static void finSelectedSplinePoint(MaskObject *maskobj, MaskSpline **spline, Mas
        }
 }
 
-static int add_vertex_extrude(bContext *C, Mask *mask, const float co[2])
+static int add_vertex_extrude(bContext *C, Mask *mask, MaskObject *maskobj, const float co[2])
 {
-       MaskObject *maskobj;
        MaskSpline *spline;
        MaskSplinePoint *point;
        MaskSplinePoint *new_point = NULL, *ref_point = NULL;
@@ -1077,8 +1076,6 @@ static int add_vertex_extrude(bContext *C, Mask *mask, const float co[2])
 
        ED_mask_select_toggle_all(mask, SEL_DESELECT);
 
-       maskobj = BKE_mask_object_active(mask);
-
        if (!maskobj) {
                return FALSE;
        }
@@ -1163,17 +1160,14 @@ static int add_vertex_extrude(bContext *C, Mask *mask, const float co[2])
        return TRUE;
 }
 
-static int add_vertex_new(bContext *C, Mask *mask, const float co[2])
+static int add_vertex_new(bContext *C, Mask *mask, MaskObject *maskobj, const float co[2])
 {
-       MaskObject *maskobj;
        MaskSpline *spline;
        MaskSplinePoint *point;
        MaskSplinePoint *new_point = NULL, *ref_point = NULL;
 
        ED_mask_select_toggle_all(mask, SEL_DESELECT);
 
-       maskobj = BKE_mask_object_active(mask);
-
        if (!maskobj) {
                /* if there's no maskobj currently operationg on, create new one */
                maskobj = BKE_mask_object_new(mask, "");
@@ -1216,7 +1210,7 @@ static int add_vertex_exec(bContext *C, wmOperator *op)
 
        maskobj = BKE_mask_object_active(mask);
 
-       if (maskobj && maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+       if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                maskobj = NULL;
        }
 
@@ -1255,14 +1249,14 @@ static int add_vertex_exec(bContext *C, wmOperator *op)
                }
 
                if (!add_vertex_subdivide(C, mask, co)) {
-                       if (!add_vertex_extrude(C, mask, co)) {
+                       if (!add_vertex_extrude(C, mask, maskobj, co)) {
                                return OPERATOR_CANCELLED;
                        }
                }
        }
        else {
                if (!add_vertex_subdivide(C, mask, co)) {
-                       if (!add_vertex_new(C, mask, co)) {
+                       if (!add_vertex_new(C, mask, maskobj, co)) {
                                return OPERATOR_CANCELLED;
                        }
                }
@@ -1376,7 +1370,7 @@ static int cyclic_toggle_exec(bContext *C, wmOperator *UNUSED(op))
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -1454,7 +1448,7 @@ static int delete_exec(bContext *C, wmOperator *UNUSED(op))
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -1563,7 +1557,7 @@ static int set_handle_type_exec(bContext *C, wmOperator *op)
                MaskSpline *spline;
                int i;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -1664,6 +1658,11 @@ static int mask_hide_view_set_exec(bContext *C, wmOperator *op)
        int changed = FALSE;
 
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
+
+               if (maskobj->restrictflag & MASK_RESTRICT_SELECT) {
+                       continue;
+               }
+
                if (!unselected) {
                        if (ED_mask_object_select_check(maskobj)) {
                                ED_mask_object_select_set(maskobj, FALSE);
index 65c3980e3eaa1ce635342bf9d972f1d6b88c8461..c799ca1e071a0f0ca7b7ce35cc74e57da73c90ae 100644 (file)
@@ -66,7 +66,7 @@ static int mask_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
                MaskSpline *spline;
                int i;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -136,7 +136,7 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
                MaskSpline *spline;
                int i;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
index 4f0b33294d3764eead73de913d8b062b1296ad77..05dad9f380fb514d03d0776f8e8a5b2b1e9cc53d 100644 (file)
@@ -75,6 +75,10 @@ int ED_mask_object_select_check(MaskObject *maskobj)
 {
        MaskSpline *spline;
 
+       if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
+               return FALSE;
+       }
+
        for (spline = maskobj->splines.first; spline; spline = spline->next) {
                if (ED_mask_spline_select_check(spline->points, spline->tot_point)) {
                        return TRUE;
@@ -101,6 +105,12 @@ void ED_mask_object_select_set(MaskObject *maskobj, int select)
 {
        MaskSpline *spline;
 
+       if (maskobj->restrictflag & MASK_RESTRICT_SELECT) {
+               if (select == TRUE) {
+                       return;
+               }
+       }
+
        for (spline = maskobj->splines.first; spline; spline = spline->next) {
                int i;
 
@@ -375,7 +385,7 @@ static int border_select_exec(bContext *C, wmOperator *op)
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -447,7 +457,7 @@ static int do_lasso_select_mask(bContext *C, int mcords[][2], short moves, short
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -573,7 +583,7 @@ static int circle_select_exec(bContext *C, wmOperator *op)
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
index 71b10ae0da3d56f9e9803ed22332aa5432105419..cf2fb71920b145671684c9e3b2f5adfeb6deb7eb 100755 (executable)
@@ -67,7 +67,7 @@ static int mask_shape_key_insert_exec(bContext *C, wmOperator *UNUSED(op))
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskObjectShape *maskobj_shape;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -113,7 +113,7 @@ static int mask_shape_key_clear_exec(bContext *C, wmOperator *UNUSED(op))
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskObjectShape *maskobj_shape;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
index d00539ff43ca4164711228b0f72deacc1a6bb7db..8211df67b17ea4ac36da7e45c23a6e35a03c5405 100644 (file)
@@ -5985,7 +5985,7 @@ static void createTransMaskingData(bContext *C, TransInfo *t)
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline = maskobj->splines.first;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }
 
@@ -6024,7 +6024,7 @@ static void createTransMaskingData(bContext *C, TransInfo *t)
        for (maskobj = mask->maskobjs.first; maskobj; maskobj = maskobj->next) {
                MaskSpline *spline = maskobj->splines.first;
 
-               if (maskobj->restrictflag & MASK_RESTRICT_VIEW) {
+               if (maskobj->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
                        continue;
                }