diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index 89d989c2..58dfe00e 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ObjectCache.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ObjectCache.java new file mode 100644 index 00000000..c56ef114 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ObjectCache.java @@ -0,0 +1,32 @@ +package org.diylc.common; + +import java.awt.BasicStroke; +import java.awt.Stroke; +import java.util.HashMap; +import java.util.Map; + +public class ObjectCache { + + private static ObjectCache instance; + + public static ObjectCache getInstance() { + if (instance == null) { + instance = new ObjectCache(); + } + return instance; + } + + private ObjectCache() { + } + + private Map basicStrokeMap = new HashMap(); + + public Stroke fetchBasicStroke(int width) { + if (basicStrokeMap.containsKey(width)) { + return basicStrokeMap.get(width); + } + Stroke stroke = new BasicStroke(width); + basicStrokeMap.put(width, stroke); + return stroke; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java index b618db56..54e0771a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java @@ -8,6 +8,7 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.CubicCurve2D; +import org.diylc.common.ObjectCache; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; @@ -50,12 +51,12 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp @Override public void drawIcon(Graphics2D g2d, int width, int height) { g2d.setColor(getDefaultColor().darker()); - g2d.setStroke(new BasicStroke(3)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(3)); CubicCurve2D curve = new CubicCurve2D.Double(1, height - 1, width / 4, height / 3, 3 * width / 4, 2 * height / 3, width - 1, 1); g2d.draw(curve); g2d.setColor(getDefaultColor()); - g2d.setStroke(new BasicStroke(1)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(curve); } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java index 3935cd41..63b74221 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java @@ -12,6 +12,7 @@ import java.awt.Shape; import java.awt.geom.Rectangle2D; import org.diylc.common.Display; +import org.diylc.common.ObjectCache; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; @@ -65,12 +66,14 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp double distance = points[0].distance(points[1]); Shape shape = getBodyShape(); if (shape == null) { - g2d.setStroke(new BasicStroke(getLeadThickness().convertToPixels())); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke( + getLeadThickness().convertToPixels())); g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker() : getLeadColor(componentState)); g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y); if (shouldShadeLeads()) { - g2d.setStroke(new BasicStroke(getLeadThickness().convertToPixels() - 2)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke( + getLeadThickness().convertToPixels() - 2)); g2d.setColor(getLeadColor(componentState)); g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y); } @@ -99,7 +102,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp g2d.draw(shape); // Draw leads. int leadThickness = getClosestOdd(getLeadThickness().convertToPixels()); - g2d.setStroke(new BasicStroke(leadThickness)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker() : getLeadColor(componentState)); g2d.drawLine((int) (shapeRect.width - distance) / 2, (int) shapeRect.height / 2, @@ -109,7 +112,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp (int) ((shapeRect.width + distance) / 2 - leadLenght) + leadThickness / 2, (int) shapeRect.height / 2); if (shouldShadeLeads()) { - g2d.setStroke(new BasicStroke(leadThickness - 2)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setColor(getLeadColor(componentState)); g2d.drawLine((int) (shapeRect.width - distance) / 2, (int) shapeRect.height / 2, (int) ((shapeRect.width - distance) / 2 + leadLenght) - leadThickness / 2, diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java index 126281c4..16dd53d3 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java @@ -23,6 +23,7 @@ import org.diylc.common.DrawOption; import org.diylc.common.EventType; import org.diylc.common.GridType; import org.diylc.common.IComponentFiler; +import org.diylc.common.ObjectCache; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.Project; @@ -249,7 +250,7 @@ public class DrawingManager { // Draw component area for test if (DEBUG_COMPONENT_AREAS) { - g2d.setStroke(new BasicStroke()); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setColor(Color.red); for (Area area : componentAreaMap.values()) { g2d.draw(area); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar index 61996375..67835ed1 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar and b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java index 30e054bc..777aa1a7 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java @@ -6,6 +6,7 @@ import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; @@ -14,7 +15,6 @@ import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; public abstract class AbstractBoard extends AbstractTransparentComponent { @@ -37,7 +37,7 @@ public abstract class AbstractBoard extends AbstractTransparentComponent @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { - g2d.setStroke(Constants.BASIC_STROKE); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java index b3ff1152..c5a5e11a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java @@ -52,10 +52,10 @@ public class VeroBoard extends AbstractBoard { p.y += spacing; g2d.setColor(padColor); g2d.fillRect(p.x + SPACING.convertToPixels() / 2, p.y - stripSize / 2, - controlPoints[1].x - spacing - p.x, stripSize); + secondPoint.x - spacing - p.x, stripSize); g2d.setColor(padColor.darker()); g2d.drawRect(p.x + SPACING.convertToPixels() / 2, p.y - stripSize / 2, - controlPoints[1].x - spacing - p.x, stripSize); + secondPoint.x - spacing - p.x, stripSize); while (p.x < secondPoint.x - spacing) { p.x += spacing; g2d.setColor(Constants.CANVAS_COLOR); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java index 1103fa17..3ba5f217 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java @@ -1,10 +1,10 @@ package org.diylc.components.connectivity; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractLeadedComponent; import org.diylc.core.ComponentState; import org.diylc.core.CreationMethod; @@ -27,7 +27,7 @@ public class CopperTrace extends AbstractLeadedComponent { @Override public void drawIcon(Graphics2D g2d, int width, int height) { - g2d.setStroke(new BasicStroke(3)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(3)); g2d.setColor(COLOR); g2d.drawLine(1, height - 2, width - 2, 1); } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java index 3ec83251..3cea72e2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -1,10 +1,10 @@ package org.diylc.components.connectivity; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.CubicCurve2D; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractCurvedComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -31,7 +31,7 @@ public class CurvedTrace extends AbstractCurvedComponent { @Override protected void drawCurve(CubicCurve2D curve, Graphics2D g2d, ComponentState componentState) { int thickness = size.convertToPixels(); - g2d.setStroke(new BasicStroke(thickness)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(thickness)); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color); g2d.draw(curve); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java index f2f17306..04e587da 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java @@ -1,10 +1,10 @@ package org.diylc.components.connectivity; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.CubicCurve2D; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractCurvedComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -13,14 +13,14 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.utils.Constants; @ComponentDescriptor(name = "Hookup Wire", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "W", description = "Flexible wire with two control points", zOrder = IDIYComponent.ABOVE_COMPONENT) -public class HookupWire extends AbstractCurvedComponent { +public class HookupWire extends AbstractCurvedComponent { private static final long serialVersionUID = 1L; public static Color COLOR = Color.green; public static double INSULATION_THICKNESS_PCT = 0.3; - protected AWG value = AWG._22; + protected AWG gauge = AWG._22; @Override protected Color getDefaultColor() { @@ -29,27 +29,35 @@ public class HookupWire extends AbstractCurvedComponent { @Override protected void drawCurve(CubicCurve2D curve, Graphics2D g2d, ComponentState componentState) { - int thickness = (int) (Math.pow(Math.E, -1.12436 - 0.11594 * value.getValue()) + int thickness = (int) (Math. + pow(Math.E, -1.12436 - 0.11594 * gauge.getValue()) * Constants.PIXELS_PER_INCH * (1 + 2 * INSULATION_THICKNESS_PCT)); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); - g2d.setStroke(new BasicStroke(thickness)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(thickness)); g2d.draw(curve); if (componentState == ComponentState.NORMAL) { g2d.setColor(color); - g2d.setStroke(new BasicStroke(thickness - 2)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(thickness - 2)); g2d.draw(curve); } } @EditableProperty(name = "AWG") - @Override - public AWG getValue() { - return value; + public AWG getGauge() { + return gauge; + } + + public void setGauge(AWG gauge) { + this.gauge = gauge; } @Override - public void setValue(AWG value) { - this.value = value; + public Void getValue() { + return null; + } + + @Override + public void setValue(Void value) { } } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java index 28db2434..620ae6ce 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java @@ -1,10 +1,10 @@ package org.diylc.components.connectivity; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractLeadedComponent; import org.diylc.core.ComponentState; import org.diylc.core.CreationMethod; @@ -22,7 +22,7 @@ public class Jumper extends AbstractLeadedComponent { @Override public void drawIcon(Graphics2D g2d, int width, int height) { - g2d.setStroke(new BasicStroke(1)); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setColor(COLOR); g2d.drawLine(1, height - 2, width - 2, 1); } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java index 694d3dc2..95e41bba 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java @@ -4,6 +4,7 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -14,7 +15,6 @@ import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; @ComponentDescriptor(name = "Trace Cut", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Cut", stretchable = false, zOrder = IDIYComponent.ABOVE_BOARD) public class TraceCut extends AbstractComponent { @@ -41,7 +41,7 @@ public class TraceCut extends AbstractComponent { g2d.fillRect(point.x - size / 2, point.y - size / 2, size, size); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); - g2d.setStroke(Constants.BASIC_STROKE); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.drawRect(point.x - size / 2, point.y - size / 2, size, size); g2d .fillOval(point.x - dotDiameter / 2, point.y - dotDiameter / 2, dotDiameter, @@ -55,7 +55,7 @@ public class TraceCut extends AbstractComponent { g2d.setColor(FILL_COLOR); g2d.fillRect((width - size) / 2, (height - size) / 2, size, size); g2d.setColor(BORDER_COLOR); - g2d.setStroke(Constants.BASIC_STROKE); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.drawRect((width - size) / 2, (height - size) / 2, size, size); g2d.fillOval((width - dotDiameter) / 2, (height - dotDiameter) / 2, dotDiameter, dotDiameter); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index 5188fdf6..0713233c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -1,7 +1,6 @@ package org.diylc.components.electromechanical; import java.awt.AlphaComposite; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; @@ -9,6 +8,7 @@ import java.awt.Point; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; +import org.diylc.common.ObjectCache; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -178,7 +178,7 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { g2d.setComposite(oldComposite); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : BORDER_COLOR); - g2d.setStroke(new BasicStroke()); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(getBody()); // Draw label. g2d.setFont(Constants.LABEL_FONT);