[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55408] trunk/blender/source/blender: Fixes for context updates of the node editor:

Lukas Toenne lukas.toenne at googlemail.com
Tue Mar 19 11:42:34 CET 2013


Revision: 55408
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55408
Author:   lukastoenne
Date:     2013-03-19 10:42:33 +0000 (Tue, 19 Mar 2013)
Log Message:
-----------
Fixes for context updates of the node editor:
* If the node tree can be updated from context (tree has get_from_context callback defined), reset the pointers first to clear the editor path if no tree can be found.
* Stupid mistake: snode->from != snode->from is always false.
* Shader nodes context update: set the 'from' pointer to the active object, even if it doesn't have a material or node tree.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/nodes/texture/node_texture_tree.c

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2013-03-19 10:11:41 UTC (rev 55407)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2013-03-19 10:42:33 UTC (rev 55408)
@@ -530,11 +530,17 @@
 	}
 	
 	if (!(snode->flag & SNODE_PIN) || ntree == NULL) {
-		if (treetype->get_from_context)
+		if (treetype->get_from_context) {
+			/* reset and update from context */
+			ntree = NULL;
+			id = NULL;
+			from = NULL;
+			
 			treetype->get_from_context(C, treetype, &ntree, &id, &from);
+		}
 	}
 	
-	if (snode->nodetree != ntree || snode->id != id || snode->from != snode->from) {
+	if (snode->nodetree != ntree || snode->id != id || snode->from != from) {
 		ED_node_tree_start(snode, ntree, id, from);
 	}
 }

Modified: trunk/blender/source/blender/nodes/shader/node_shader_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/shader/node_shader_tree.c	2013-03-19 10:11:41 UTC (rev 55407)
+++ trunk/blender/source/blender/nodes/shader/node_shader_tree.c	2013-03-19 10:42:33 UTC (rev 55408)
@@ -80,15 +80,14 @@
 	
 	if (snode->shaderfrom == SNODE_SHADER_OBJECT) {
 		if (ob) {
+			*r_from = &ob->id;
 			if (ob->type == OB_LAMP) {
-				*r_from = &ob->id;
 				*r_id = ob->data;
 				*r_ntree = ((Lamp *)ob->data)->nodetree;
 			}
 			else {
 				Material *ma = give_current_material(ob, ob->actcol);
 				if (ma) {
-					*r_from = &ob->id;
 					*r_id = &ma->id;
 					*r_ntree = ma->nodetree;
 				}

Modified: trunk/blender/source/blender/nodes/texture/node_texture_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/texture/node_texture_tree.c	2013-03-19 10:11:41 UTC (rev 55407)
+++ trunk/blender/source/blender/nodes/texture/node_texture_tree.c	2013-03-19 10:42:33 UTC (rev 55408)
@@ -83,11 +83,13 @@
 		}
 	}
 	else if (snode->texfrom == SNODE_TEX_WORLD) {
-		tx = give_current_world_texture(scene->world);
-		if (tx) {
+		if (scene->world) {
 			*r_from = (ID *)scene->world;
-			*r_id = &tx->id;
-			*r_ntree = tx->nodetree;
+			tx = give_current_world_texture(scene->world);
+			if (tx) {
+				*r_id = &tx->id;
+				*r_ntree = tx->nodetree;
+			}
 		}
 	}
 	else {




More information about the Bf-blender-cvs mailing list