[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56115] trunk/blender/source/blender: Fix for #34911, Compositor with multiple views autozooms to node when creating a link.
Lukas Toenne
lukas.toenne at googlemail.com
Wed Apr 17 19:12:13 CEST 2013
Revision: 56115
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56115
Author: lukastoenne
Date: 2013-04-17 17:12:12 +0000 (Wed, 17 Apr 2013)
Log Message:
-----------
Fix for #34911, Compositor with multiple views autozooms to node when creating a link. In order to allow node trees have different offsets in different editor instances, the view_center is now stored primarily in the bNodeTreePath struct for each tree in a node space. The view_center in bNodeTree is only used as an initial setting when opening a node group or switching node trees.
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_node/node_draw.c
trunk/blender/source/blender/editors/space_node/space_node.c
trunk/blender/source/blender/makesdna/DNA_space_types.h
Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c 2013-04-17 15:55:10 UTC (rev 56114)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c 2013-04-17 17:12:12 UTC (rev 56115)
@@ -1194,12 +1194,12 @@
BLF_draw_default(30, 30, 0.0f, info, sizeof(info));
}
-static void snode_setup_v2d(SpaceNode *snode, ARegion *ar, float centerx, float centery)
+static void snode_setup_v2d(SpaceNode *snode, ARegion *ar, float center[2])
{
View2D *v2d = &ar->v2d;
/* shift view to node tree center */
- UI_view2d_setcenter(v2d, centerx, centery);
+ UI_view2d_setcenter(v2d, center[0], center[1]);
UI_view2d_view_ortho(v2d);
/* aspect+font, set each time */
@@ -1274,43 +1274,47 @@
bNodeLinkDrag *nldrag;
LinkData *linkdata;
+ path = snode->treepath.last;
+
/* current View2D center, will be set temporarily for parent node trees */
UI_view2d_getcenter(v2d, ¢er[0], ¢er[1]);
- /* store new view center in current edittree */
+ /* store new view center in path and current edittree */
+ copy_v2_v2(path->view_center, center);
if (snode->edittree)
copy_v2_v2(snode->edittree->view_center, center);
depth = 0;
- path = snode->treepath.last;
while (path->prev && depth < max_depth) {
path = path->prev;
++depth;
}
+
/* parent node trees in the background */
- for (curdepth = depth; curdepth >= 0; path = path->next, --curdepth) {
+ for (curdepth = depth; curdepth > 0; path = path->next, --curdepth) {
ntree = path->nodetree;
-
if (ntree) {
- snode_setup_v2d(snode, ar, ntree->view_center[0], ntree->view_center[1]);
+ snode_setup_v2d(snode, ar, path->view_center);
- if (curdepth == 0) {
- /* grid, uses theme color based on node path depth */
- UI_view2d_multi_grid_draw(v2d, (depth > 0 ? TH_NODE_GROUP : TH_BACK), U.widget_unit, 5, 2);
-
- /* backdrop */
- draw_nodespace_back_pix(C, ar, snode);
- }
-
draw_nodetree(C, ar, ntree, path->parent_key);
- if (curdepth > 0)
- draw_group_overlay(C, ar);
+ draw_group_overlay(C, ar);
}
}
- /* reset View2D */
- UI_view2d_setcenter(v2d, center[0], center[1]);
+ /* top-level edit tree */
+ ntree = path->nodetree;
+ if (ntree) {
+ snode_setup_v2d(snode, ar, center);
+
+ /* grid, uses theme color based on node path depth */
+ UI_view2d_multi_grid_draw(v2d, (depth > 0 ? TH_NODE_GROUP : TH_BACK), U.widget_unit, 5, 2);
+
+ /* backdrop */
+ draw_nodespace_back_pix(C, ar, snode);
+
+ draw_nodetree(C, ar, ntree, path->parent_key);
+ }
/* temporary links */
glEnable(GL_BLEND);
Modified: trunk/blender/source/blender/editors/space_node/space_node.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/space_node.c 2013-04-17 15:55:10 UTC (rev 56114)
+++ trunk/blender/source/blender/editors/space_node/space_node.c 2013-04-17 17:12:12 UTC (rev 56115)
@@ -75,8 +75,13 @@
path = MEM_callocN(sizeof(bNodeTreePath), "node tree path");
path->nodetree = ntree;
path->parent_key = NODE_INSTANCE_KEY_BASE;
+
+ /* copy initial offset from bNodeTree */
+ copy_v2_v2(path->view_center, ntree->view_center);
+
if (id)
BLI_strncpy(path->node_name, id->name + 2, sizeof(path->node_name));
+
BLI_addtail(&snode->treepath, path);
}
@@ -85,7 +90,6 @@
snode->id = id;
snode->from = from;
- /* listener updates the View2D center from edittree */
WM_main_add_notifier(NC_SCENE | ND_NODES, NULL);
}
@@ -105,12 +109,14 @@
else
path->parent_key = NODE_INSTANCE_KEY_BASE;
+ /* copy initial offset from bNodeTree */
+ copy_v2_v2(path->view_center, ntree->view_center);
+
BLI_addtail(&snode->treepath, path);
/* update current tree */
snode->edittree = ntree;
- /* listener updates the View2D center from edittree */
WM_main_add_notifier(NC_SCENE | ND_NODES, NULL);
}
@@ -205,20 +211,15 @@
void snode_group_offset(SpaceNode *snode, float *x, float *y)
{
bNodeTreePath *path = snode->treepath.last;
- float cx, cy;
- if (path) {
- cx = path->nodetree->view_center[0];
- cy = path->nodetree->view_center[1];
-
- if (path->prev) {
- *x = cx - path->prev->nodetree->view_center[0];
- *y = cy - path->prev->nodetree->view_center[1];
- return;
- }
+ if (path && path->prev) {
+ float dcenter[2];
+ sub_v2_v2v2(dcenter, path->view_center, path->prev->view_center);
+ *x = dcenter[0];
+ *y = dcenter[1];
}
-
- *x = *y = 0.0f;
+ else
+ *x = *y = 0.0f;
}
/* ******************** manage regions ********************* */
@@ -374,9 +375,10 @@
switch (wmn->data) {
case ND_NODES: {
ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
+ bNodeTreePath *path = snode->treepath.last;
/* shift view to node tree center */
- if (ar && snode->edittree)
- UI_view2d_setcenter(&ar->v2d, snode->edittree->view_center[0], snode->edittree->view_center[1]);
+ if (ar && path)
+ UI_view2d_setcenter(&ar->v2d, path->view_center[0], path->view_center[1]);
ED_area_tag_refresh(sa);
break;
Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h 2013-04-17 15:55:10 UTC (rev 56114)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h 2013-04-17 17:12:12 UTC (rev 56115)
@@ -891,6 +891,7 @@
struct bNodeTree *nodetree;
bNodeInstanceKey parent_key; /* base key for nodes in this tree instance */
int pad;
+ float view_center[2]; /* v2d center point, so node trees can have different offsets in editors */
/* XXX this is not automatically updated when node names are changed! */
char node_name[64]; /* MAX_NAME */
} bNodeTreePath;
More information about the Bf-blender-cvs
mailing list