copy support for mask datablocks
authorCampbell Barton <ideasman42@gmail.com>
Fri, 27 Jul 2012 08:18:11 +0000 (08:18 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 27 Jul 2012 08:18:11 +0000 (08:18 +0000)
source/blender/blenkernel/BKE_mask.h
source/blender/blenkernel/intern/library.c
source/blender/blenkernel/intern/mask.c

index 98cab2e4062e78237962fa85b71974e65c095108..76b6d25ceedd01ad30aee0cf1be8b1bce57655ee 100644 (file)
@@ -122,6 +122,8 @@ void BKE_mask_point_select_set_handle(struct MaskSplinePoint *point, const short
 
 /* general */
 struct Mask *BKE_mask_new(const char *name);
+struct Mask *BKE_mask_copy_nolib(struct Mask *mask);
+struct Mask *BKE_mask_copy(struct Mask *mask);
 
 void BKE_mask_free(struct Mask *mask);
 void BKE_mask_unlink(struct Main *bmain, struct Mask *mask);
index f3ef01425dd5e741065bc215a19233641ac09ad7..98133b936d504f79f95fba2ecbfaa34f0de9edba 100644 (file)
@@ -360,6 +360,8 @@ int id_copy(ID *id, ID **newid, int test)
                        return 0; /* can't be copied from here */
                case ID_GD:
                        return 0; /* not implemented */
+               case ID_MSK:
+                       if (!test) *newid = (ID *)BKE_mask_copy((Mask *)id);
        }
        
        return 0;
index d963d46569a6f7fad97faee59777128eac5020cf..801c431265a196ce08695b77807830a26059a02d 100644 (file)
@@ -1330,6 +1330,49 @@ Mask *BKE_mask_new(const char *name)
        return mask;
 }
 
+Mask *BKE_mask_copy_nolib(Mask *mask)
+{
+       Mask *mask_new;
+
+       mask_new = MEM_dupallocN(mask);
+
+       /*take care here! - we may want to copy anim data  */
+       mask_new->adt = NULL;
+
+       mask_new->masklayers.first = NULL;
+       mask_new->masklayers.last = NULL;
+
+       BKE_mask_layer_copy_list(&mask_new->masklayers, &mask->masklayers);
+
+       /* enable fake user by default */
+       if (!(mask_new->id.flag & LIB_FAKEUSER)) {
+               mask_new->id.flag |= LIB_FAKEUSER;
+               mask_new->id.us++;
+       }
+
+       return mask_new;
+}
+
+Mask *BKE_mask_copy(Mask *mask)
+{
+       Mask *mask_new;
+
+       mask_new = BKE_libblock_copy(&mask->id);
+
+       mask_new->masklayers.first = NULL;
+       mask_new->masklayers.last = NULL;
+
+       BKE_mask_layer_copy_list(&mask_new->masklayers, &mask->masklayers);
+
+       /* enable fake user by default */
+       if (!(mask_new->id.flag & LIB_FAKEUSER)) {
+               mask_new->id.flag |= LIB_FAKEUSER;
+               mask_new->id.us++;
+       }
+
+       return mask_new;
+}
+
 void BKE_mask_point_free(MaskSplinePoint *point)
 {
        if (point->uw)