mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-10 05:15:51 -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.InValue;
|
||||||
import de.neemann.digital.core.io.Out;
|
import de.neemann.digital.core.io.Out;
|
||||||
import de.neemann.digital.core.switching.Switch;
|
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.elements.*;
|
||||||
import de.neemann.digital.draw.graphics.Polygon;
|
import de.neemann.digital.draw.graphics.Polygon;
|
||||||
import de.neemann.digital.draw.graphics.Vector;
|
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.library.*;
|
||||||
import de.neemann.digital.draw.model.Net;
|
import de.neemann.digital.draw.model.Net;
|
||||||
import de.neemann.digital.draw.model.NetList;
|
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.Drawable;
|
||||||
import de.neemann.digital.draw.shapes.InputShape;
|
import de.neemann.digital.draw.shapes.InputShape;
|
||||||
import de.neemann.digital.draw.shapes.ShapeFactory;
|
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);
|
(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
|
* @return the circuit used
|
||||||
*/
|
*/
|
||||||
@ -1846,6 +1863,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
|
|||||||
private final class MouseControllerInsertElement extends MouseController {
|
private final class MouseControllerInsertElement extends MouseController {
|
||||||
private VisualElement element;
|
private VisualElement element;
|
||||||
private Vector delta;
|
private Vector delta;
|
||||||
|
private boolean minRaster;
|
||||||
|
|
||||||
private MouseControllerInsertElement(Cursor cursor) {
|
private MouseControllerInsertElement(Cursor cursor) {
|
||||||
super(cursor);
|
super(cursor);
|
||||||
@ -1857,6 +1875,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
|
|||||||
delta = null;
|
delta = null;
|
||||||
deleteAction.setEnabled(true);
|
deleteAction.setEnabled(true);
|
||||||
rotateAction.setEnabled(true);
|
rotateAction.setEnabled(true);
|
||||||
|
minRaster = needsMinRaster(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1869,7 +1888,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
|
|||||||
GraphicMinMax minMax = element.getMinMax(false);
|
GraphicMinMax minMax = element.getMinMax(false);
|
||||||
delta = element.getPos().sub(minMax.getMax());
|
delta = element.getPos().sub(minMax.getMax());
|
||||||
}
|
}
|
||||||
element.setPos(pos.add(delta));
|
element.setPos(toMinRaster(pos.add(delta), minRaster));
|
||||||
repaint();
|
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) {
|
private void insertWires(VisualElement element) {
|
||||||
if (tutorialListener == null) {
|
if (tutorialListener == null) {
|
||||||
Modifications.Builder<Circuit> wires = new Modifications.Builder<>(Lang.get("lib_wires"));
|
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 VisualElement visualElement;
|
||||||
private Vector delta;
|
private Vector delta;
|
||||||
private VisualElement originalVisualElement;
|
private VisualElement originalVisualElement;
|
||||||
|
private boolean minRaster;
|
||||||
|
|
||||||
private MouseControllerMoveElement(Cursor cursor) {
|
private MouseControllerMoveElement(Cursor cursor) {
|
||||||
super(cursor);
|
super(cursor);
|
||||||
@ -1975,6 +2004,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
|
|||||||
deleteAction.setEnabled(true);
|
deleteAction.setEnabled(true);
|
||||||
rotateAction.setEnabled(true);
|
rotateAction.setEnabled(true);
|
||||||
copyAction.setEnabled(true);
|
copyAction.setEnabled(true);
|
||||||
|
minRaster = needsMinRaster(visualElement);
|
||||||
graphicHasChanged();
|
graphicHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1995,7 +2025,7 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib
|
|||||||
void moved(MouseEvent e) {
|
void moved(MouseEvent e) {
|
||||||
if (!isLocked()) {
|
if (!isLocked()) {
|
||||||
Vector pos = getPosVector(e);
|
Vector pos = getPosVector(e);
|
||||||
visualElement.setPos(pos.add(delta));
|
visualElement.setPos(toMinRaster(pos.add(delta), minRaster));
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user