diff --git a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java index 3fd8a0fba..83fb2f250 100644 --- a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java +++ b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java @@ -355,4 +355,11 @@ public class VisualElement implements Drawable, Moveable, AttributeListener { elementAttributes.set(Keys.ROTATE, new Rotation(rotate)); minMax = null; } + + /** + * @return true if you can interact with this element + */ + public boolean isIntractable() { + return interactor != null; + } } diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 9cba62d00..9e8f0f593 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -1019,21 +1019,30 @@ public class CircuitComponent extends JComponent { @Override void pressed(MouseEvent e) { - VisualElement ve = circuit.getElementAt(getPosVector(e)); + VisualElement ve = getIntractableElementAt(e); if (ve != null) interact(e, ve::elementPressed); } + private VisualElement getIntractableElementAt(MouseEvent e) { + List elementList = circuit.getElementListAt(getPosVector(e)); + for (VisualElement ve : elementList) { + if (ve.isIntractable()) + return ve; + } + return null; + } + @Override void released(MouseEvent e) { - VisualElement ve = circuit.getElementAt(getPosVector(e)); + VisualElement ve = getIntractableElementAt(e); if (ve != null) interact(e, ve::elementReleased); } @Override void clicked(MouseEvent e) { - VisualElement ve = circuit.getElementAt(getPosVector(e)); + VisualElement ve = getIntractableElementAt(e); if (ve != null) interact(e, ve::elementClicked); }