fix [#27671] Transforming sequencer effects strips crashes

This commit is contained in:
Campbell Barton 2011-06-16 12:48:25 +00:00
parent f227c4a064
commit 216ba20942

@ -3725,27 +3725,8 @@ void flushTransGraphData(TransInfo *t)
* seq->depth must be set before running this function so we know if the strips
* are root level or not
*/
#define XXX_DURIAN_ANIM_TX_HACK
static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count, int *flag)
{
#ifdef XXX_DURIAN_ANIM_TX_HACK
/* hack */
if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
Sequence *seq_t[3];
int i;
seq_t[0]= seq->seq1;
seq_t[1]= seq->seq2;
seq_t[2]= seq->seq3;
for(i=0; i<3; i++) {
if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)))
seq->flag |= SELECT;
}
}
#endif
/* for extend we need to do some tricks */
if (t->mode == TFM_TIME_EXTEND) {
@ -4105,6 +4086,7 @@ static void freeSeqData(TransInfo *t)
static void createTransSeqData(bContext *C, TransInfo *t)
{
#define XXX_DURIAN_ANIM_TX_HACK
View2D *v2d= UI_view2d_fromcontext(C);
Scene *scene= t->scene;
@ -4135,6 +4117,24 @@ static void createTransSeqData(bContext *C, TransInfo *t)
t->frame_side = 'B';
}
#ifdef XXX_DURIAN_ANIM_TX_HACK
{
Sequence *seq;
for(seq= ed->seqbasep->first; seq; seq= seq->next) {
/* hack */
if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
Sequence *seq_user;
int i;
for(i=0; i<3; i++) {
seq_user= *((&seq->seq1) + i);
if (seq_user && (seq_user->flag & SELECT) && !(seq_user->flag & SEQ_LOCK) && !(seq_user->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) {
seq->flag |= SELECT;
}
}
}
}
}
#endif
count = SeqTransCount(t, ed->seqbasep, 0);
@ -4154,6 +4154,8 @@ static void createTransSeqData(bContext *C, TransInfo *t)
/* loop 2: build transdata array */
SeqToTransData_Recursive(t, ed->seqbasep, td, td2d, tdsq);
#undef XXX_DURIAN_ANIM_TX_HACK
}