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 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)) {
return basicStrokeMap.get(width);
}
@@ -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);
@@ -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);
}
@@ -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
Binary file not shown.
Binary file not shown.
Binary file not shown.
+8
View File
@@ -1418,6 +1418,14 @@
<changeType>NEW_FEATURE</changeType>
<description>Battery schematic symbol added</description>
</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>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>