Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_convert_sequencer.c
| Show First 20 Lines • Show All 452 Lines • ▼ Show 20 Lines | static void seq_transform_handle_overwrite_split(const TransInfo *t, | ||||
| Scene *scene = t->scene; | Scene *scene = t->scene; | ||||
| ListBase *seqbase = seqbase_active_get(t); | ListBase *seqbase = seqbase_active_get(t); | ||||
| Sequence *split_strip = SEQ_edit_strip_split( | Sequence *split_strip = SEQ_edit_strip_split( | ||||
| bmain, scene, seqbase, target, transformed->startdisp, SEQ_SPLIT_SOFT, NULL); | bmain, scene, seqbase, target, transformed->startdisp, SEQ_SPLIT_SOFT, NULL); | ||||
| SEQ_edit_strip_split( | SEQ_edit_strip_split( | ||||
| bmain, scene, seqbase, split_strip, transformed->enddisp, SEQ_SPLIT_SOFT, NULL); | 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_flag_for_removal(scene, seqbase_active_get(t), split_strip); | ||||
| SEQ_edit_remove_flagged_sequences(t->scene, seqbase_active_get(t)); | |||||
| } | } | ||||
| /* Trim strips by adjusting handle position. | /* Trim strips by adjusting handle position. | ||||
| * This is bit more complicated in case overlap happens on effect. */ | * 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(const TransInfo *t, | ||||
| const Sequence *transformed, | const Sequence *transformed, | ||||
| Sequence *target, | Sequence *target, | ||||
| const eOvelapDescrition overlap) | const eOvelapDescrition overlap) | ||||
| Show All 24 Lines | SEQ_ITERATOR_FOREACH (seq, targets) { | ||||
| SEQ_time_update_sequence(t->scene, seqbase, seq); | SEQ_time_update_sequence(t->scene, seqbase, seq); | ||||
| } | } | ||||
| SEQ_collection_free(targets); | SEQ_collection_free(targets); | ||||
| } | } | ||||
| static void seq_transform_handle_overwrite(const TransInfo *t, SeqCollection *transformed_strips) | static void seq_transform_handle_overwrite(const TransInfo *t, SeqCollection *transformed_strips) | ||||
| { | { | ||||
| SeqCollection *targets = query_overwrite_targets(t, transformed_strips); | SeqCollection *targets = query_overwrite_targets(t, transformed_strips); | ||||
| SeqCollection *strips_to_delete = SEQ_collection_create(__func__); | |||||
| bool strips_delete = false; | |||||
| Sequence *target; | Sequence *target; | ||||
| Sequence *transformed; | Sequence *transformed; | ||||
| SEQ_ITERATOR_FOREACH (target, targets) { | SEQ_ITERATOR_FOREACH (target, targets) { | ||||
| SEQ_ITERATOR_FOREACH (transformed, transformed_strips) { | SEQ_ITERATOR_FOREACH (transformed, transformed_strips) { | ||||
| if (transformed->machine != target->machine) { | if (transformed->machine != target->machine) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| const eOvelapDescrition overlap = overlap_description_get(transformed, target); | const eOvelapDescrition overlap = overlap_description_get(transformed, target); | ||||
| if (overlap == STRIP_OVERLAP_IS_FULL) { | if (overlap == STRIP_OVERLAP_IS_FULL) { | ||||
| /* Remove covered strip. */ | SEQ_collection_append_strip(target, strips_to_delete); | ||||
| SEQ_edit_flag_for_removal(t->scene, seqbase_active_get(t), target); | |||||
| strips_delete = true; | |||||
| } | } | ||||
| else if (overlap == STRIP_OVERLAP_IS_INSIDE) { | else if (overlap == STRIP_OVERLAP_IS_INSIDE) { | ||||
| seq_transform_handle_overwrite_split(t, transformed, target); | seq_transform_handle_overwrite_split(t, transformed, target); | ||||
| strips_delete = true; | |||||
| } | } | ||||
| else if (ELEM(overlap, STRIP_OVERLAP_LEFT_SIDE, STRIP_OVERLAP_RIGHT_SIDE)) { | 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(t, transformed, target, overlap); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| SEQ_collection_free(targets); | SEQ_collection_free(targets); | ||||
| if (strips_delete) { | /* Remove covered strips. This must be done in separate loop, because `SEQ_edit_strip_split()` | ||||
| * also uses `SEQ_edit_remove_flagged_sequences()`. See T91096. */ | |||||
| 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_remove_flagged_sequences(t->scene, seqbase_active_get(t)); | SEQ_edit_remove_flagged_sequences(t->scene, seqbase_active_get(t)); | ||||
| } | } | ||||
| SEQ_collection_free(strips_to_delete); | |||||
| } | } | ||||
| static void seq_transform_handle_overlap_shuffle(const TransInfo *t, | static void seq_transform_handle_overlap_shuffle(const TransInfo *t, | ||||
| SeqCollection *transformed_strips) | SeqCollection *transformed_strips) | ||||
| { | { | ||||
| ListBase *seqbase = seqbase_active_get(t); | ListBase *seqbase = seqbase_active_get(t); | ||||
| ListBase *markers = &t->scene->markers; | ListBase *markers = &t->scene->markers; | ||||
| const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag & | const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag & | ||||
| ▲ Show 20 Lines • Show All 322 Lines • Show Last 20 Lines | |||||