improved zoom

This commit is contained in:
bancika
2016-12-06 15:24:42 +01:00
parent 5a57c58563
commit ba9924cc99
8 changed files with 29 additions and 12 deletions
@@ -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.
+8
View File
@@ -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>