diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
index a093b863..cc863dda 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
+++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
@@ -257,10 +257,10 @@ public class Presenter implements IPlugInPort {
@Override
public void setZoomLevel(double zoomLevel) {
- LOG.info(String.format("setZoomLevel(%s)", zoomLevel));
if (drawingManager.getZoomLevel() == zoomLevel) {
return;
}
+ LOG.info(String.format("setZoomLevel(%s)", zoomLevel));
drawingManager.setZoomLevel(zoomLevel);
}
diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml
index 18bc58d8..f6ab1481 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/update.xml
+++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml
@@ -3166,6 +3166,10 @@
2020-09-04 00:00:00.000 CET
+
+ NEW_FEATURE
+ Added keyboard shortcuts for zoom in and out using standard Ctrl and +/- key combination
+
IMPROVEMENT
Improved rendering precision, especially when using metric units
diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index 420f6d82..4ea2960f 100644
Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index 420f6d82..4ea2960f 100644
Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ
diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar
index 4d2eb344..a0064055 100644
Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java
index 1ab9c5fe..ec68be09 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPanel.java
@@ -36,6 +36,7 @@ import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
import java.awt.image.VolatileImage;
+import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
@@ -135,6 +136,11 @@ public class CanvasPanel extends JComponent implements Autoscroll {
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "clearSlot");
+
+ getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+ .put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, KeyEvent.CTRL_DOWN_MASK), "zoomIn");
+ getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+ .put(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, KeyEvent.CTRL_DOWN_MASK), "zoomOut");
for (int i = 1; i <= 12; i++) {
final int x = i;
@@ -150,6 +156,36 @@ public class CanvasPanel extends JComponent implements Autoscroll {
}
});
}
+
+ getActionMap().put("zoomIn", new AbstractAction() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ LOG.debug("Keyboard zoom-in triggered");
+ double oldZoom = CanvasPanel.this.plugInPort.getZoomLevel();
+ Double[] availableZoomLevels = CanvasPanel.this.plugInPort.getAvailableZoomLevels();
+ int index = Arrays.binarySearch(availableZoomLevels, oldZoom);
+ if (index < availableZoomLevels.length - 1)
+ CanvasPanel.this.plugInPort.setZoomLevel(availableZoomLevels[index + 1]);
+ }
+ });
+
+ getActionMap().put("zoomOut", new AbstractAction() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ LOG.debug("Keyboard zoom-out triggered");
+ double oldZoom = CanvasPanel.this.plugInPort.getZoomLevel();
+ Double[] availableZoomLevels = CanvasPanel.this.plugInPort.getAvailableZoomLevels();
+ int index = Arrays.binarySearch(availableZoomLevels, oldZoom);
+ if (index > 0)
+ CanvasPanel.this.plugInPort.setZoomLevel(availableZoomLevels[index - 1]);
+ }
+ });
getActionMap().put("clearSlot", new AbstractAction() {
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java
index 4465605d..a5f97c38 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/statusbar/StatusBar.java
@@ -213,8 +213,10 @@ public class StatusBar extends JPanel implements IPlugIn {
zoomBox.addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent e) {
- plugInPort.setZoomLevel((Double) zoomBox.getSelectedItem());
+ public void actionPerformed(ActionEvent e) {
+ Double newZoom = (Double) zoomBox.getSelectedItem();
+ if (!newZoom.equals(plugInPort.getZoomLevel()))
+ plugInPort.setZoomLevel((Double) zoomBox.getSelectedItem());
}
});
}