Revision: 21747
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21747
Author:   blendix
Date:     2009-07-21 03:57:46 +0200 (Tue, 21 Jul 2009)

Log Message:
-----------
2.5: Texture buttons preview now has an option to display the
texture, the material, or both side by side.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_texture.py
    
branches/blender2.5/blender/source/blender/editors/include/ED_previewrender.h
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_material_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: branches/blender2.5/blender/release/ui/buttons_texture.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_texture.py   2009-07-21 
01:52:05 UTC (rev 21746)
+++ branches/blender2.5/blender/release/ui/buttons_texture.py   2009-07-21 
01:57:46 UTC (rev 21747)
@@ -16,15 +16,19 @@
        def draw(self, context):
                layout = self.layout
                tex = context.texture
+               mat = context.material
                
-               layout.template_preview(tex)
+               if mat:
+                       layout.template_preview(tex, parent=mat)
+               else:
+                       layout.template_preview(tex)
 
 class TEXTURE_PT_context_texture(TextureButtonsPanel):
        __idname__= "TEXTURE_PT_context_texture"
        __no_header__ = True
 
        def poll(self, context):
-               return (context.material or context.world or context.lamp)
+               return (context.material or context.world or context.lamp or 
context.texture)
 
        def draw(self, context):
                layout = self.layout

Modified: 
branches/blender2.5/blender/source/blender/editors/include/ED_previewrender.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/include/ED_previewrender.h   
    2009-07-21 01:52:05 UTC (rev 21746)
+++ 
branches/blender2.5/blender/source/blender/editors/include/ED_previewrender.h   
    2009-07-21 01:57:46 UTC (rev 21747)
@@ -70,9 +70,9 @@
 void ED_preview_init_dbase(void);
 void ED_preview_free_dbase(void);
 
-void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID 
*id, int sizex, int sizey);
+void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID 
*id, struct ID *parent, int sizex, int sizey);
 void ED_preview_iconrender(struct Scene *scene, struct ID *id, int *rect, int 
sizex, int sizey);
 
-void ED_preview_draw(const struct bContext *C, void *idp, rcti *rect);
+void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, rcti 
*rect);
 
 #endif

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-07-21 01:52:05 UTC (rev 21746)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-07-21 01:57:46 UTC (rev 21747)
@@ -481,7 +481,7 @@
 
 void   uiButSetCompleteFunc(uiBut *but,                uiButCompleteFunc func, 
void *arg);
 
-void   uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct 
bContext *C, void *, struct rcti *rect));
+void   uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const struct 
bContext *C, void *, void *, struct rcti *rect), void *arg);
 
 /* Autocomplete
  *
@@ -619,7 +619,7 @@
        char *newop, char *unlinkop);
 uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr);
 uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
-void uiTemplatePreview(uiLayout *layout, struct ID *id);
+void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent);
 void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand);
 void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int 
type);
 void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char 
*propname);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-07-21 01:52:05 UTC (rev 21746)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-07-21 01:57:46 UTC (rev 21747)
@@ -2772,9 +2772,10 @@
        
 }
 
-void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, 
void *idv, rcti *rect))
+void uiBlockSetDrawExtraFunc(uiBlock *block, void (*func)(const bContext *C, 
void *idv, void *argv, rcti *rect), void *arg)
 {
        block->drawextra= func;
+       block->drawextra_arg= arg;
 }
 
 void uiButSetFunc(uiBut *but, uiButHandleFunc func, void *arg1, void *arg2)

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-07-21 01:52:05 UTC (rev 21746)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-07-21 01:57:46 UTC (rev 21747)
@@ -269,7 +269,8 @@
        int (*block_event_func)(const struct bContext *C, struct uiBlock *, 
struct wmEvent *);
        
        /* extra draw function for custom blocks */
-       void (*drawextra)(const struct bContext *C, void *idv, rcti *rect);
+       void (*drawextra)(const struct bContext *C, void *idv, void *argv, rcti 
*rect);
+       void *drawextra_arg;
 
        int afterval, flag;
        

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-07-21 01:52:05 UTC (rev 21746)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-07-21 01:57:46 UTC (rev 21747)
@@ -1169,32 +1169,47 @@
        }
 }
 
