Revision: 26401
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26401
Author:   blendix
Date:     2010-01-29 17:32:06 +0100 (Fri, 29 Jan 2010)

Log Message:
-----------
Fix #20549: selecting a texture node in a material node tree would
keep that texture locked as the current visible texture in the
texture buttons.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_texture.py
    trunk/blender/source/blender/blenkernel/BKE_texture.h
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/editors/space_buttons/buttons_context.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_select.c

Modified: trunk/blender/release/scripts/ui/properties_texture.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_texture.py      2010-01-29 
16:25:31 UTC (rev 26400)
+++ trunk/blender/release/scripts/ui/properties_texture.py      2010-01-29 
16:32:06 UTC (rev 26401)
@@ -87,15 +87,14 @@
 
     def draw(self, context):
         layout = self.layout
-
+        slot = context.texture_slot
+        node = context.texture_node
         space = context.space_data
         tex = context.texture
         wide_ui = context.region.width > narrowui
         idblock = context_tex_datablock(context)
-        tex_collection = space.pin_id == None and type(idblock) != 
bpy.types.Brush
+        tex_collection = space.pin_id == None and type(idblock) != 
bpy.types.Brush and not node
 
-        
-
         if tex_collection:
             row = layout.row()
 
@@ -113,6 +112,8 @@
             
         if tex_collection:
             col.template_ID(idblock, "active_texture", new="texture.new")
+        elif node:
+            col.template_ID(node, "texture", new="texture.new")
         elif idblock:
             col.template_ID(idblock, "texture", new="texture.new")
         
@@ -129,7 +130,6 @@
             split = layout.split(percentage=0.2)
 
             if tex.use_nodes:
-                slot = context.texture_slot
 
                 if slot:
                     split.label(text="Output:")

Modified: trunk/blender/source/blender/blenkernel/BKE_texture.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_texture.h       2010-01-29 
16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/blenkernel/BKE_texture.h       2010-01-29 
16:32:06 UTC (rev 26401)
@@ -31,6 +31,7 @@
 #ifndef BKE_TEXTURE_H
 #define BKE_TEXTURE_H
 
+struct bNode;
 struct Brush;
 struct ColorBand;
 struct EnvMap;
@@ -75,6 +76,8 @@
 struct Tex *give_current_world_texture(struct World *world);
 struct Tex *give_current_brush_texture(struct Brush *br);
 
+struct bNode *give_current_material_texture_node(struct Material *ma);
+
 int                     give_active_mtex(struct ID *id, struct MTex 
***mtex_ar, short *act);
 void            set_active_mtex(struct ID *id, short act);
 

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c    2010-01-29 
16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c    2010-01-29 
16:32:06 UTC (rev 26401)
@@ -858,6 +858,16 @@
        }
 }
 
+bNode *give_current_material_texture_node(Material *ma)
+{
+       bNode *node;
+       
+       if(ma && ma->use_nodes && ma->nodetree)
+               return nodeGetActiveID(ma->nodetree, ID_TE);
+       
+       return NULL;
+}
+
 Tex *give_current_material_texture(Material *ma)
 {
        MTex *mtex= NULL;
@@ -865,6 +875,9 @@
        bNode *node;
        
        if(ma && ma->use_nodes && ma->nodetree) {
+               /* first check texture, then material, this works together
+                  with a hack that clears the active ID flag for textures on
+                  making a material node active */
                node= nodeGetActiveID(ma->nodetree, ID_TE);
 
                if(node) {
@@ -877,6 +890,7 @@
                                ma= (Material*)node->id;
                }
        }
+
        if(ma) {
                mtex= ma->mtex[(int)(ma->texact)];
                if(mtex) tex= mtex->tex;

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_context.c        
2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_context.c        
2010-01-29 16:32:06 UTC (rev 26401)
@@ -35,6 +35,7 @@
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_modifier_types.h"
+#include "DNA_node_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -399,7 +400,6 @@
                        return 1;
                }
        }
-       /* TODO: material nodes */
 
        /* no path to a texture possible */
        return 0;
@@ -648,14 +648,30 @@
 
                return 1;
        }
+       else if(CTX_data_equals(member, "texture_node")) {
+               PointerRNA *ptr;
+
+               if((ptr=get_pointer_type(path, &RNA_Material))) {
+                       Material *ma= ptr->data;
+
+                       if(ma) {
+                               bNode *node= 
give_current_material_texture_node(ma);
+                               CTX_data_pointer_set(result, &ma->id, 
&RNA_Node, node);
+                       }
+               }
+
+               return 1;
+       }
        else if(CTX_data_equals(member, "texture_slot")) {
                PointerRNA *ptr;
 
                if((ptr=get_pointer_type(path, &RNA_Material))) {
-                       Material *ma= ptr->data; /* should this be made a 
different option? */
-                       Material *ma_node= give_node_material(ma);
-                       ma= ma_node?ma_node:ma;
+                       Material *ma= ptr->data;
 
+                       /* if we have a node material, get slot from material 
in material node */
+                       if(ma && ma->use_nodes && ma->nodetree)
+                               ma= give_node_material(ma);
+
                        if(ma)
                                CTX_data_pointer_set(result, &ma->id, 
&RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]);
                }

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2010-01-29 
16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2010-01-29 
16:32:06 UTC (rev 26401)
@@ -433,12 +433,12 @@
        if(node->type!=NODE_GROUP) {
                /* tree specific activate calls */
                if(snode->treetype==NTREE_SHADER) {
-                       // XXX
-#if 0
-                       
                        /* when we select a material, active texture is 
cleared, for buttons */
                        if(node->id && GS(node->id->name)==ID_MA)
                                nodeClearActiveID(snode->edittree, ID_TE);
+
+                       // XXX
+#if 0
                        if(node->id)
                                ; // XXX BIF_preview_changed(-1);       /* temp 
hack to force texture preview to update */
                        

Modified: trunk/blender/source/blender/editors/space_node/node_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_select.c       
2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_node/node_select.c       
2010-01-29 16:32:06 UTC (rev 26401)
@@ -122,7 +122,7 @@
 
        /* WATCH THIS, there are a few other ways to change the active material 
*/
        if(node) {
-               if (node->id && GS(node->id->name)== ID_MA) {
+               if (node->id && ELEM(GS(node->id->name), ID_MA, ID_TE)) {
                        WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING_DRAW, 
node->id);
                }
        }


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

Reply via email to