diff options
author | Richard Antalik <richardantalik@gmail.com> | 2022-01-19 16:15:49 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2022-01-19 16:15:49 +0300 |
commit | eddad4e9a1ac5c81c2d2012b4a68a5a574bde5e3 (patch) | |
tree | 8559ad9c0a43f33a67d5d5469421bdd5d453da86 /source/blender/sequencer | |
parent | e49bf4019b498be42b9a39657604ad750a99bbea (diff) |
VSE: Support copy-pasting strips with animation
When copying strips between 2 scenes, it wasn't possible to copy
animation curves along with strips.
In this patch curves are copied into clipboard `ListBase`. When pasted,
original curves are moved into temporary `ListBase` and curves in
clipboard are moved into scene action. This is because when strips from
clipboard have to be renamed, function `SEQ_ensure_unique_name()` does
fix RNA paths of curves, but this is done globally for all curves within
action. After strips are renamed, restore original curves from backup.
Note: This patch handles only fcurves. Drivers and actions are currently
not handled anywhere in VSE.
Fixes T77530
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D13845
Diffstat (limited to 'source/blender/sequencer')
-rw-r--r-- | source/blender/sequencer/SEQ_clipboard.h | 1 | ||||
-rw-r--r-- | source/blender/sequencer/intern/clipboard.c | 13 |
2 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/sequencer/SEQ_clipboard.h b/source/blender/sequencer/SEQ_clipboard.h index 72388c5db64..dc78f8cc1a2 100644 --- a/source/blender/sequencer/SEQ_clipboard.h +++ b/source/blender/sequencer/SEQ_clipboard.h @@ -33,6 +33,7 @@ struct Scene; struct Sequence; extern struct ListBase seqbase_clipboard; +extern struct ListBase fcurves_clipboard; extern int seqbase_clipboard_frame; void SEQ_clipboard_pointers_store(struct Main *bmain, struct ListBase *seqbase); void SEQ_clipboard_pointers_restore(struct ListBase *seqbase, struct Main *bmain); diff --git a/source/blender/sequencer/intern/clipboard.c b/source/blender/sequencer/intern/clipboard.c index f4c7077d4c6..886ee89595b 100644 --- a/source/blender/sequencer/intern/clipboard.c +++ b/source/blender/sequencer/intern/clipboard.c @@ -28,6 +28,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_anim_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" #include "DNA_sound_types.h" @@ -35,6 +36,7 @@ #include "BLI_listbase.h" #include "BLI_string.h" +#include "BKE_fcurve.h" #include "BKE_main.h" #include "BKE_movieclip.h" #include "BKE_scene.h" @@ -58,6 +60,7 @@ */ ListBase seqbase_clipboard; +ListBase fcurves_clipboard; int seqbase_clipboard_frame; static char seq_clipboard_active_seq_name[SEQ_NAME_MAXSTR]; @@ -65,15 +68,17 @@ void seq_clipboard_pointers_free(struct ListBase *seqbase); void SEQ_clipboard_free(void) { - Sequence *seq, *nseq; - seq_clipboard_pointers_free(&seqbase_clipboard); - for (seq = seqbase_clipboard.first; seq; seq = nseq) { - nseq = seq->next; + LISTBASE_FOREACH_MUTABLE (Sequence *, seq, &seqbase_clipboard) { seq_free_sequence_recurse(NULL, seq, false); } BLI_listbase_clear(&seqbase_clipboard); + + LISTBASE_FOREACH_MUTABLE (FCurve *, fcu, &fcurves_clipboard) { + BKE_fcurve_free(fcu); + } + BLI_listbase_clear(&fcurves_clipboard); } #define ID_PT (*id_pt) |