Sequencer:
A call to view2d_do_locks() got accidentally added in main drawing loop,
causing an infinite loop of redraws when this option was used with more
sequence windows open.

Added missing view2d_do_locks() to zooming in Sequence window. Also
cleaned this call a bit.
This commit is contained in:
2006-06-04 16:26:02 +00:00
parent e7a85df91e
commit e9fb9f2c33
3 changed files with 55 additions and 50 deletions

View File

@@ -441,6 +441,7 @@ static View2D *spacelink_get_view2d(SpaceLink *sl)
} }
/* copies changes in this view from or to all 2d views with lock option open */ /* copies changes in this view from or to all 2d views with lock option open */
/* do not call this inside of drawing routines, to prevent eternal loops */
void view2d_do_locks(ScrArea *cursa, int flag) void view2d_do_locks(ScrArea *cursa, int flag)
{ {
ScrArea *sa; ScrArea *sa;
@@ -468,8 +469,10 @@ void view2d_do_locks(ScrArea *cursa, int flag)
scrarea_queue_winredraw(sa); scrarea_queue_winredraw(sa);
} }
if(flag & V2D_LOCK_REDRAW) if(flag & V2D_LOCK_REDRAW) {
scrarea_do_windraw(sa); if(sl == sa->spacedata.first)
scrarea_do_windraw(sa);
}
else else
scrarea_queue_winredraw(sa); scrarea_queue_winredraw(sa);
} }
@@ -2194,7 +2197,7 @@ int view2dzoom(unsigned short event)
mval[1]= mvalo[1]; mval[1]= mvalo[1];
while( (get_mbut()&(L_MOUSE|M_MOUSE)) || is_wheel ) { while( (get_mbut()&(L_MOUSE|M_MOUSE)) || is_wheel ) {
/* regular mousewheel: zoom regular /* regular mousewheel: zoom regular
* alt-shift mousewheel: zoom y only * alt-shift mousewheel: zoom y only
* alt-ctrl mousewheel: zoom x only * alt-ctrl mousewheel: zoom x only
@@ -2275,6 +2278,7 @@ int view2dzoom(unsigned short event)
} }
} }
} }
if (ELEM(event, WHEELUPMOUSE, WHEELDOWNMOUSE) || mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) { if (ELEM(event, WHEELUPMOUSE, WHEELDOWNMOUSE) || mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
if(U.viewzoom!=USER_ZOOM_CONT) { if(U.viewzoom!=USER_ZOOM_CONT) {
@@ -2311,13 +2315,13 @@ int view2dzoom(unsigned short event)
G.v2d->cur.ymin+= dy; G.v2d->cur.ymin+= dy;
G.v2d->cur.ymax-= dy; G.v2d->cur.ymax-= dy;
} }
test_view2d(G.v2d, curarea->winx, curarea->winy); /* cur min max rects */ test_view2d(G.v2d, curarea->winx, curarea->winy); /* cur min max rects */
sa= curarea; /* now when are you going to kill this one! */ sa= curarea; /* now when are you going to kill this one! */
view2d_do_locks(curarea, V2D_LOCK_COPY|V2D_LOCK_REDRAW); view2d_do_locks(curarea, V2D_LOCK_COPY|V2D_LOCK_REDRAW);
mywinset(sa->win); areawinset(sa->win);
scrarea_do_windraw(curarea); scrarea_do_windraw(curarea);
screen_swapbuffers(); screen_swapbuffers();
} }

View File

