Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2022-01-19 16:15:49 +0300
committerRichard Antalik <richardantalik@gmail.com>2022-01-19 16:15:49 +0300
commiteddad4e9a1ac5c81c2d2012b4a68a5a574bde5e3 (patch)
tree8559ad9c0a43f33a67d5d5469421bdd5d453da86 /source/blender/sequencer
parente49bf4019b498be42b9a39657604ad750a99bbea (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.h1
-rw-r--r--source/blender/sequencer/intern/clipboard.c13
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)