]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java
Sync git svn branch with SVN repository r33269.
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / ConnectionNode.java
index 128b0df90f931d871846dc71faf42d32cb57de2f..927619e02100f452329638522af2c804eb669ffe 100644 (file)
@@ -14,9 +14,12 @@ package org.simantics.scenegraph.g2d.nodes;
 import java.awt.Color;\r
 import java.awt.Composite;\r
 import java.awt.Stroke;\r
+import java.awt.geom.Point2D;\r
 \r
+import org.simantics.diagram.connection.RouteGraph;\r
 import org.simantics.scenegraph.INode;\r
 import org.simantics.scenegraph.g2d.IG2DNode;\r
+import org.simantics.scenegraph.g2d.events.MouseEvent;\r
 import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode;\r
 import org.simantics.scenegraph.utils.InitValueSupport;\r
 import org.simantics.scenegraph.utils.NodeUtil;\r
@@ -126,4 +129,25 @@ public class ConnectionNode extends SingleElementNode implements InitValueSuppor
         }\r
     }\r
 \r
+    @Override\r
+    protected boolean hitTest(MouseEvent event) {\r
+        if (!super.hitTest(event))\r
+            return false;\r
+\r
+        Point2D pos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double());\r
+        double tolerance = 0.5;\r
+        // TODO: change tolerance based on zoom level\r
+\r
+        for (IG2DNode child : getSortedNodes()) {\r
+            if (child instanceof RouteGraphNode) {\r
+                RouteGraphNode rgn = (RouteGraphNode) child;\r
+                RouteGraph rg = rgn.getRouteGraph();\r
+                Object pick = rg.pickLine(pos.getX(), pos.getY(), tolerance);\r
+                if (pick != null)\r
+                    return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
 }\r