mango request
authorCampbell Barton <ideasman42@gmail.com>
Wed, 13 Jun 2012 08:35:50 +0000 (08:35 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 13 Jun 2012 08:35:50 +0000 (08:35 +0000)
- highlight active mask layers.
- remove keyframes when all layer data is removed.

source/blender/blenkernel/BKE_mask.h
source/blender/blenkernel/intern/mask.c
source/blender/editors/mask/mask_ops.c

index 345a2190e896fc8c57cd3693d04886ecc69ec33e..dd2c7cb3a18f89d02696e046cf1ce1be951660d2 100644 (file)
@@ -48,6 +48,7 @@ struct MaskLayer *BKE_mask_layer_active(struct Mask *mask);
 void BKE_mask_layer_active_set(struct Mask *mask, struct MaskLayer *masklay);
 void BKE_mask_layer_remove(struct Mask *mask, struct MaskLayer *masklay);
 
+void BKE_mask_layer_free_shapes(struct MaskLayer *masklay);
 void BKE_mask_layer_free(struct MaskLayer *masklay);
 void BKE_mask_spline_free(struct MaskSpline *spline);
 struct MaskSpline *BKE_mask_spline_copy(struct MaskSpline *spline);
index a28ff3a175d9f3789a2e63a8e3acfd03e98d03b5..012ce97b4d75fa380e1d37e26d05486889108854 100644 (file)
@@ -1029,10 +1029,27 @@ void BKE_mask_layer_shape_free(MaskLayerShape *masklay_shape)
        MEM_freeN(masklay_shape);
 }
 
+/** \brief Free all animation keys for a mask layer
+ */
+void BKE_mask_layer_free_shapes(MaskLayer *masklay)
+{
+       MaskLayerShape *masklay_shape;
+
+       /* free animation data */
+       masklay_shape = masklay->splines_shapes.first;
+       while (masklay_shape) {
+               MaskLayerShape *next_masklay_shape = masklay_shape->next;
+
+               BLI_remlink(&masklay->splines_shapes, masklay_shape);
+               BKE_mask_layer_shape_free(masklay_shape);
+
+               masklay_shape = next_masklay_shape;
+       }
+}
+
 void BKE_mask_layer_free(MaskLayer *masklay)
 {
        MaskSpline *spline;
-       MaskLayerShape *masklay_shape;
 
        /* free splines */
        spline = masklay->splines.first;
@@ -1046,15 +1063,7 @@ void BKE_mask_layer_free(MaskLayer *masklay)
        }
 
        /* free animation data */
-       masklay_shape = masklay->splines_shapes.first;
-       while (masklay_shape) {
-               MaskLayerShape *next_masklay_shape = masklay_shape->next;
-
-               BLI_remlink(&masklay->splines_shapes, masklay_shape);
-               BKE_mask_layer_shape_free(masklay_shape);
-
-               masklay_shape = next_masklay_shape;
-       }
+       BKE_mask_layer_free_shapes(masklay);
 
        MEM_freeN(masklay);
 }
index 7c94b79010c4d48947a6f386e5f69d8354a180b9..315e40380f986c4148f874513a8bf9a927abe489 100644 (file)
@@ -957,6 +957,12 @@ static int delete_exec(bContext *C, wmOperator *UNUSED(op))
 
                        spline = next_spline;
                }
+
+               /* not essential but confuses users when there are keys with no data!
+                * assume if they delete all data from the layer they also dont care about keys */
+               if (masklay->splines.first == NULL) {
+                       BKE_mask_layer_free_shapes(masklay);
+               }
        }
 
        /* TODO: only update edited splines */