mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-18 09:24:42 -04:00
fixes an drag&draw issue in the k-map
This commit is contained in:
parent
036410ce57
commit
9e478d9f5a
@ -45,7 +45,7 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
private int cellSize;
|
private int cellSize;
|
||||||
private int xDrag;
|
private int xDrag;
|
||||||
private int yDrag;
|
private int yDrag;
|
||||||
private int startVar = -1;
|
private VarRect startVarRect = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance
|
* Creates a new instance
|
||||||
@ -109,8 +109,8 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
gr.fillRect(0, 0, width, height);
|
gr.fillRect(0, 0, width, height);
|
||||||
gr.setColor(Color.BLACK);
|
gr.setColor(Color.BLACK);
|
||||||
|
|
||||||
if (startVar >= 0)
|
if (startVarRect != null)
|
||||||
gr.drawString(vars.get(startVar).getIdentifier(), xDrag, yDrag);
|
startVarRect.fragment.draw(gr, xDrag, yDrag);
|
||||||
|
|
||||||
if (kv != null) {
|
if (kv != null) {
|
||||||
AffineTransform trans = gr.getTransform(); // store the old transform
|
AffineTransform trans = gr.getTransform(); // store the old transform
|
||||||
@ -267,7 +267,7 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
int xFr = row * cellSize + xPos - xOffs;
|
int xFr = row * cellSize + xPos - xOffs;
|
||||||
int yFr = col * cellSize + yPos - yOffs;
|
int yFr = col * cellSize + yPos - yOffs;
|
||||||
fr.draw(gr, xFr, yFr);
|
fr.draw(gr, xFr, yFr);
|
||||||
varPosList.add(new VarRect(var, xFr, yFr + fontMetrics.getDescent() - fr.getHeight(), fr.getWidth(), fr.getHeight()));
|
varPosList.add(new VarRect(var, xFr, yFr + fontMetrics.getDescent() - fr.getHeight(), fr.getWidth(), fr.getHeight(), fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GraphicsFormatter.Fragment getFragment(int var, boolean invert) {
|
private GraphicsFormatter.Fragment getFragment(int var, boolean invert) {
|
||||||
@ -312,9 +312,9 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
int row = kv.getCell(y, x).getBoolTableRow();
|
int row = kv.getCell(y, x).getBoolTableRow();
|
||||||
tableCellModifier.modify(boolTable, row);
|
tableCellModifier.modify(boolTable, row);
|
||||||
} else {
|
} else {
|
||||||
int varAt = findVarAt(mouseEvent);
|
VarRect varAt = findVarRect(mouseEvent);
|
||||||
if (varAt >= 0) {
|
if (varAt != null) {
|
||||||
mapLayout.toggleInvertByMouse(varAt);
|
mapLayout.toggleInvertByMouse(varAt.var);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,12 +323,12 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
startVar = findVarAt(e);
|
startVarRect = findVarRect(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(MouseEvent e) {
|
public void mouseDragged(MouseEvent e) {
|
||||||
if (startVar >= 0) {
|
if (startVarRect != null) {
|
||||||
xDrag = e.getX();
|
xDrag = e.getX();
|
||||||
yDrag = e.getY();
|
yDrag = e.getY();
|
||||||
repaint();
|
repaint();
|
||||||
@ -337,37 +337,44 @@ public class KarnaughMapComponent extends JComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
int endVar = findVarAt(e);
|
VarRect endVarRect = findVarRect(e);
|
||||||
if (endVar != startVar
|
if (startVarRect != null && endVarRect != null
|
||||||
&& endVar >= 0 && startVar >= 0
|
&& startVarRect.isValid(vars.size())
|
||||||
&& endVar < vars.size() && startVar <= vars.size()) {
|
&& endVarRect.isValid(vars.size())
|
||||||
mapLayout.swapByMouse(startVar, endVar);
|
&& startVarRect.var != endVarRect.var) {
|
||||||
startVar = -1;
|
mapLayout.swapByMouse(startVarRect.var, endVarRect.var);
|
||||||
|
startVarRect = null;
|
||||||
update();
|
update();
|
||||||
} else {
|
} else {
|
||||||
startVar = -1;
|
startVarRect = null;
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int findVarAt(MouseEvent e) {
|
private VarRect findVarRect(MouseEvent e) {
|
||||||
int x = e.getX() - xOffs;
|
int x = e.getX() - xOffs;
|
||||||
int y = e.getY() - yOffs;
|
int y = e.getY() - yOffs;
|
||||||
for (VarRect r : varPosList) {
|
for (VarRect r : varPosList) {
|
||||||
if (r.rect.contains(x, y))
|
if (r.rect.contains(x, y))
|
||||||
return r.var;
|
return r;
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class VarRect {
|
private static final class VarRect {
|
||||||
private final Rectangle rect;
|
private final Rectangle rect;
|
||||||
private final int var;
|
private final int var;
|
||||||
|
private final GraphicsFormatter.Fragment fragment;
|
||||||
|
|
||||||
private VarRect(int var, int x, int y, int width, int height) {
|
private VarRect(int var, int x, int y, int width, int height, GraphicsFormatter.Fragment fragment) {
|
||||||
this.var = var;
|
this.var = var;
|
||||||
rect = new Rectangle(x, y, width, height);
|
rect = new Rectangle(x, y, width, height);
|
||||||
|
this.fragment = fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValid(int size) {
|
||||||
|
return var >= 0 && var < size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user