fix drag of multiple selected shapes with shift #2

Merged
thib8956 merged 1 commits from test into master 2026-03-19 13:52:23 +00:00

View File

@@ -21,7 +21,7 @@ public class Controller {
private final ShapesView view; private final ShapesView view;
private final SCollection model; private final SCollection model;
private final Selection selection; private final Selection selection;
private boolean shiftPressed; private Point lastMousePos;
Controller(ShapesView view, SCollection model) { Controller(ShapesView view, SCollection model) {
this.view = view; this.view = view;
@@ -46,20 +46,16 @@ public class Controller {
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
handleKeyPressed(e); handleKeyPressed(e);
} }
@Override
public void keyReleased(KeyEvent e) {
handleKeyReleased(e);
}
}); });
} }
private void handleMouseDragged(MouseEvent evt) { private void handleMouseDragged(MouseEvent evt) {
int dx = evt.getX() - lastMousePos.x;
int dy = evt.getY() - lastMousePos.y;
for (Shape shape : selection) { for (Shape shape : selection) {
int dx = evt.getX() - shape.getBounds().x;
int dy = evt.getY() - shape.getBounds().y;
shape.translate(dx, dy); shape.translate(dx, dy);
} }
lastMousePos = evt.getPoint();
view.repaint(); view.repaint();
} }
@@ -67,9 +63,10 @@ public class Controller {
getTarget(evt, this.model) getTarget(evt, this.model)
.ifPresentOrElse( .ifPresentOrElse(
s -> { s -> {
if (!shiftPressed) { if (!evt.isShiftDown()) {
resetSelection(); resetSelection();
} }
lastMousePos = evt.getPoint();
selection.add(s); selection.add(s);
logger.debug("Selecting {}", s); logger.debug("Selecting {}", s);
}, },
@@ -84,15 +81,10 @@ public class Controller {
case KeyEvent.VK_C -> copySelection(); case KeyEvent.VK_C -> copySelection();
case KeyEvent.VK_A -> changeSelectionColor(); case KeyEvent.VK_A -> changeSelectionColor();
case KeyEvent.VK_H -> exportHtml(); case KeyEvent.VK_H -> exportHtml();
case KeyEvent.VK_SHIFT -> shiftPressed = true;
default -> logger.warn("Pressed unhandled key: {}", evt.getKeyChar()); default -> logger.warn("Pressed unhandled key: {}", evt.getKeyChar());
} }
} }
private void handleKeyReleased(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_SHIFT) shiftPressed = false;
}
private void exportHtml() { private void exportHtml() {
logger.info("Exporting view to html"); logger.info("Exporting view to html");
try { try {