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:
Diffstat (limited to 'source/blender/editors/space_node/node_draw.c')
-rw-r--r--source/blender/editors/space_node/node_draw.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index c4a7f2cb473..024db35a084 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -197,28 +197,16 @@ static void node_uiblocks_init(const bContext *C, bNodeTree *ntree)
bNode *node;
char str[32];
- /* add node uiBlocks in reverse order - prevents events going to overlapping nodes */
+ /* add node uiBlocks in drawing order - prevents events going to overlapping nodes */
- /* process selected nodes first so they're at the start of the uiblocks list */
- for(node= ntree->nodes.last; node; node= node->prev) {
-
- if (node->flag & NODE_SELECT) {
+ for(node= ntree->nodes.first; node; node=node->next) {
/* ui block */
sprintf(str, "node buttons %p", (void *)node);
node->block= uiBeginBlock(C, CTX_wm_region(C), str, UI_EMBOSS);
uiBlockSetHandleFunc(node->block, do_node_internal_buttons, node);
- }
- }
-
- /* then the rest */
- for(node= ntree->nodes.last; node; node= node->prev) {
-
- if (!(node->flag & (NODE_GROUP_EDIT|NODE_SELECT))) {
- /* ui block */
- sprintf(str, "node buttons %p", (void *)node);
- node->block= uiBeginBlock(C, CTX_wm_region(C), str, UI_EMBOSS);
- uiBlockSetHandleFunc(node->block, do_node_internal_buttons, node);
- }
+
+ /* this cancels events for background nodes */
+ uiBlockSetFlag(node->block, UI_BLOCK_CLIP_EVENTS);
}
}
@@ -339,6 +327,15 @@ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node)
node->totr.xmax= locx + node->width;
node->totr.ymax= locy;
node->totr.ymin= MIN2(dy, locy-2*NODE_DY);
+
+ /* Set the block bounds to clip mouse events from underlying nodes.
+ * Add a margin for sockets on each side.
+ */
+ uiExplicitBoundsBlock(node->block,
+ node->totr.xmin - NODE_SOCKSIZE,
+ node->totr.ymin,
+ node->totr.xmax + NODE_SOCKSIZE,
+ node->totr.ymax);
}
/* based on settings in node, sets drawing rect info. each redraw! */
@@ -391,6 +388,15 @@ static void node_update_hidden(bNode *node)
rad+= drad;
}
}
+
+ /* Set the block bounds to clip mouse events from underlying nodes.
+ * Add a margin for sockets on each side.
+ */
+ uiExplicitBoundsBlock(node->block,
+ node->totr.xmin - NODE_SOCKSIZE,
+ node->totr.ymin,
+ node->totr.xmax + NODE_SOCKSIZE,
+ node->totr.ymax);
}
void node_update_default(const bContext *C, bNodeTree *ntree, bNode *node)