mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-09 12:56:02 -04:00
easier placement of inputs and outputs in minified circuit shapes
This commit is contained in:
parent
4e17404783
commit
686c419bff
@ -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<Circuit> 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();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user