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:
authorJacques Lucke <mail@jlucke.com>2018-12-20 12:55:30 +0300
committerJacques Lucke <mail@jlucke.com>2018-12-20 12:55:30 +0300
commitb0478664597f87c29512b3909f39aa54fd5098c8 (patch)
tree0a2545121420bab5fc004a0a90feb404f0834916 /source/blender/editors/space_node
parent7d8f57e0c013ef43d4d1f1b7afd0477d690e70c5 (diff)
Fix T58404: Node/Socket grabbing with Lasso tool
Reviewers: brecht Differential Revision: https://developer.blender.org/D4108
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r--source/blender/editors/space_node/node_select.c60
1 files changed, 39 insertions, 21 deletions
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index 465b7a6d789..1c92c153b11 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -89,6 +89,30 @@ static bNode *node_under_mouse_tweak(bNodeTree *ntree, int mx, int my)
return NULL;
}
+static bool is_position_over_node_or_socket(SpaceNode *snode, float mouse[2])
+{
+ if (node_under_mouse_tweak(snode->edittree, mouse[0], mouse[1])) {
+ return true;
+ }
+
+ bNode *node;
+ bNodeSocket *sock;
+ if (node_find_indicated_socket(snode, &node, &sock, mouse, SOCK_IN | SOCK_OUT)) {
+ return true;
+ }
+
+ return false;
+}
+
+static bool is_event_over_node_or_socket(bContext *C, const wmEvent *event)
+{
+ SpaceNode *snode = CTX_wm_space_node(C);
+ ARegion *ar = CTX_wm_region(C);
+ float mouse[2];
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &mouse[0], &mouse[1]);
+ return is_position_over_node_or_socket(snode, mouse);
+}
+
static void node_toggle(bNode *node)
{
nodeSetSelected(node, !(node->flag & SELECT));
@@ -559,26 +583,8 @@ static int node_box_select_invoke(bContext *C, wmOperator *op, const wmEvent *ev
{
const bool tweak = RNA_boolean_get(op->ptr, "tweak");
- if (tweak) {
- /* prevent initiating the box select if the mouse is over a node or
- * node socket. this allows box select on empty space, but drag-translate
- * on nodes */
- SpaceNode *snode = CTX_wm_space_node(C);
- ARegion *ar = CTX_wm_region(C);
- float mouse[2];
-
- UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &mouse[0], &mouse[1]);
-
- if (node_under_mouse_tweak(snode->edittree, mouse[0], mouse[1])) {
- return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
- }
-
- bNode *node;
- bNodeSocket *sock;
-
- if (node_find_indicated_socket(snode, &node, &sock, mouse, SOCK_IN | SOCK_OUT)) {
- return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
- }
+ if (tweak && is_event_over_node_or_socket(C, event)) {
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
return WM_gesture_box_invoke(C, op, event);
@@ -663,6 +669,17 @@ void NODE_OT_select_circle(wmOperatorType *ot)
/* ****** Lasso Select ****** */
+static int node_lasso_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ const bool tweak = RNA_boolean_get(op->ptr, "tweak");
+
+ if (tweak && is_event_over_node_or_socket(C, event)) {
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
+ }
+
+ return WM_gesture_lasso_invoke(C, op, event);
+}
+
static bool do_lasso_select_node(bContext *C, const int mcords[][2], short moves, bool select, bool extend)
{
SpaceNode *snode = CTX_wm_space_node(C);
@@ -733,7 +750,7 @@ void NODE_OT_select_lasso(wmOperatorType *ot)
ot->idname = "NODE_OT_select_lasso";
/* api callbacks */
- ot->invoke = WM_gesture_lasso_invoke;
+ ot->invoke = node_lasso_select_invoke;
ot->modal = WM_gesture_lasso_modal;
ot->exec = node_lasso_select_exec;
ot->poll = ED_operator_node_active;
@@ -744,6 +761,7 @@ void NODE_OT_select_lasso(wmOperatorType *ot)
/* properties */
WM_operator_properties_gesture_lasso_select(ot);
+ RNA_def_boolean(ot->srna, "tweak", 0, "Tweak", "Only activate when mouse is not over a node - useful for tweak gesture");
}
/* ****** Select/Deselect All ****** */