diff --git a/core/src/main/java/edu/umd/cs/piccolo/PNode.java b/core/src/main/java/edu/umd/cs/piccolo/PNode.java index 8fc3b93..efb39ee 100644 --- a/core/src/main/java/edu/umd/cs/piccolo/PNode.java +++ b/core/src/main/java/edu/umd/cs/piccolo/PNode.java @@ -2722,7 +2722,7 @@ * @return true if this node or one of its descendents was picked. */ public boolean fullPick(final PPickPath pickPath) { - if ((getPickable() || getChildrenPickable()) && fullIntersects(pickPath.getPickBounds())) { + if (getVisible() && (getPickable() || getChildrenPickable()) && fullIntersects(pickPath.getPickBounds())) { pickPath.pushNode(this); pickPath.pushTransform(transform); diff --git a/core/src/test/java/edu/umd/cs/piccolo/PNodeTest.java b/core/src/test/java/edu/umd/cs/piccolo/PNodeTest.java index 6bd56ac..a33fe5c 100644 --- a/core/src/test/java/edu/umd/cs/piccolo/PNodeTest.java +++ b/core/src/test/java/edu/umd/cs/piccolo/PNodeTest.java @@ -29,6 +29,7 @@ package edu.umd.cs.piccolo; import java.awt.Color; +import java.awt.Dimension; import java.awt.Graphics; import java.awt.GraphicsEnvironment; import java.awt.geom.AffineTransform; @@ -52,6 +53,7 @@ import edu.umd.cs.piccolo.activities.PTransformActivity; import edu.umd.cs.piccolo.activities.PColorActivity.Target; import edu.umd.cs.piccolo.event.PBasicInputEventHandler; +import edu.umd.cs.piccolo.event.PInputEvent; import edu.umd.cs.piccolo.util.PAffineTransform; import edu.umd.cs.piccolo.util.PAffineTransformException; import edu.umd.cs.piccolo.util.PBounds; @@ -1290,4 +1292,25 @@ node.setOccluded(true); assertTrue(node.getOccluded()); } + + public void testHiddenNodesAreNotPickable() { + PCanvas canvas = new PCanvas(); + canvas.setBounds(0, 0, 400, 400); + canvas.setPreferredSize(new Dimension(400, 400)); + PNode node1 = new PNode(); + node1.setBounds(0, 0, 100, 100); + node1.setPaint(Color.RED); + canvas.getLayer().addChild(node1); + + PNode node2 = (PNode) node1.clone(); + node2.setPaint(Color.BLUE); + + PLayer layer2 = new PLayer(); + layer2.addChild(node2); + layer2.setVisible(false); + canvas.getCamera().addLayer(layer2); + + PPickPath path = canvas.getCamera().pick(5, 5, 5); + assertSame(node1, path.getPickedNode()); + } }