copy support for mask datablocks

This commit is contained in:
Campbell Barton 2012-07-27 08:18:11 +00:00
parent 61469d2e3e
commit c42b23030b
3 changed files with 47 additions and 0 deletions

View 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);

View 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;

View 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)