diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml
index f333dc2b..8f0c7a38 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/update.xml
+++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml
@@ -3689,5 +3689,25 @@
https://github.com/bancika/diy-layout-creator/releases
+
+
+ 4
+ 21
+ 4
+
+ 2022-02-27 00:00:00.000 CET
+
+
+
+ BUG_FIX
+ Fixed the issue with stereo phono jack rendering issues when rotated
+
+
+ IMPROVEMENT
+ Improved precision of zooming in and out when nothing is selected
+
+
+ https://github.com/bancika/diy-layout-creator/releases
+
diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index 5fabc668..584582bc 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/flatpak/com.diy_fever.DIYLayoutCreator.metainfo.xml b/diylc/diylc-swing/flatpak/com.diy_fever.DIYLayoutCreator.metainfo.xml
index e582fa49..bb7aad92 100644
--- a/diylc/diylc-swing/flatpak/com.diy_fever.DIYLayoutCreator.metainfo.xml
+++ b/diylc/diylc-swing/flatpak/com.diy_fever.DIYLayoutCreator.metainfo.xml
@@ -37,13 +37,21 @@
nbenitezl_AT_gmail.com
+
+
+
+ - [Bug Fix] Fixed the issue with the app going back to .diylc user directory for configuration storage. Only diylc directory is used going forward, please copy config.xml from .diylc to diylc if you are missing any configuration
+
+
+ https://github.com/bancika/diy-layout-creator/releases/tag/v4.21.3
+
- [Bug Fix] Fixed broken Linux app package
- https://github.com/bancika/diy-layout-creator/releases/tag/v4.21.1
+ https://github.com/bancika/diy-layout-creator/releases/tag/v4.21.2
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index 5fabc668..584582bc 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 03dfa4a8..22158222 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/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
index 6f663ae2..8d702fc3 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java
@@ -469,7 +469,10 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
}
public void zoom(int direction) {
- Point mousePos = canvasPanel.getMousePosition(true);
+ Point mousePosBefore = canvasPanel.getMousePosition(true);
+ Point locationBefore = canvasPanel.getLocation();
+ int relativeX = (int) (mousePosBefore.getX() + locationBefore.getX());
+ int relativeY = (int) (mousePosBefore.getY() + locationBefore.getY());
// change zoom level
double oldZoom = plugInPort.getZoomLevel();
@@ -495,24 +498,25 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner {
JScrollBar horizontal = scrollPane.getHorizontalScrollBar();
JScrollBar vertical = scrollPane.getVerticalScrollBar();
- if (mousePos == null)
- mousePos = new Point((int)visibleRect.getCenterX(), (int)visibleRect.getCenterY());
-
- if (selectionBounds == null) {
- // center to cursor
- Point desiredPos = new Point((int) (1d * mousePos.x / oldZoom * newZoom),
- (int) (1d * mousePos.y / oldZoom * newZoom));
- int dx = desiredPos.x - mousePos.x;
- int dy = desiredPos.y - mousePos.y;
- horizontal.setValue(horizontal.getValue() + dx);
- vertical.setValue(vertical.getValue() + dy);
- } else {
- // center to selection
- horizontal.setValue((int) (selectionBounds.getX() + selectionBounds.getWidth() / 2
- - visibleRect.getWidth() / 2));
- vertical.setValue((int) (selectionBounds.getY() + selectionBounds.getHeight() / 2
- - visibleRect.getHeight() / 2));
+ if (mousePosBefore == null) {
+ mousePosBefore = new Point((int)visibleRect.getCenterX(), (int)visibleRect.getCenterY());
}
+
+ if (selectionBounds == null) {
+ // center to cursor
+ Point desiredPos = new Point((int) (1d * mousePosBefore.getX() / oldZoom * newZoom),
+ (int) (1d * mousePosBefore.getY() / oldZoom * newZoom));
+ int newHorizontalPos = (int) (desiredPos.getX() - relativeX);
+ int newVerticalPos = (int) (desiredPos.getY() - relativeY);
+ horizontal.setValue(newHorizontalPos < 0 ? 0 : newHorizontalPos);
+ vertical.setValue(newVerticalPos < 0 ? 0 : newVerticalPos);
+ } else {
+ // center to selection
+ horizontal
+ .setValue((int) (selectionBounds.getX() + selectionBounds.getWidth() / 2 - visibleRect.getWidth() / 2));
+ vertical.setValue(
+ (int) (selectionBounds.getY() + selectionBounds.getHeight() / 2 - visibleRect.getHeight() / 2));
+ }
}
private void showPopupAt(int x, int y) {