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()); } }); }