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:
Diffstat (limited to 'source/blender/editors/transform/transform_convert_sequencer.c')
-rw-r--r--source/blender/editors/transform/transform_convert_sequencer.c111
1 files changed, 60 insertions, 51 deletions
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c
index d7d85646b08..c1e8dab3b3e 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -326,13 +326,14 @@ static SeqCollection *query_right_side_strips(ListBase *seqbase, SeqCollection *
return collection;
}
-static void seq_transform_update_effects(TransInfo *t, SeqCollection *collection)
+static void seq_transform_update_effects(Scene *scene,
+ ListBase *seqbasep,
+ SeqCollection *collection)
{
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, collection) {
if ((seq->type & SEQ_TYPE_EFFECT) && (seq->seq1 || seq->seq2 || seq->seq3)) {
- ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(t->scene));
- SEQ_time_update_sequence(t->scene, seqbase, seq);
+ SEQ_time_update_sequence(scene, seqbasep, seq);
}
}
}
@@ -357,12 +358,12 @@ static ListBase *seqbase_active_get(const TransInfo *t)
/* Offset all strips positioned after left edge of transformed strips bound-box by amount equal
* to overlap of transformed strips. */
-static void seq_transform_handle_expand_to_fit(TransInfo *t, SeqCollection *transformed_strips)
+static void seq_transform_handle_expand_to_fit(Scene *scene,
+ ListBase *seqbasep,
+ SeqCollection *transformed_strips,
+ bool use_sync_markers)
{
- ListBase *seqbasep = seqbase_active_get(t);
- ListBase *markers = &t->scene->markers;
- const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag &
- SEQ_MARKER_TRANS) != 0;
+ ListBase *markers = &scene->markers;
SeqCollection *right_side_strips = query_right_side_strips(seqbasep, transformed_strips);
@@ -376,7 +377,7 @@ static void seq_transform_handle_expand_to_fit(TransInfo *t, SeqCollection *tran
* strips on left side. */
SeqCollection *standalone_strips = extract_standalone_strips(transformed_strips);
SEQ_transform_seqbase_shuffle_time(
- standalone_strips, seqbasep, t->scene, markers, use_sync_markers);
+ standalone_strips, seqbasep, scene, markers, use_sync_markers);
SEQ_collection_free(standalone_strips);
/* Move temporarily moved strips back to their original place and tag for shuffling. */
@@ -384,17 +385,17 @@ static void seq_transform_handle_expand_to_fit(TransInfo *t, SeqCollection *tran
seq->machine -= MAXSEQ * 2;
}
/* Shuffle again to displace strips on right side. Final effect shuffling is done in
- * seq_transform_handle_overlap. */
+ * SEQ_transform_handle_overlap. */
SEQ_transform_seqbase_shuffle_time(
- right_side_strips, seqbasep, t->scene, markers, use_sync_markers);
- seq_transform_update_effects(t, right_side_strips);
+ right_side_strips, seqbasep, scene, markers, use_sync_markers);
+ seq_transform_update_effects(scene, seqbasep, right_side_strips);
SEQ_collection_free(right_side_strips);
}
-static SeqCollection *query_overwrite_targets(const TransInfo *t,
+static SeqCollection *query_overwrite_targets(ListBase *seqbasep,
SeqCollection *transformed_strips)
{
- SeqCollection *collection = SEQ_query_unselected_strips(seqbase_active_get(t));
+ SeqCollection *collection = SEQ_query_unselected_strips(seqbasep);
Sequence *seq, *seq_transformed;
SEQ_ITERATOR_FOREACH (seq, collection) {
@@ -449,35 +450,36 @@ static eOvelapDescrition overlap_description_get(const Sequence *transformed,
}
/* Split strip in 3 parts, remove middle part and fit transformed inside. */
-static void seq_transform_handle_overwrite_split(const TransInfo *t,
+static void seq_transform_handle_overwrite_split(Scene *scene,
+ ListBase *seqbasep,
const Sequence *transformed,
Sequence *target)
{
- Main *bmain = CTX_data_main(t->context);
- Scene *scene = t->scene;
- ListBase *seqbase = seqbase_active_get(t);
+ /* Because we are doing a soft split, bmain is not used in SEQ_edit_strip_split, so we can pass
+ * NULL here. */
+ Main *bmain = NULL;
Sequence *split_strip = SEQ_edit_strip_split(
- bmain, scene, seqbase, target, transformed->startdisp, SEQ_SPLIT_SOFT, NULL);
+ bmain, scene, seqbasep, target, transformed->startdisp, SEQ_SPLIT_SOFT, NULL);
SEQ_edit_strip_split(
- bmain, scene, seqbase, split_strip, transformed->enddisp, SEQ_SPLIT_SOFT, NULL);
- SEQ_edit_flag_for_removal(scene, seqbase_active_get(t), split_strip);
- SEQ_edit_remove_flagged_sequences(t->scene, seqbase_active_get(t));
+ bmain, scene, seqbasep, split_strip, transformed->enddisp, SEQ_SPLIT_SOFT, NULL);
+ SEQ_edit_flag_for_removal(scene, seqbasep, split_strip);
+ SEQ_edit_remove_flagged_sequences(scene, seqbasep);
}
/* Trim strips by adjusting handle position.
* This is bit more complicated in case overlap happens on effect. */
-static void seq_transform_handle_overwrite_trim(const TransInfo *t,
+static void seq_transform_handle_overwrite_trim(Scene *scene,
+ ListBase *seqbasep,
const Sequence *transformed,
Sequence *target,
const eOvelapDescrition overlap)
{
- SeqCollection *targets = SEQ_query_by_reference(
- target, seqbase_active_get(t), SEQ_query_strip_effect_chain);
+ SeqCollection *targets = SEQ_query_by_reference(target, seqbasep, SEQ_query_strip_effect_chain);
/* Expand collection by adding all target's children, effects and their children. */
if ((target->type & SEQ_TYPE_EFFECT) != 0) {
- SEQ_collection_expand(seqbase_active_get(t), targets, SEQ_query_strip_effect_chain);
+ SEQ_collection_expand(seqbasep, targets, SEQ_query_strip_effect_chain);
}
/* Trim all non effects, that have influence on effect length which is overlapping. */
@@ -494,15 +496,16 @@ static void seq_transform_handle_overwrite_trim(const TransInfo *t,
SEQ_transform_set_right_handle_frame(seq, transformed->startdisp);
}
- ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(t->scene));
- SEQ_time_update_sequence(t->scene, seqbase, seq);
+ SEQ_time_update_sequence(scene, seqbasep, seq);
}
SEQ_collection_free(targets);
}
-static void seq_transform_handle_overwrite(const TransInfo *t, SeqCollection *transformed_strips)
+static void seq_transform_handle_overwrite(Scene *scene,
+ ListBase *seqbasep,
+ SeqCollection *transformed_strips)
{
- SeqCollection *targets = query_overwrite_targets(t, transformed_strips);
+ SeqCollection *targets = query_overwrite_targets(seqbasep, transformed_strips);
SeqCollection *strips_to_delete = SEQ_collection_create(__func__);
Sequence *target;
@@ -519,10 +522,10 @@ static void seq_transform_handle_overwrite(const TransInfo *t, SeqCollection *tr
SEQ_collection_append_strip(target, strips_to_delete);
}
else if (overlap == STRIP_OVERLAP_IS_INSIDE) {
- seq_transform_handle_overwrite_split(t, transformed, target);
+ seq_transform_handle_overwrite_split(scene, seqbasep, transformed, target);
}
else if (ELEM(overlap, STRIP_OVERLAP_LEFT_SIDE, STRIP_OVERLAP_RIGHT_SIDE)) {
- seq_transform_handle_overwrite_trim(t, transformed, target, overlap);
+ seq_transform_handle_overwrite_trim(scene, seqbasep, transformed, target, overlap);
}
}
}
@@ -534,47 +537,49 @@ static void seq_transform_handle_overwrite(const TransInfo *t, SeqCollection *tr
if (SEQ_collection_len(strips_to_delete) > 0) {
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, strips_to_delete) {
- SEQ_edit_flag_for_removal(t->scene, seqbase_active_get(t), seq);
+ SEQ_edit_flag_for_removal(scene, seqbasep, seq);
}
- SEQ_edit_remove_flagged_sequences(t->scene, seqbase_active_get(t));
+ SEQ_edit_remove_flagged_sequences(scene, seqbasep);
}
SEQ_collection_free(strips_to_delete);
}
-static void seq_transform_handle_overlap_shuffle(const TransInfo *t,
- SeqCollection *transformed_strips)
+static void seq_transform_handle_overlap_shuffle(Scene *scene,
+ ListBase *seqbasep,
+ SeqCollection *transformed_strips,
+ bool use_sync_markers)
{
- ListBase *seqbase = seqbase_active_get(t);
- ListBase *markers = &t->scene->markers;
- const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag &
- SEQ_MARKER_TRANS) != 0;
+ ListBase *markers = &scene->markers;
+
/* Shuffle non strips with no effects attached. */
SeqCollection *standalone_strips = extract_standalone_strips(transformed_strips);
SEQ_transform_seqbase_shuffle_time(
- standalone_strips, seqbase, t->scene, markers, use_sync_markers);
+ standalone_strips, seqbasep, scene, markers, use_sync_markers);
SEQ_collection_free(standalone_strips);
}
-static void seq_transform_handle_overlap(TransInfo *t, SeqCollection *transformed_strips)
+void SEQ_transform_handle_overlap(Scene *scene,
+ ListBase *seqbasep,
+ SeqCollection *transformed_strips,
+ bool use_sync_markers)
{
- ListBase *seqbasep = seqbase_active_get(t);
- const eSeqOverlapMode overlap_mode = SEQ_tool_settings_overlap_mode_get(t->scene);
+ const eSeqOverlapMode overlap_mode = SEQ_tool_settings_overlap_mode_get(scene);
switch (overlap_mode) {
case SEQ_OVERLAP_EXPAND:
- seq_transform_handle_expand_to_fit(t, transformed_strips);
+ seq_transform_handle_expand_to_fit(scene, seqbasep, transformed_strips, use_sync_markers);
break;
case SEQ_OVERLAP_OVERWRITE:
- seq_transform_handle_overwrite(t, transformed_strips);
+ seq_transform_handle_overwrite(scene, seqbasep, transformed_strips);
break;
case SEQ_OVERLAP_SHUFFLE:
- seq_transform_handle_overlap_shuffle(t, transformed_strips);
+ seq_transform_handle_overlap_shuffle(scene, seqbasep, transformed_strips, use_sync_markers);
break;
}
if (seq_transform_check_strip_effects(transformed_strips)) {
/* Update effect strips based on strips just moved in time. */
- seq_transform_update_effects(t, transformed_strips);
+ seq_transform_update_effects(scene, seqbasep, transformed_strips);
}
/* If any effects still overlap, we need to move them up.
@@ -582,7 +587,7 @@ static void seq_transform_handle_overlap(TransInfo *t, SeqCollection *transforme
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, transformed_strips) {
if (SEQ_transform_test_overlap(seqbasep, seq)) {
- SEQ_transform_seqbase_shuffle(seqbasep, seq, t->scene);
+ SEQ_transform_seqbase_shuffle(seqbasep, seq, scene);
}
seq->flag &= ~SEQ_OVERLAP;
}
@@ -622,11 +627,15 @@ static void freeSeqData(TransInfo *t, TransDataContainer *tc, TransCustomData *c
return;
}
+ ListBase *seqbasep = seqbase_active_get(t);
+ Scene *scene = t->scene;
+ const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag &
+ SEQ_MARKER_TRANS) != 0;
if (seq_transform_check_overlap(transformed_strips)) {
- seq_transform_handle_overlap(t, transformed_strips);
+ SEQ_transform_handle_overlap(scene, seqbasep, transformed_strips, use_sync_markers);
}
- seq_transform_update_effects(t, transformed_strips);
+ seq_transform_update_effects(scene, seqbasep, transformed_strips);
SEQ_collection_free(transformed_strips);
SEQ_sort(ed->seqbasep);