From 9cf3d841a823a7b015d4f7be7ee27c9ce88ad6e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix?= Date: Thu, 18 Nov 2021 03:51:36 +0100 Subject: VSE: Add meta.separate() Python API function This function can be used to "dissolve" meta strip anywhere in strip hierarchy. This has same effect as `meta_separate` operator. Reviewed By: ISS Differential Revision: https://developer.blender.org/T91005 --- source/blender/sequencer/intern/strip_edit.c | 46 +++++++++++++++++++++------- 1 file changed, 35 insertions(+), 11 deletions(-) (limited to 'source/blender/sequencer/intern') diff --git a/source/blender/sequencer/intern/strip_edit.c b/source/blender/sequencer/intern/strip_edit.c index 747f0eb3deb..00b3da86306 100644 --- a/source/blender/sequencer/intern/strip_edit.c +++ b/source/blender/sequencer/intern/strip_edit.c @@ -221,6 +221,40 @@ static bool seq_exists_in_seqbase(Sequence *seq, ListBase *seqbase) return false; } +/** + * Move sequence to seqbase. + * + * \param scene: Scene containing the editing + * \param dst_seqbase: seqbase where `seq` is located + * \param seq: Sequence to move + * \param dst_seqbase: Target seqbase + */ +bool SEQ_edit_move_strip_to_seqbase(Scene *scene, + ListBase *seqbase, + Sequence *seq, + ListBase *dst_seqbase) +{ + /* Move to meta. */ + BLI_remlink(seqbase, seq); + BLI_addtail(dst_seqbase, seq); + SEQ_relations_invalidate_cache_preprocessed(scene, seq); + + /* Update meta. */ + if (SEQ_transform_test_overlap(dst_seqbase, seq)) { + SEQ_transform_seqbase_shuffle(dst_seqbase, seq, scene); + } + + return true; +} + +/** + * Move sequence to meta sequence. + * + * \param scene: Scene containing the editing + * \param src_seq: Sequence to move + * \param dst_seqm: Target Meta sequence + * \param error_str: Error message + */ bool SEQ_edit_move_strip_to_meta(Scene *scene, Sequence *src_seq, Sequence *dst_seqm, @@ -262,17 +296,7 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene, Sequence *seq; SEQ_ITERATOR_FOREACH (seq, collection) { /* Move to meta. */ - BLI_remlink(seqbase, seq); - BLI_addtail(&dst_seqm->seqbase, seq); - SEQ_relations_invalidate_cache_preprocessed(scene, seq); - - /* Update meta. */ - ListBase *meta_seqbase = SEQ_get_seqbase_by_seq(&ed->seqbase, dst_seqm); - SEQ_time_update_meta_strip_range(scene, dst_seqm); - SEQ_time_update_sequence(scene, meta_seqbase, dst_seqm); - if (SEQ_transform_test_overlap(&dst_seqm->seqbase, seq)) { - SEQ_transform_seqbase_shuffle(&dst_seqm->seqbase, seq, scene); - } + SEQ_edit_move_strip_to_seqbase(scene, seqbase, seq, &dst_seqm->seqbase); } SEQ_collection_free(collection); -- cgit v1.2.3