Tweaked the force_draw() calls, to allow headerprint() to work while

doing a transform. Solves bug reported by Brecht about this.
This commit is contained in:
Ton Roosendaal 2004-11-07 18:20:44 +00:00
parent 1695173688
commit ac0bb78a20
15 changed files with 63 additions and 71 deletions

@ -50,7 +50,7 @@ void unlink_screen(struct bScreen *sc);
void freeAllRad(void);
void free_editText(void);
void setscreen(struct bScreen *sc);
void force_draw_all(void);
void force_draw_all(int);
/* otherwise the WHILE_SEQ doesn't work */
struct Sequence;
struct ListBase;

@ -91,9 +91,9 @@ extern void drawemptyspace(struct ScrArea *sa, void *spacedata);
extern void drawinfospace(struct ScrArea *sa, void *spacedata);
extern void duplicatespacelist(struct ScrArea *area, struct ListBase *lb1, struct ListBase *lb2);
extern void extern_set_butspace(int fkey);
extern void force_draw(void);
extern void force_draw_all(void);
extern void force_draw_plus(int type);
extern void force_draw(int header);
extern void force_draw_all(int header);
extern void force_draw_plus(int type, int header);
extern void freespacelist(struct ListBase *lb);
extern void handle_view3d_around(void);
extern void handle_view3d_lock(void);

@ -1255,15 +1255,10 @@ void transform_actionchannel_keys(char mode)
if (G.saction->lock){
do_all_actions();
allqueue (REDRAWVIEW3D, 0);
allqueue (REDRAWACTION, 0);
allqueue (REDRAWIPO, 0);
allqueue(REDRAWNLA, 0);
force_draw_all();
force_draw_all(0);
}
else {
addqueue (curarea->win, REDRAWALL, 0);
force_draw ();
force_draw(0);
}
}
@ -1445,11 +1440,11 @@ void transform_meshchannel_keys(char mode, Key *key)
allqueue (REDRAWACTION, 0);
allqueue (REDRAWIPO, 0);
allqueue(REDRAWNLA, 0);
force_draw_all();
force_draw_all(0);
}
else {
addqueue (curarea->win, REDRAWALL, 0);
force_draw ();
force_draw(0);
}
}
@ -2454,9 +2449,9 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if( cfra!=CFRA ) {
CFRA= cfra;
update_for_newframe();
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_IPO);
force_draw_plus(SPACE_BUTS);
force_draw_plus(SPACE_VIEW3D, 1);
force_draw_plus(SPACE_IPO, 1);
force_draw_plus(SPACE_BUTS, 1);
}
} while(get_mbut() & mousebut);

@ -1687,7 +1687,7 @@ static void add_bone_input (Object *ob)
Mat4One (bone->obmat);
bone->size[0]=bone->size[1]=bone->size[2]=1.0F;
force_draw_plus(SPACE_BUTS);
force_draw_plus(SPACE_BUTS, 1);
while(qtest()) {
event= extern_qread(&val);
@ -2892,7 +2892,7 @@ void hide_selected_pose_bones(void) {
bone_looper(G.obpose, arm->bonebase.first, NULL,
hide_selected_pose_bone);
force_draw();
force_draw(1);
}
int hide_unselected_pose_bone(Object *ob, Bone *bone, void *ptr) {
@ -2913,7 +2913,7 @@ void hide_unselected_pose_bones(void) {
bone_looper(G.obpose, arm->bonebase.first, NULL,
hide_unselected_pose_bone);
force_draw();
force_draw(1);
}
int show_pose_bone(Object *ob, Bone *bone, void *ptr) {
@ -2936,7 +2936,7 @@ void show_all_pose_bones(void) {
bone_looper(G.obpose, arm->bonebase.first, NULL,
show_pose_bone);
force_draw();
force_draw(1);
}
int is_delay_deform(void)

@ -267,7 +267,7 @@ int extrude_ika(Object *ob, int add)
xo= mval[0];
yo= mval[1];
force_draw();
force_draw(1);
}
while(qtest()) {

@ -2605,7 +2605,7 @@ void mouse_select_ipo()
update_editipo_flags();
force_draw();
force_draw(0);
BIF_undo_push("Select Ipo");
if(G.sipo->showkey && G.sipo->blocktype==ID_OB) {
@ -4813,16 +4813,16 @@ void transform_ipo(int mode)
/* update realtime */
if(G.sipo->lock) {
if(G.sipo->blocktype==ID_MA) {
force_draw_plus(SPACE_BUTS);
force_draw_plus(SPACE_BUTS, 0);
}
else if(G.sipo->blocktype==ID_KE) {
do_ob_key(OBACT);
makeDispList(OBACT);
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_VIEW3D, 0);
}
else if(G.sipo->blocktype==ID_AC) {
do_all_actions();
force_draw_all();
force_draw_all(0);
}
else if(G.sipo->blocktype==ID_OB) {
Base *base= FIRSTBASE;
@ -4831,12 +4831,12 @@ void transform_ipo(int mode)
if(base->object->ipo==G.sipo->ipo) do_ob_ipo(base->object);
base= base->next;
}
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_VIEW3D, 0);
}
else force_draw();
else force_draw(0);
}
else {
force_draw();
force_draw(0);
}
firsttime= 0;
}

@ -836,7 +836,7 @@ void move_keys(void)
xo= mval[0];
yo= mval[1];
force_draw();
force_draw(0);
}
else BIF_wait_for_statechange();

@ -306,8 +306,8 @@ void winqreadnlaspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if( cfra!=CFRA ) {
CFRA= cfra;
update_for_newframe();
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_IPO);
force_draw_plus(SPACE_VIEW3D, 1);
force_draw_plus(SPACE_IPO, 1);
}
} while(get_mbut() & mousebut);
@ -1013,11 +1013,11 @@ void transform_nlachannel_keys(char mode)
allqueue (REDRAWVIEW3D, 0);
allqueue (REDRAWNLA, 0);
allqueue (REDRAWIPO, 0);
force_draw_all();
force_draw_all(0);
}
else {
addqueue (curarea->win, REDRAWALL, 0);
force_draw ();
force_draw(0);
}
}

@ -5397,7 +5397,7 @@ void transform(int mode)
set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
if(fast==0) {
force_draw();
force_draw(0);
time= my_clock()-time;
if(time>50) fast= 1;
}
@ -5717,7 +5717,7 @@ void transform(int mode)
set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
if(fast==0) {
force_draw();
force_draw(0);
time= my_clock()-time;
if(time>50) fast= 1;
}
@ -5979,7 +5979,7 @@ void transform(int mode)
set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
if(fast==0) {
force_draw();
force_draw(0);
time= my_clock()-time;
if(time>50) fast= 1;
}
@ -6059,7 +6059,7 @@ void transform(int mode)
if(fast==0) {
time= my_clock();
force_draw();
force_draw(0);
time= my_clock()-time;
if(time>50) fast= 1;
}
@ -6127,7 +6127,7 @@ void transform(int mode)
if(fast==0) {
time= my_clock();
force_draw();
force_draw(0);
time= my_clock()-time;
if(time>50) fast= 1;
}

@ -322,7 +322,7 @@ void transform_oops(int mode)
xo= mval[0];
yo= mval[1];
force_draw();
force_draw(0);
firsttime= 0;
@ -468,7 +468,7 @@ void mouse_select_oops(void)
oops_to_select_objects(); /* also redraw */
scrarea_queue_headredraw(curarea);
force_draw();
force_draw(1);
std_rmouse_transform(transform_oops);
}

@ -411,7 +411,7 @@ void mouse_select_seq(void)
recurs_sel_seq(seq);
}
force_draw();
force_draw(0);
if(last_seq) allqueue(REDRAWIPO, 0);
@ -1874,7 +1874,7 @@ void transform_seq(int mode)
}
END_SEQ;
force_draw();
force_draw(0);
}
else BIF_wait_for_statechange();

@ -689,8 +689,8 @@ void transform_tface_uv(int mode)
xo= mval[0];
yo= mval[1];
if(G.sima->lock || mode=='w') force_draw_plus(SPACE_VIEW3D);
else force_draw();
if(G.sima->lock || mode=='w') force_draw_plus(SPACE_VIEW3D, 0);
else force_draw(0);
firsttime= 0;
@ -1148,7 +1148,7 @@ void mouse_select_sima(void)
*flagpoin |= val;
}
force_draw();
force_draw(1);
BIF_undo_push("Select UV");
std_rmouse_transform(transform_tface_uv);
@ -1290,7 +1290,7 @@ void uvedit_selectionCB(short selecting, Object *editobj, short *mval, float rad
if(G.f & G_DRAWFACES) { /* full redraw only if necessary */
draw_sel_circle(0, 0, 0, 0, 0); /* signal */
force_draw();
force_draw(0);
}
else { /* force_draw() is no good here... */
glDrawBuffer(GL_FRONT);

@ -143,7 +143,7 @@ void winqreadsoundspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
first= 0;
CFRA= cfra;
update_for_newframe();
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_VIEW3D, 1);
}
} while(get_mbut() & mousebut);