-void uiTemplatePreview(uiLayout *layout, ID *id)
+void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent)
 {
        uiLayout *row, *col;
        uiBlock *block;
        Material *ma;
+       ID *pid, *pparent;
 
        if(id && !ELEM4(GS(id->name), ID_MA, ID_TE, ID_WO, ID_LA)) {
                printf("uiTemplatePreview: expected ID of type material, 
texture, lamp or world.\n");
                return;
        }
 
+       /* decide what to render */
+       pid= id;
+       pparent= NULL;
+
+       if((id && GS(id->name) == ID_TE) && (parent && GS(parent->name) == 
ID_MA)) {
+               ma= ((Material*)parent);
+
+               if(ma->pr_texture == MA_PR_MATERIAL)
+                       pid= parent;
+               else if(ma->pr_texture == MA_PR_BOTH)
+                       pparent= parent;
+       }
+
+       /* layout */
        block= uiLayoutGetBlock(layout);
-
        row= uiLayoutRow(layout, 0);
-
        col= uiLayoutColumn(row, 0);
        uiLayoutSetKeepAspect(col, 1);
        
-       uiDefBut(block, BUT_EXTRA, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, id, 
0.0, 0.0, 0, 0, "");
-       uiBlockSetDrawExtraFunc(block, ED_preview_draw);
-       
+       /* add preview */
+       uiDefBut(block, BUT_EXTRA, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, pid, 
0.0, 0.0, 0, 0, "");
+       uiBlockSetDrawExtraFunc(block, ED_preview_draw, pparent);
        uiBlockSetHandleFunc(block, do_preview_buttons, NULL);
        
+       /* add buttons */
        if(id) {
-               if(GS(id->name) == ID_MA) {
-                       ma= (Material*)id;
+               if(GS(id->name) == ID_MA || (parent && GS(parent->name) == 
ID_MA)) {
+                       if(GS(id->name) == ID_MA) ma= (Material*)id;
+                       else ma= (Material*)parent;
 
                        uiLayoutColumn(row, 1);
 
@@ -1205,6 +1220,14 @@
                        uiDefIconButC(block, ROW, B_MATPRV, ICON_HAIR,      0, 
0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_HAIR, 0, 0, "Preview type: 
Hair strands");
                        uiDefIconButC(block, ROW, B_MATPRV, ICON_MATSPHERE, 0, 
0,UI_UNIT_X*1.5,UI_UNIT_Y, &(ma->pr_type), 10, MA_SPHERE_A, 0, 0, "Preview 
type: Large sphere with sky");
                }
+
+               if(GS(id->name) == ID_TE && (parent && GS(parent->name) == 
ID_MA)) {
+                       uiLayoutRow(layout, 1);
+
+                       uiDefButS(block, ROW, B_MATPRV, "Texture",  0, 
0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_TEXTURE, 0, 0, "");
+                       uiDefButS(block, ROW, B_MATPRV, "Material",  0, 
0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_MATERIAL, 0, 0, "");
+                       uiDefButS(block, ROW, B_MATPRV, "Both",  0, 
0,UI_UNIT_X*10,UI_UNIT_Y, &(ma->pr_texture), 10, MA_PR_BOTH, 0, 0, "");
+               }
        }
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-07-21 01:52:05 UTC (rev 21746)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-07-21 01:57:46 UTC (rev 21747)
@@ -2052,11 +2052,11 @@
        
        if(but->block->drawextra) {
                /* note: drawextra can change rect +1 or -1, to match round 
errors of existing previews */
-               but->block->drawextra(C, but->poin, rect);
+               but->block->drawextra(C, but->poin, but->block->drawextra_arg, 
rect);
                
                /* make mask to draw over image */
                UI_GetThemeColor3ubv(TH_BACK, col);
-               glColor3ubv(col);
+               glColor3ubv((unsigned char*)col);
                
                round_box__edges(&wtb, 15, rect, 0.0f, 4.0);
                widgetbase_outline(&wtb);

Modified: 
branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/preview/previewrender.c  
2009-07-21 01:52:05 UTC (rev 21746)
+++ branches/blender2.5/blender/source/blender/editors/preview/previewrender.c  
2009-07-21 01:57:46 UTC (rev 21747)
@@ -112,6 +112,7 @@
        
        Scene *scene;
        ID *id;
+       ID *parent;
        
        int sizex, sizey;
        int *pr_rect;
@@ -273,11 +274,10 @@
 
 /* call this with a pointer to initialize preview scene */
 /* call this with NULL to restore assigned ID pointers in preview scene */
-static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview 
*sp)
+static Scene *preview_prepare_scene(Scene *scene, ID *id, int id_type, 
ShaderPreview *sp)
 {
        Scene *sce;
        Base *base;
-       ID *id= sp?sp->id:NULL;
        
        if(pr_main==NULL) return NULL;
        
@@ -410,39 +410,75 @@
 
 /* new UI convention: draw is in pixel space already. */
 /* uses ROUNDBOX button in block to get the rect */
-void ED_preview_draw(const bContext *C, void *idp, rcti *rect)
+static int ed_preview_draw_rect(ScrArea *sa, Scene *sce, ID *id, int split, 
int first, rcti *rect, rcti *newrect)
 {
+       RenderResult rres;
+       char name[32];
+       int gamma_correct=0;
+       int offx=0, newx= rect->xmax-rect->xmin, newy= rect->ymax-rect->ymin;
+
+       if (id && GS(id->name) != ID_TE) {
+               /* exception: don't color manage texture previews - show the 
raw values */
+               if (sce) gamma_correct = sce->r.color_mgt_flag & 
R_COLOR_MANAGEMENT;
+       }
+
+       if(!split || first) sprintf(name, "Preview %p", sa);
+       else sprintf(name, "SecondPreview %p", sa);
+
+       if(split) {
+               if(first) {
+                       offx= 0;
+                       newx= newx/2;
+               }
+               else {
+                       offx= newx/2;
+                       newx= newx - newx/2;
+               }
+       }
+
+       RE_GetResultImage(RE_GetRender(name), &rres);
+
+       if(rres.rectf) {
+               
+               if(ABS(rres.rectx-newx)<2 && ABS(rres.recty-newy)<2) {
+                       newrect->xmax= MAX2(newrect->xmax, rect->xmin + 
rres.rectx + offx);
+                       newrect->ymax= MAX2(newrect->ymax, rect->ymin + 
rres.recty);
+

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to