[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26401] trunk/blender: Fix #20549: selecting a texture node in a material node tree would
Brecht Van Lommel
brecht at blender.org
Fri Jan 29 17:32:08 CET 2010
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);
}
}
More information about the Bf-blender-cvs
mailing list