diff --git a/diylc/diylc-core/src/org/diylc/common/ObjectCache.java b/diylc/diylc-core/src/org/diylc/common/ObjectCache.java index 91f55ef1..51b554af 100644 --- a/diylc/diylc-core/src/org/diylc/common/ObjectCache.java +++ b/diylc/diylc-core/src/org/diylc/common/ObjectCache.java @@ -24,9 +24,9 @@ public class ObjectCache { private ObjectCache() {} - private Map basicStrokeMap = new HashMap(); + private Map basicStrokeMap = new HashMap(); - public Stroke fetchBasicStroke(int width) { + public Stroke fetchBasicStroke(float width) { if (basicStrokeMap.containsKey(width)) { return basicStrokeMap.get(width); } diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 8753a4fd..25a03a8b 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -104,7 +104,15 @@ public class DrawingManager { if (project == null) { return failedComponents; } - G2DWrapper g2dWrapper = new G2DWrapper(g2d); + + double zoom = 1d; + if (drawOptions.contains(DrawOption.ZOOM)) { + zoom = zoomLevel; + } else { + zoom = 1 / Constants.PIXEL_SIZE; + } + + G2DWrapper g2dWrapper = new G2DWrapper(g2d, zoom); if (drawOptions.contains(DrawOption.ANTIALIASING)) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); @@ -129,13 +137,6 @@ public class DrawingManager { g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); } - double zoom = 1d; - if (drawOptions.contains(DrawOption.ZOOM)) { - zoom = zoomLevel; - } else { - zoom = 1 / Constants.PIXEL_SIZE; - } - // AffineTransform initialTx = g2d.getTransform(); Dimension d = getCanvasDimensions(project, zoom, true); diff --git a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java index 643b882b..d56ff8dc 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java +++ b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java @@ -38,6 +38,7 @@ import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; import java.util.Map; +import org.diylc.common.ObjectCache; import org.diylc.core.IDrawingObserver; /** @@ -68,14 +69,17 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { private Area currentArea; private Shape lastShape; + private double zoom; + /** * Creates a wrapper around specified {@link Graphics2D} object. * * @param canvasGraphics */ - public G2DWrapper(Graphics2D canvasGraphics) { + public G2DWrapper(Graphics2D canvasGraphics, double zoom) { super(); this.canvasGraphics = canvasGraphics; + this.zoom = zoom; currentArea = new Area(); currentTx = new AffineTransform(); } @@ -432,6 +436,10 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { @Override public void setStroke(Stroke s) { + if (this.zoom > 1 && s.getClass() == BasicStroke.class) { + BasicStroke bs = (BasicStroke) s; + s = ObjectCache.getInstance().fetchBasicStroke((float) (bs.getLineWidth() / zoom)); + } canvasGraphics.setStroke(s); } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 179307a0..15448fd2 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -160,7 +160,7 @@ public class Presenter implements IPlugInPort { @Override public Double[] getAvailableZoomLevels() { - return new Double[] {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d}; + return new Double[] {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d, 2.5d, 3d}; } @Override diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index f5ae33a5..254c1015 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 f5ae33a5..254c1015 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 072f790a..02953d25 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/update.xml b/diylc/diylc-swing/update.xml index 2a1b252e..0fbfc07a 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1418,6 +1418,14 @@ NEW_FEATURE Battery schematic symbol added + + IMPROVEMENT + Better line representation when zoomed in + + + IMPROVEMENT + Increased maximum zoom range from 200% to 300% + https://github.com/bancika/diy-layout-creator/releases