From 686c419bffe458aa0fc34d78b678f6eed7846f26 Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 8 Nov 2023 07:53:28 +0100 Subject: [PATCH] easier placement of inputs and outputs in minified circuit shapes --- .../gui/components/CircuitComponent.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) 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 25d289fd7..65c45eba5 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -12,6 +12,7 @@ import de.neemann.digital.core.io.In; import de.neemann.digital.core.io.InValue; import de.neemann.digital.core.io.Out; import de.neemann.digital.core.switching.Switch; +import de.neemann.digital.core.wiring.Clock; import de.neemann.digital.draw.elements.*; import de.neemann.digital.draw.graphics.Polygon; import de.neemann.digital.draw.graphics.Vector; @@ -19,6 +20,7 @@ import de.neemann.digital.draw.graphics.*; import de.neemann.digital.draw.library.*; import de.neemann.digital.draw.model.Net; import de.neemann.digital.draw.model.NetList; +import de.neemann.digital.draw.shapes.CustomCircuitShapeType; import de.neemann.digital.draw.shapes.Drawable; import de.neemann.digital.draw.shapes.InputShape; import de.neemann.digital.draw.shapes.ShapeFactory; @@ -1035,6 +1037,21 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib (int) Math.round((double) pos.y / SIZE) * SIZE); } + /** + * rounds the given vector to the raster in minimized circuit shapes + * + * @param pos the vector + * @param minRaster if set to false the given values is returned + * @return pos round to raster + */ + public static Vector toMinRaster(Vector pos, boolean minRaster) { + if (!minRaster) + return pos; + final int s = SIZE * 2; + return new Vector((int) Math.round((double) pos.x / s) * s, + (int) Math.round((double) pos.y / s) * s); + } + /** * @return the circuit used */ @@ -1846,6 +1863,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib private final class MouseControllerInsertElement extends MouseController { private VisualElement element; private Vector delta; + private boolean minRaster; private MouseControllerInsertElement(Cursor cursor) { super(cursor); @@ -1857,6 +1875,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib delta = null; deleteAction.setEnabled(true); rotateAction.setEnabled(true); + minRaster = needsMinRaster(element); } @Override @@ -1869,7 +1888,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib GraphicMinMax minMax = element.getMinMax(false); delta = element.getPos().sub(minMax.getMax()); } - element.setPos(pos.add(delta)); + element.setPos(toMinRaster(pos.add(delta), minRaster)); repaint(); } @@ -1907,6 +1926,15 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib } + private boolean needsMinRaster(VisualElement element) { + if (getCircuit().getAttributes().get(Keys.SHAPE_TYPE) != CustomCircuitShapeType.MINIMIZED) + return false; + + return element.equalsDescription(In.DESCRIPTION) || + element.equalsDescription(Out.DESCRIPTION) || + element.equalsDescription(Clock.DESCRIPTION); + } + private void insertWires(VisualElement element) { if (tutorialListener == null) { Modifications.Builder wires = new Modifications.Builder<>(Lang.get("lib_wires")); @@ -1960,6 +1988,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib private VisualElement visualElement; private Vector delta; private VisualElement originalVisualElement; + private boolean minRaster; private MouseControllerMoveElement(Cursor cursor) { super(cursor); @@ -1975,6 +2004,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib deleteAction.setEnabled(true); rotateAction.setEnabled(true); copyAction.setEnabled(true); + minRaster = needsMinRaster(visualElement); graphicHasChanged(); } @@ -1995,7 +2025,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib void moved(MouseEvent e) { if (!isLocked()) { Vector pos = getPosVector(e); - visualElement.setPos(pos.add(delta)); + visualElement.setPos(toMinRaster(pos.add(delta), minRaster)); repaint(); } }