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/node_draw.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/node_draw.c')
-rw-r--r--source/blender/editors/space_node/node_draw.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 39b12b321dd..1f19374be17 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1194,12 +1194,12 @@ static void draw_tree_path(SpaceNode *snode)
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 @@ void drawnodespace(const bContext *C, ARegion *ar)
bNodeLinkDrag *nldrag;
LinkData *linkdata;
+ path = snode->treepath.last;
+
/* current View2D center, will be set temporarily for parent node trees */
UI_view2d_getcenter(v2d, &center[0], &center[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]);
-
- 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);
- }
+ snode_setup_v2d(snode, ar, path->view_center);
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);