From 67d6cd9fcb121908fb2eaa5dc24804ee1cb51110 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Sep 2004 22:29:43 +0000 Subject: [PATCH] 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! --- source/blender/src/buttons_shading.c | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c index facb899d987..be1434eb27d 100644 --- a/source/blender/src/buttons_shading.c +++ b/source/blender/src/buttons_shading.c @@ -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 */ @@ -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;