VSE: speedup timeline drawing, and improve waveform display #115311
|
@ -1517,13 +1517,10 @@ static void rna_Sequence_separate(ID *id, Sequence *seqm, Main *bmain)
|
|||
/* Find channel owner. If nullptr, owner is `Editing`, otherwise it's `Sequence`. */
|
||||
static Sequence *rna_SeqTimelineChannel_owner_get(Editing *ed, SeqTimelineChannel *channel)
|
||||
{
|
||||
blender::VectorSet strips = SEQ_query_all_strips_recursive(&ed->seqbase);
|
||||
blender::VectorSet strips = SEQ_query_all_meta_strips_recursive(&ed->seqbase);
|
||||
|
||||
Sequence *channel_owner = nullptr;
|
||||
for (Sequence *seq : strips) {
|
||||
if (seq->type != SEQ_TYPE_META) {
|
||||
continue;
|
||||
}
|
||||
if (BLI_findindex(&seq->channels, channel) != -1) {
|
||||
channel_owner = seq;
|
||||
break;
|
||||
|
|
|
@ -87,6 +87,13 @@ blender::VectorSet<Sequence *> SEQ_query_all_strips(ListBase *seqbase);
|
|||
* \return set of strips
|
||||
*/
|
||||
blender::VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase);
|
||||
/**
|
||||
* Query all meta strips in seqbase and nested meta strips.
|
||||
*
|
||||
* \param seqbase: ListBase in which strips are queried
|
||||
* \return set of meta strips
|
||||
*/
|
||||
blender::VectorSet<Sequence *> SEQ_query_all_meta_strips_recursive(ListBase *seqbase);
|
||||
|
||||
/**
|
||||
* Query all effect strips that are directly or indirectly connected to seq_reference.
|
||||
|
|
|
@ -92,6 +92,16 @@ static void query_all_strips_recursive(ListBase *seqbase, VectorSet<Sequence *>
|
|||
}
|
||||
}
|
||||
|
||||
static void query_all_meta_strips_recursive(ListBase *seqbase, VectorSet<Sequence *> &strips)
|
||||
{
|
||||
LISTBASE_FOREACH (Sequence *, seq, seqbase) {
|
||||
if (seq->type == SEQ_TYPE_META) {
|
||||
query_all_meta_strips_recursive(&seq->seqbase, strips);
|
||||
strips.add(seq);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase)
|
||||
{
|
||||
VectorSet<Sequence *> strips;
|
||||
|
@ -99,6 +109,13 @@ VectorSet<Sequence *> SEQ_query_all_strips_recursive(ListBase *seqbase)
|
|||
return strips;
|
||||
}
|
||||
|
||||
VectorSet<Sequence *> SEQ_query_all_meta_strips_recursive(ListBase *seqbase)
|
||||
{
|
||||
VectorSet<Sequence *> strips;
|
||||
query_all_meta_strips_recursive(seqbase, strips);
|
||||
return strips;
|
||||
}
|
||||
|
||||
VectorSet<Sequence *> SEQ_query_all_strips(ListBase *seqbase)
|
||||
{
|
||||
VectorSet<Sequence *> strips;
|
||||
|
|
|
@ -387,10 +387,10 @@ ListBase *SEQ_get_seqbase_by_seq(const Scene *scene, Sequence *seq)
|
|||
|
||||
Sequence *SEQ_get_meta_by_seqbase(ListBase *seqbase_main, ListBase *meta_seqbase)
|
||||
{
|
||||
blender::VectorSet strips = SEQ_query_all_strips_recursive(seqbase_main);
|
||||
blender::VectorSet strips = SEQ_query_all_meta_strips_recursive(seqbase_main);
|
||||
|
||||
for (Sequence *seq : strips) {
|
||||
if (seq->type == SEQ_TYPE_META && &seq->seqbase == meta_seqbase) {
|
||||
if (&seq->seqbase == meta_seqbase) {
|
||||
return seq;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue