Patch/proposal from matt ebb: on changes in material color/shading or lamp

it redraws 3d window appropriate. That it didnt do that was again some
convention from 1995 :)
Result is actually very nice, with cool visual feedback.

I've coded it very friendly, with checks for minimal redraws to do. If thats
still giving interactive flow issues, let me know!
This commit is contained in:
2004-09-29 22:29:43 +00:00
parent b5f98248a3
commit 67d6cd9fcb

View File

@@ -145,6 +145,27 @@ static char *mapto_blendtype_pup(void)
return (string);
}
static void shade_buttons_change_3d(void)
{
Object *ob= OBACT;
ScrArea *sa;
if(ob==NULL) return;
for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
if(sa->spacetype==SPACE_VIEW3D) {
View3D *v3d= sa->spacedata.first;
if(v3d->drawtype >= OB_SOLID) addqueue(sa->win, REDRAW, 0);
if(v3d->drawtype == OB_SHADED) {
if(ob->type==OB_LAMP) reshadeall_displist();
else freedisplist(&ob->disp);
}
}
}
}
/* *************************** TEXTURE ******************************** */
Tex *cur_imatex=0;
@@ -348,7 +369,6 @@ static void drawcolorband_cb(void)
}
}
static void do_colorbandbuts(ColorBand *coba, unsigned short event)
{
uiBlock *block;
@@ -435,6 +455,7 @@ static void do_colorbandbuts(ColorBand *coba, unsigned short event)
}
allqueue(REDRAWBUTSSHADING, 0);
BIF_all_preview_changed();
shade_buttons_change_3d();
}
break;
}
@@ -516,6 +537,7 @@ void do_texbuts(unsigned short event)
case B_TEXREDR_PRV:
allqueue(REDRAWBUTSSHADING, 0);
BIF_all_preview_changed();
shade_buttons_change_3d();
break;
case B_TEXIMABROWSE:
if(tex) {
@@ -644,7 +666,7 @@ void do_texbuts(unsigned short event)
if(tex==0) return;
if(tex->coba==0) tex->coba= add_colorband();
allqueue(REDRAWBUTSSHADING, 0);
BIF_all_preview_changed();
BIF_all_preview_changed(); // also ramps, so we do this
break;
case B_ADDCOLORBAND:
@@ -2342,6 +2364,7 @@ static void lamp_panel_preview(Object *ob, Lamp *la)
/* ****************** MATERIAL ***************** */
void do_matbuts(unsigned short event)
{
static short mtexcopied=0;
@@ -2363,10 +2386,12 @@ void do_matbuts(unsigned short event)
case B_MATPRV:
/* this event also used by lamp, tex and sky */
BIF_preview_changed(G.buts);
shade_buttons_change_3d();
break;
case B_MATPRV_DRAW:
BIF_preview_changed(G.buts);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
case B_MATHALO:
/* when halo is disabled, clear star flag, this is the same as MA_FACETEXTURE <blush> */
@@ -2374,6 +2399,7 @@ void do_matbuts(unsigned short event)
if((ma->mode & MA_HALO)==0) ma->mode &= ~MA_STAR;
BIF_preview_changed(G.buts);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
case B_TEXCLEAR:
ma= G.buts->lockpoin;
@@ -2444,6 +2470,7 @@ void do_matbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
BIF_all_preview_changed();
shade_buttons_change_3d();
}
break;