@ -1444,7 +1444,7 @@ void mesh_selectionCB(int selecting, Object *editobj, short *mval, float rad)
EM_selectmode_flush();
draw_sel_circle(0, 0, 0, 0, 0); /* signal */
force_draw();
force_draw(0);
}
@ -1510,7 +1510,7 @@ void nurbscurve_selectionCB(int selecting, Object *editobj, short *mval, float r
nu= nu->next;
}
draw_sel_circle(0, 0, 0, 0, 0); /* signal */
force_draw();
force_draw(0);
}
@ -1539,7 +1539,7 @@ void lattice_selectionCB(int selecting, Object *editobj, short *mval, float rad)
bp++;
}
draw_sel_circle(0, 0, 0, 0, 0); /* signal */
force_draw();
force_draw(0);
}
/** Callbacks for selection in Editmode */

@ -1809,7 +1809,7 @@ static void winqreadipospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if( cfra!=CFRA ) {
CFRA= cfra;
update_for_newframe();
force_draw_all();/* To make constraint sliders redraw */
force_draw_all(0); /* To make constraint sliders redraw */
}
} while(get_mbut() & mousebut);
@ -3131,7 +3131,7 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
first= 0;
CFRA= cfra;
force_draw();
force_draw(0);
update_for_newframe(); /* for audio scrubbing */
}
@ -3589,11 +3589,11 @@ static void winqreadimagespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
/* Make OpenGL aware of a changed texture */
free_realtime_image(sima->image);
/* Redraw this view and the 3D view */
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_VIEW3D, 0);
}
else {
/* Redraw only this view */
force_draw();
force_draw(0);
}
xy_prev[0] = xy_curr[0];
xy_prev[1] = xy_curr[1];
@ -3605,7 +3605,7 @@ static void winqreadimagespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
/* Make OpenGL aware of a changed texture */
free_realtime_image(sima->image);
/* Redraw this view and the 3D view */
force_draw_plus(SPACE_VIEW3D);
force_draw_plus(SPACE_VIEW3D, 1);
}
IMG_BrushDispose(brush);
IMG_CanvasDispose(canvas);
@ -4581,14 +4581,15 @@ void allspace(unsigned short event, short val)
}
}
void force_draw()
/* if header==1, then draw header for curarea too. Excepption for headerprint()... */
void force_draw(int header)
{
/* draws alle areas that something identical to curarea */
extern int afterqtest(short win, unsigned short evt); //editscreen.c
ScrArea *tempsa, *sa;
scrarea_do_windraw(curarea);
if(header) scrarea_do_headdraw(curarea);
tempsa= curarea;
sa= G.curscreen->areabase.first;
@ -4598,19 +4599,13 @@ void force_draw()
if( ((View3D *)sa->spacedata.first)->lay & ((View3D *)tempsa->spacedata.first)->lay) {
areawinset(sa->win);
scrarea_do_windraw(sa);
scrarea_do_headdraw(sa);
}
}
else if(sa->spacetype==SPACE_IPO) {
areawinset(sa->win);
scrarea_do_windraw(sa);
}
else if(sa->spacetype==SPACE_SEQ) {
areawinset(sa->win);
scrarea_do_windraw(sa);
}
else if(sa->spacetype==SPACE_ACTION) {
else {
areawinset(sa->win);
scrarea_do_windraw(sa);
scrarea_do_headdraw(sa);
}
}
sa= sa->next;
@ -4635,13 +4630,14 @@ void force_draw()
}
void force_draw_plus(int type)
/* if header==1, then draw header for curarea too. Excepption for headerprint()... */
void force_draw_plus(int type, int header)
{
/* draws all areas that show something like curarea AND areas of 'type' */
ScrArea *tempsa, *sa;
scrarea_do_windraw(curarea);
scrarea_do_headdraw(curarea);
if(header) scrarea_do_headdraw(curarea);
tempsa= curarea;
sa= G.curscreen->areabase.first;
@ -4660,7 +4656,8 @@ void force_draw_plus(int type)
screen_swapbuffers();
}
void force_draw_all(void)
/* if header==1, then draw header for curarea too. Excepption for headerprint()... */
void force_draw_all(int header)
{
/* redraws all */
ScrArea *tempsa, *sa;
@ -4672,7 +4669,7 @@ void force_draw_all(void)
while(sa) {
if(sa->headwin) {
scrarea_do_headdraw(sa);
scrarea_do_headchange(sa);
if(sa!=curarea || header) scrarea_do_headchange(sa);
}
if(sa->win) {
scrarea_do_windraw(sa);