Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2013-04-17 21:12:12 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2013-04-17 21:12:12 +0400
commit2cf167cd21dae8403bcd628106d376faeb919b30 (patch)
tree27e7fed8a7511c2ec2c8d96c8b2bcb3f6e3c8efa /source/blender/editors/space_node/space_node.c
parent3d7803225122476e5ea3db8da2585fcaff7c7f59 (diff)
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.
Diffstat (limited to 'source/blender/editors/space_node/space_node.c')
-rw-r--r--source/blender/editors/space_node/space_node.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 680d577a3b6..e234b4255ed 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -75,8 +75,13 @@ void ED_node_tree_start(SpaceNode *snode, bNodeTree *ntree, ID *id, ID *from)
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 @@ void ED_node_tree_start(SpaceNode *snode, bNodeTree *ntree, ID *id, ID *from)
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 @@ void ED_node_tree_push(SpaceNode *snode, bNodeTree *ntree, bNode *gnode)
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 ED_node_tree_path_get_fixedbuf(SpaceNode *snode, char *value, int max_lengt
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 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
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;