Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public class Drawing extends JPanel implements ISnapToGridListener {
private final transient Throttler refreshThrottler;
private final transient Rectangle2D currentBounds = new Rectangle(0, 0, 8, 8);
private double scale;
private double snapToGrid;
private Point2D.Double position = new Point2D.Double();
private Dimension oldMinimumSize;
private transient DropHandler dropHandler;
Expand Down Expand Up @@ -323,10 +324,15 @@ public Point2D.Double getPosition() {

@Override
public void snapToGridUpdated(double aNewValue) {
this.snapToGrid = aNewValue;
for (Entity ctrl : this.controlsRoot.getAllChildren()) {
if (ctrl instanceof ISnapToGridListener iSnapToGridListener) {
iSnapToGridListener.snapToGridUpdated(aNewValue);
}
}
}

public double getSnapToGrid() {
return snapToGrid;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,27 @@ This file is part of Universal Gcode Sender (UGS).
*/
package com.willwinder.ugs.designer.gui;

import com.willwinder.ugs.designer.actions.MoveAction;
import com.willwinder.ugs.designer.entities.Entity;
import com.willwinder.ugs.designer.entities.EventType;
import com.willwinder.ugs.designer.entities.controls.Control;
import com.willwinder.ugs.designer.entities.selection.SelectionManager;
import com.willwinder.ugs.designer.logic.Controller;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Point2D;
import java.util.List;
import java.util.Optional;

/**
* @author Joacim Breiler
*/
public class KeyboardListener implements KeyListener {

private static final double DEFAULT_MOVE_STEP = 1.0;

private final Controller controller;
private final MouseListener mouseListener;

Expand All @@ -54,10 +61,49 @@ public void keyTyped(KeyEvent keyEvent) {

@Override
public void keyPressed(KeyEvent keyEvent) {
if (moveSelection(keyEvent)) {
keyEvent.consume();
return;
}
mouseListener.getHoveredControls().forEach(control -> control.onEvent(new KeyboardEntityEvent(control, EventType.KEY_PRESSED, keyEvent)));
updateCursor();
}

private boolean moveSelection(KeyEvent keyEvent) {
if (!controller.getDrawing().isFocusOwner()) {
return false;
}

SelectionManager selectionManager = controller.getSelectionManager();
if (selectionManager.isEmpty()) {
return false;
}

double step = controller.getDrawing().getSnapToGrid();
if (step <= 0) {
step = DEFAULT_MOVE_STEP;
}

Point2D deltaMovement = switch (keyEvent.getKeyCode()) {
case KeyEvent.VK_LEFT -> new Point2D.Double(-step, 0);
case KeyEvent.VK_RIGHT -> new Point2D.Double(step, 0);
case KeyEvent.VK_UP -> new Point2D.Double(0, step);
case KeyEvent.VK_DOWN -> new Point2D.Double(0, -step);
default -> null;
};

if (deltaMovement == null) {
return false;
}

List<Entity> entities = List.copyOf(selectionManager.getSelection());
MoveAction moveAction = new MoveAction(entities, deltaMovement);
moveAction.execute();
controller.getUndoManager().addAction(moveAction);
controller.getDrawing().repaint();
return true;
}

@Override
public void keyReleased(KeyEvent keyEvent) {
mouseListener.getHoveredControls().forEach(control -> control.onEvent(new KeyboardEntityEvent(control, EventType.KEY_RELEASED, keyEvent)));
Expand Down
Loading