Fix T45016, mask animation data lost after layer rename

We need to fix up animation data.
This commit is contained in:
Antonis Ryakiotakis 2015-06-11 19:34:21 +02:00 committed by Sergey Sharybin
parent 184c7a208c
commit 3fad13d564
Notes: blender-bot 2023-10-12 12:49:04 +02:00
Referenced by issue #45016, Renaming a masklayer removes keyframe from opacity
3 changed files with 17 additions and 2 deletions

View File

@ -79,6 +79,7 @@ struct MaskSpline *BKE_mask_spline_copy(struct MaskSpline *spline);
void BKE_mask_point_free(struct MaskSplinePoint *point);
void BKE_mask_layer_unique_name(struct Mask *mask, struct MaskLayer *masklay);
void BKE_mask_layer_rename(struct Mask *mask, struct MaskLayer *masklay, char *oldname, char *newname);
struct MaskLayer *BKE_mask_layer_copy(struct MaskLayer *layer);
void BKE_mask_layer_copy_list(struct ListBase *masklayers_new, struct ListBase *masklayers);

View File

@ -49,6 +49,7 @@
#include "DNA_space_types.h"
#include "DNA_sequence_types.h"
#include "BKE_animsys.h"
#include "BKE_curve.h"
#include "BKE_global.h"
#include "BKE_library.h"
@ -181,6 +182,16 @@ void BKE_mask_layer_unique_name(Mask *mask, MaskLayer *masklay)
sizeof(masklay->name));
}
void BKE_mask_layer_rename(Mask *mask, MaskLayer *masklay, char *oldname, char *newname)
{
BLI_strncpy(masklay->name, newname, sizeof(masklay->name));
BKE_mask_layer_unique_name(mask, masklay);
/* now fix animation paths */
BKE_animdata_fix_paths_rename_all(&mask->id, "layers", oldname, masklay->name);
}
MaskLayer *BKE_mask_layer_copy(MaskLayer *masklay)
{
MaskLayer *masklay_new;

View File

@ -213,10 +213,13 @@ static void rna_MaskLayer_name_set(PointerRNA *ptr, const char *value)
{
Mask *mask = (Mask *)ptr->id.data;
MaskLayer *masklay = (MaskLayer *)ptr->data;
char oldname[sizeof(masklay->name)], newname[sizeof(masklay->name)];
BLI_strncpy(masklay->name, value, sizeof(masklay->name));
/* need to be on the stack */
BLI_strncpy(oldname, masklay->name, sizeof(masklay->name));
BLI_strncpy_utf8(newname, value, sizeof(masklay->name));
BKE_mask_layer_unique_name(mask, masklay);
BKE_mask_layer_rename(mask, masklay, oldname, newname);
}
static PointerRNA rna_MaskLayer_active_spline_get(PointerRNA *ptr)