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 */
/* do not call this inside of drawing routines, to prevent eternal loops */
void view2d_do_locks(ScrArea *cursa, int flag)
{
ScrArea *sa;
@@ -468,8 +469,10 @@ void view2d_do_locks(ScrArea *cursa, int flag)
scrarea_queue_winredraw(sa);
}
if(flag & V2D_LOCK_REDRAW)
scrarea_do_windraw(sa);
if(flag & V2D_LOCK_REDRAW) {
if(sl == sa->spacedata.first)
scrarea_do_windraw(sa);
}
else
scrarea_queue_winredraw(sa);
}
@@ -2194,7 +2197,7 @@ int view2dzoom(unsigned short event)
mval[1]= mvalo[1];
while( (get_mbut()&(L_MOUSE|M_MOUSE)) || is_wheel ) {
/* regular mousewheel: zoom regular
* alt-shift mousewheel: zoom y 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(U.viewzoom!=USER_ZOOM_CONT) {
@@ -2311,13 +2315,13 @@ int view2dzoom(unsigned short event)
G.v2d->cur.ymin+= dy;
G.v2d->cur.ymax-= dy;
}
test_view2d(G.v2d, curarea->winx, curarea->winy); /* cur min max rects */
sa= curarea; /* now when are you going to kill this one! */
view2d_do_locks(curarea, V2D_LOCK_COPY|V2D_LOCK_REDRAW);
mywinset(sa->win);
areawinset(sa->win);
scrarea_do_windraw(curarea);
screen_swapbuffers();
}

View File

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