Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_sequencer/sequencer_select.c
| Show First 20 Lines • Show All 1,615 Lines • ▼ Show 20 Lines | if (seq->startdisp < actseq->enddisp && seq->enddisp > actseq->startdisp) { | ||||
| seq->flag |= SELECT; | seq->flag |= SELECT; | ||||
| changed = true; | changed = true; | ||||
| } | } | ||||
| } | } | ||||
| return changed; | return changed; | ||||
| } | } | ||||
| /* Query all effect strips that are directly or indirectly connected to seq_reference. */ | |||||
| static void query_strip_effect_chain(Sequence *seq_reference, | |||||
| ListBase *seqbase, | |||||
| SeqCollection *collection) | |||||
| { | |||||
| if (!SEQ_collection_append_strip(seq_reference, collection)) { | |||||
| return; /* Strip is already in set, so all effects connected to it are as well. */ | |||||
| } | |||||
| /* Find all strips that seq_reference is connected to. */ | |||||
| if (seq_reference->type & SEQ_TYPE_EFFECT) { | |||||
| if (seq_reference->seq1) { | |||||
| query_strip_effect_chain(seq_reference->seq1, seqbase, collection); | |||||
| } | |||||
| if (seq_reference->seq2) { | |||||
| query_strip_effect_chain(seq_reference->seq2, seqbase, collection); | |||||
| } | |||||
| if (seq_reference->seq3) { | |||||
| query_strip_effect_chain(seq_reference->seq3, seqbase, collection); | |||||
| } | |||||
| } | |||||
| /* Find all strips connected to seq_reference. */ | |||||
| LISTBASE_FOREACH (Sequence *, seq_test, seqbase) { | |||||
| if (seq_test->seq1 == seq_reference || seq_test->seq2 == seq_reference || | |||||
| seq_test->seq3 == seq_reference) { | |||||
| query_strip_effect_chain(seq_test, seqbase, collection); | |||||
| } | |||||
| } | |||||
| } | |||||
| /* Query strips that are in lower channel and intersect in time with seq_reference. */ | /* Query strips that are in lower channel and intersect in time with seq_reference. */ | ||||
| static void query_lower_channel_strips(Sequence *seq_reference, | static void query_lower_channel_strips(Sequence *seq_reference, | ||||
| ListBase *seqbase, | ListBase *seqbase, | ||||
| SeqCollection *collection) | SeqCollection *collection) | ||||
| { | { | ||||
| LISTBASE_FOREACH (Sequence *, seq_test, seqbase) { | LISTBASE_FOREACH (Sequence *, seq_test, seqbase) { | ||||
| if (seq_test->machine > seq_reference->machine) { | if (seq_test->machine > seq_reference->machine) { | ||||
| continue; /* Not lower channel. */ | continue; /* Not lower channel. */ | ||||
| Show All 13 Lines | static bool select_grouped_effect_link(Editing *ed, | ||||
| const int UNUSED(channel)) | const int UNUSED(channel)) | ||||
| { | { | ||||
| ListBase *seqbase = SEQ_active_seqbase_get(ed); | ListBase *seqbase = SEQ_active_seqbase_get(ed); | ||||
| /* Get collection of strips. */ | /* Get collection of strips. */ | ||||
| SeqCollection *collection = SEQ_query_selected_strips(seqbase); | SeqCollection *collection = SEQ_query_selected_strips(seqbase); | ||||
| const int selected_strip_count = BLI_gset_len(collection->set); | const int selected_strip_count = BLI_gset_len(collection->set); | ||||
| SEQ_collection_expand(seqbase, collection, query_lower_channel_strips); | SEQ_collection_expand(seqbase, collection, query_lower_channel_strips); | ||||
| SEQ_collection_expand(seqbase, collection, query_strip_effect_chain); | SEQ_collection_expand(seqbase, collection, SEQ_query_strip_effect_chain); | ||||
| /* Check if other strips will be affected. */ | /* Check if other strips will be affected. */ | ||||
| const bool changed = BLI_gset_len(collection->set) > selected_strip_count; | const bool changed = BLI_gset_len(collection->set) > selected_strip_count; | ||||
| /* Actual logic. */ | /* Actual logic. */ | ||||
| Sequence *seq; | Sequence *seq; | ||||
| SEQ_ITERATOR_FOREACH (seq, collection) { | SEQ_ITERATOR_FOREACH (seq, collection) { | ||||
| seq->flag |= SELECT; | seq->flag |= SELECT; | ||||
| ▲ Show 20 Lines • Show All 101 Lines • Show Last 20 Lines | |||||