@@ -923,7 +923,8 @@ static void seq_blockhandlers(ScrArea *sa)
void drawseqspace(ScrArea *sa, void *spacedata) void drawseqspace(ScrArea *sa, void *spacedata)
{ {
SpaceSeq *sseq; SpaceSeq *sseq= sa->spacedata.first;
View2D *v2d= &sseq->v2d;
Editing *ed; Editing *ed;
Sequence *seq; Sequence *seq;
float col[3]; float col[3];
@@ -931,9 +932,8 @@ void drawseqspace(ScrArea *sa, void *spacedata)
ed= G.scene->ed; ed= G.scene->ed;
sseq= curarea->spacedata.first;
if(sseq->mainb) { if(sseq->mainb) {
draw_image_seq(curarea); draw_image_seq(sa);
return; return;
} }
@@ -946,22 +946,22 @@ void drawseqspace(ScrArea *sa, void *spacedata)
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
calc_scrollrcts(sa, G.v2d, curarea->winx, curarea->winy); calc_scrollrcts(sa, v2d, sa->winx, sa->winy);
if(curarea->winx>SCROLLB+10 && curarea->winy>SCROLLH+10) { if(sa->winx>SCROLLB+10 && sa->winy>SCROLLH+10) {
if(G.v2d->scroll) { if(v2d->scroll) {
ofsx= curarea->winrct.xmin; /* because of mywin */ ofsx= sa->winrct.xmin; /* because of mywin */
ofsy= curarea->winrct.ymin; ofsy= sa->winrct.ymin;
glViewport(ofsx+G.v2d->mask.xmin, ofsy+G.v2d->mask.ymin, ( ofsx+G.v2d->mask.xmax-1)-(ofsx+G.v2d->mask.xmin)+1, ( ofsy+G.v2d->mask.ymax-1)-( ofsy+G.v2d->mask.ymin)+1); glViewport(ofsx+v2d->mask.xmin, ofsy+v2d->mask.ymin, ( ofsx+v2d->mask.xmax-1)-(ofsx+v2d->mask.xmin)+1, ( ofsy+v2d->mask.ymax-1)-( ofsy+v2d->mask.ymin)+1);
glScissor(ofsx+G.v2d->mask.xmin, ofsy+G.v2d->mask.ymin, ( ofsx+G.v2d->mask.xmax-1)-(ofsx+G.v2d->mask.xmin)+1, ( ofsy+G.v2d->mask.ymax-1)-( ofsy+G.v2d->mask.ymin)+1); glScissor(ofsx+v2d->mask.xmin, ofsy+v2d->mask.ymin, ( ofsx+v2d->mask.xmax-1)-(ofsx+v2d->mask.xmin)+1, ( ofsy+v2d->mask.ymax-1)-( ofsy+v2d->mask.ymin)+1);
} }
} }
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax); myortho2(v2d->cur.xmin, v2d->cur.xmax, v2d->cur.ymin, v2d->cur.ymax);
BIF_ThemeColorShade(TH_BACK, -20); BIF_ThemeColorShade(TH_BACK, -20);
glRectf(G.v2d->cur.xmin, 0.0, G.v2d->cur.xmax, 1.0); glRectf(v2d->cur.xmin, 0.0, v2d->cur.xmax, 1.0);
boundbox_seq(); boundbox_seq();
@@ -971,16 +971,16 @@ void drawseqspace(ScrArea *sa, void *spacedata)
/*Draw Track Gradients Comment out for now do somthing more subtle /*Draw Track Gradients Comment out for now do somthing more subtle
start drawing gradients at the bottom of the screen.*/ start drawing gradients at the bottom of the screen.*/
/* /*
i= MAX2(1, ((int)G.v2d->cur.ymin)-1); i= MAX2(1, ((int)v2d->cur.ymin)-1);
glShadeModel(GL_SMOOTH); glShadeModel(GL_SMOOTH);
glBegin(GL_QUADS); glBegin(GL_QUADS);
while (i<G.v2d->cur.ymax) { while (i<v2d->cur.ymax) {
BIF_ThemeColorShade(TH_BACK, 0); BIF_ThemeColorShade(TH_BACK, 0);
glVertex2f(G.v2d->cur.xmax, i); glVertex2f(v2d->cur.xmax, i);
glVertex2f(G.v2d->cur.xmin, i); glVertex2f(v2d->cur.xmin, i);
BIF_ThemeColorShade(TH_BACK, 30); BIF_ThemeColorShade(TH_BACK, 30);
glVertex2f(G.v2d->cur.xmin, i+1); glVertex2f(v2d->cur.xmin, i+1);
glVertex2f(G.v2d->cur.xmax, i+1); glVertex2f(v2d->cur.xmax, i+1);
i+=1.0; i+=1.0;
} }
glEnd(); glEnd();
@@ -989,18 +989,18 @@ void drawseqspace(ScrArea *sa, void *spacedata)
/* Quad Stripes ?*/ /* Quad Stripes ?*/
/*i= MAX2(1, ((int)G.v2d->cur.ymin)-1); /*i= MAX2(1, ((int)v2d->cur.ymin)-1);
glBegin(GL_QUADS); glBegin(GL_QUADS);
while (i<G.v2d->cur.ymax) { while (i<v2d->cur.ymax) {
if (((int)i) & 1) if (((int)i) & 1)
BIF_ThemeColorShade(TH_BACK, -15); BIF_ThemeColorShade(TH_BACK, -15);
else else
BIF_ThemeColorShade(TH_BACK, -25); BIF_ThemeColorShade(TH_BACK, -25);
glVertex2f(G.v2d->cur.xmax, i); glVertex2f(v2d->cur.xmax, i);
glVertex2f(G.v2d->cur.xmin, i); glVertex2f(v2d->cur.xmin, i);
glVertex2f(G.v2d->cur.xmin, i+1); glVertex2f(v2d->cur.xmin, i+1);
glVertex2f(G.v2d->cur.xmax, i+1); glVertex2f(v2d->cur.xmax, i+1);
i+=1.0; i+=1.0;
} }
glEnd();*/ glEnd();*/
@@ -1008,10 +1008,10 @@ void drawseqspace(ScrArea *sa, void *spacedata)
/* Force grid lines instead - Hangs on andys pc... will look at later */ /* Force grid lines instead - Hangs on andys pc... will look at later */
/* /*
glBegin(GL_LINES); glBegin(GL_LINES);
while (i<G.v2d->cur.ymax) { while (i<v2d->cur.ymax) {
BIF_ThemeColorShade(TH_BACK, -40); BIF_ThemeColorShade(TH_BACK, -40);
glVertex2f(G.v2d->cur.xmax, i); glVertex2f(v2d->cur.xmax, i);
glVertex2f(G.v2d->cur.xmin, i); glVertex2f(v2d->cur.xmin, i);
i+=1.0; i+=1.0;
} }
glEnd(); glEnd();
@@ -1026,10 +1026,10 @@ void drawseqspace(ScrArea *sa, void *spacedata)
seq= ed->seqbasep->first; seq= ed->seqbasep->first;
while(seq) { /* bound box test, dont draw outside the view */ while(seq) { /* bound box test, dont draw outside the view */
if (seq->flag & SELECT || if (seq->flag & SELECT ||
seq->start > G.v2d->cur.xmax || seq->start > v2d->cur.xmax ||
seq->start+seq->len < G.v2d->cur.xmin || seq->start+seq->len < v2d->cur.xmin ||
seq->machine+1.0 < G.v2d->cur.ymin || seq->machine+1.0 < v2d->cur.ymin ||
seq->machine > G.v2d->cur.ymax) seq->machine > v2d->cur.ymax)
{ {
/* dont draw */ /* dont draw */
} else { } else {
@@ -1043,10 +1043,10 @@ void drawseqspace(ScrArea *sa, void *spacedata)
seq= ed->seqbasep->first; seq= ed->seqbasep->first;
while(seq) { /* bound box test, dont draw outside the view */ while(seq) { /* bound box test, dont draw outside the view */
if (!(seq->flag & SELECT) || if (!(seq->flag & SELECT) ||
seq->start > G.v2d->cur.xmax || seq->start > v2d->cur.xmax ||
seq->start+seq->len < G.v2d->cur.xmin || seq->start+seq->len < v2d->cur.xmin ||
seq->machine+1.0 < G.v2d->cur.ymin || seq->machine+1.0 < v2d->cur.ymin ||
seq->machine > G.v2d->cur.ymax) seq->machine > v2d->cur.ymax)
{ {
/* dont draw */ /* dont draw */
} else { } else {
@@ -1059,13 +1059,13 @@ void drawseqspace(ScrArea *sa, void *spacedata)
draw_extra_seqinfo(); draw_extra_seqinfo();
/* restore viewport */ /* restore viewport */
mywinset(curarea->win); mywinset(sa->win);
/* ortho at pixel level curarea */ /* ortho at pixel level sa */
myortho2(-0.375, curarea->winx-0.375, -0.375, curarea->winy-0.375); myortho2(-0.375, sa->winx-0.375, -0.375, sa->winy-0.375);
if(curarea->winx>SCROLLB+10 && curarea->winy>SCROLLH+10) { if(sa->winx>SCROLLB+10 && sa->winy>SCROLLH+10) {
if(G.v2d->scroll) { if(v2d->scroll) {
drawscroll(0); drawscroll(0);
} }
} }
@@ -1078,8 +1078,7 @@ void drawseqspace(ScrArea *sa, void *spacedata)
seq_blockhandlers(sa); seq_blockhandlers(sa);
} }
view2d_do_locks(curarea, V2D_LOCK_COPY); sa->win_swap= WIN_BACK_OK;
curarea->win_swap= WIN_BACK_OK;
} }

View File

@@ -3675,7 +3675,8 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
dx= 0.1154f*(v2d->cur.xmax-v2d->cur.xmin); dx= 0.1154f*(v2d->cur.xmax-v2d->cur.xmin);
v2d->cur.xmin+= dx; v2d->cur.xmin+= dx;
v2d->cur.xmax-= dx; v2d->cur.xmax-= dx;
test_view2d(G.v2d, curarea->winx, curarea->winy); test_view2d(G.v2d, sa->winx, sa->winy);
view2d_do_locks(sa, V2D_LOCK_COPY);
} }
else if((G.qual==LR_SHIFTKEY)) { else if((G.qual==LR_SHIFTKEY)) {
insert_gap(25, CFRA); insert_gap(25, CFRA);
@@ -3704,7 +3705,8 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
dx= 0.15f*(v2d->cur.xmax-v2d->cur.xmin); dx= 0.15f*(v2d->cur.xmax-v2d->cur.xmin);
v2d->cur.xmin-= dx; v2d->cur.xmin-= dx;
v2d->cur.xmax+= dx; v2d->cur.xmax+= dx;
test_view2d(G.v2d, curarea->winx, curarea->winy); test_view2d(G.v2d, sa->winx, sa->winy);
view2d_do_locks(sa, V2D_LOCK_COPY);
} }
} }
doredraw= 1; doredraw= 1;