mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 09:12:09 +10:00
improved zoom
This commit is contained in:
@@ -24,9 +24,9 @@ public class ObjectCache {
|
|||||||
|
|
||||||
private ObjectCache() {}
|
private ObjectCache() {}
|
||||||
|
|
||||||
private Map<Integer, Stroke> basicStrokeMap = new HashMap<Integer, Stroke>();
|
private Map<Float, Stroke> basicStrokeMap = new HashMap<Float, Stroke>();
|
||||||
|
|
||||||
public Stroke fetchBasicStroke(int width) {
|
public Stroke fetchBasicStroke(float width) {
|
||||||
if (basicStrokeMap.containsKey(width)) {
|
if (basicStrokeMap.containsKey(width)) {
|
||||||
return basicStrokeMap.get(width);
|
return basicStrokeMap.get(width);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,15 @@ public class DrawingManager {
|
|||||||
if (project == null) {
|
if (project == null) {
|
||||||
return failedComponents;
|
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)) {
|
if (drawOptions.contains(DrawOption.ANTIALIASING)) {
|
||||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
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);
|
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();
|
// AffineTransform initialTx = g2d.getTransform();
|
||||||
Dimension d = getCanvasDimensions(project, zoom, true);
|
Dimension d = getCanvasDimensions(project, zoom, true);
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import java.awt.image.renderable.RenderableImage;
|
|||||||
import java.text.AttributedCharacterIterator;
|
import java.text.AttributedCharacterIterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.diylc.common.ObjectCache;
|
||||||
import org.diylc.core.IDrawingObserver;
|
import org.diylc.core.IDrawingObserver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -68,14 +69,17 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
|
|||||||
private Area currentArea;
|
private Area currentArea;
|
||||||
private Shape lastShape;
|
private Shape lastShape;
|
||||||
|
|
||||||
|
private double zoom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a wrapper around specified {@link Graphics2D} object.
|
* Creates a wrapper around specified {@link Graphics2D} object.
|
||||||
*
|
*
|
||||||
* @param canvasGraphics
|
* @param canvasGraphics
|
||||||
*/
|
*/
|
||||||
public G2DWrapper(Graphics2D canvasGraphics) {
|
public G2DWrapper(Graphics2D canvasGraphics, double zoom) {
|
||||||
super();
|
super();
|
||||||
this.canvasGraphics = canvasGraphics;
|
this.canvasGraphics = canvasGraphics;
|
||||||
|
this.zoom = zoom;
|
||||||
currentArea = new Area();
|
currentArea = new Area();
|
||||||
currentTx = new AffineTransform();
|
currentTx = new AffineTransform();
|
||||||
}
|
}
|
||||||
@@ -432,6 +436,10 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStroke(Stroke s) {
|
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);
|
canvasGraphics.setStroke(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ public class Presenter implements IPlugInPort {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Double[] getAvailableZoomLevels() {
|
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
|
@Override
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1418,6 +1418,14 @@
|
|||||||
<changeType>NEW_FEATURE</changeType>
|
<changeType>NEW_FEATURE</changeType>
|
||||||
<description>Battery schematic symbol added</description>
|
<description>Battery schematic symbol added</description>
|
||||||
</org.diylc.appframework.update.Change>
|
</org.diylc.appframework.update.Change>
|
||||||
|
<org.diylc.appframework.update.Change>
|
||||||
|
<changeType>IMPROVEMENT</changeType>
|
||||||
|
<description>Better line representation when zoomed in</description>
|
||||||
|
</org.diylc.appframework.update.Change>
|
||||||
|
<org.diylc.appframework.update.Change>
|
||||||
|
<changeType>IMPROVEMENT</changeType>
|
||||||
|
<description>Increased maximum zoom range from 200% to 300%</description>
|
||||||
|
</org.diylc.appframework.update.Change>
|
||||||
</changes>
|
</changes>
|
||||||
<url>https://github.com/bancika/diy-layout-creator/releases</url>
|
<url>https://github.com/bancika/diy-layout-creator/releases</url>
|
||||||
</org.diylc.appframework.update.Version>
|
</org.diylc.appframework.update.Version>
|
||||||
|
|||||||
Reference in New Issue
Block a user