diff --git a/diylc/diylc-core/src/main/java/org/diylc/components/AbstractCurvedComponent.java b/diylc/diylc-core/src/main/java/org/diylc/components/AbstractCurvedComponent.java index 69458fa4..983eb7d0 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/components/AbstractCurvedComponent.java +++ b/diylc/diylc-core/src/main/java/org/diylc/components/AbstractCurvedComponent.java @@ -76,7 +76,7 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp * @param curve * @param g2d * @param componentState - * @param theme + * @param drawingObserver */ protected abstract void drawCurve(Path2D curve, Graphics2D g2d, ComponentState componentState, IDrawingObserver drawingObserver); diff --git a/diylc/diylc-core/src/main/java/org/diylc/components/AbstractTransparentComponent.java b/diylc/diylc-core/src/main/java/org/diylc/components/AbstractTransparentComponent.java index 78a9615d..52b18e84 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/components/AbstractTransparentComponent.java +++ b/diylc/diylc-core/src/main/java/org/diylc/components/AbstractTransparentComponent.java @@ -29,10 +29,13 @@ public abstract class AbstractTransparentComponent extends AbstractComponent< public static byte MAX_ALPHA = 127; - protected byte alpha = MAX_ALPHA; + protected Byte alpha = MAX_ALPHA; @EditableProperty public Byte getAlpha() { + if (alpha == null) { + alpha = MAX_ALPHA; + } return alpha; } diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java index cdb8d891..fe9d7d3f 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java @@ -441,7 +441,11 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen stroke = ObjectCache.getInstance().fetchStroke(thickness, new float[] {thickness / 4, thickness * 4}, 0, BasicStroke.CAP_ROUND); break; } - + + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } if (shouldShadeLeads()) { Shape lineShape = stroke.createStrokedShape(line); @@ -463,6 +467,7 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen if (isCopperArea) observer.stopTrackingContinuityArea(); } + g2d.setComposite(oldComposite); } protected LineStyle getStyle() { diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java index baff2381..f0862538 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java @@ -133,11 +133,6 @@ public class CopperTrace extends AbstractLeadedComponent implements ILayer return super.getBorderColor(); } - @Override - public Byte getAlpha() { - return super.getAlpha(); - } - @Override public Size getLength() { return super.getLength(); diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java index 56a3608a..0b35f1df 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java @@ -111,11 +111,6 @@ public class CurvedTrace extends AbstractCurvedComponent implements ILayer @Override public void setValue(Void value) {} - @Override - public Byte getAlpha() { - return super.getAlpha(); - } - @Override public void setAlpha(Byte alpha) { super.setAlpha(alpha); diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Eyelet.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Eyelet.java index c202a7db..3e74d70c 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Eyelet.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Eyelet.java @@ -21,13 +21,13 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -49,7 +49,7 @@ import org.diylc.utils.Constants; zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class, enableCache = true) -public class Eyelet extends AbstractComponent { +public class Eyelet extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -71,6 +71,12 @@ public class Eyelet extends AbstractComponent { } int diameter = getClosestOdd((int) size.convertToPixels()); int holeDiameter = getClosestOdd((int) holeSize.convertToPixels()); + + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); g2d.setColor(color); drawingObserver.startTrackingContinuityArea(true); @@ -84,6 +90,8 @@ public class Eyelet extends AbstractComponent { g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); g2d.drawOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); + + g2d.setComposite(oldComposite); } @Override diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/GroundFill.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/GroundFill.java index 0db6d4ac..ac6d255f 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/GroundFill.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/GroundFill.java @@ -21,8 +21,7 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Point2D; import java.util.Arrays; import java.util.EnumSet; @@ -33,6 +32,7 @@ import com.bancika.gerberwriter.GerberFunctions; import org.diylc.common.ObjectCache; import org.diylc.common.PCBLayer; import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -52,7 +52,8 @@ import org.diylc.core.measures.SizeUnit; @ComponentDescriptor(name = "Ground Fill", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "GF", description = "Polygonal ground fill area", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class) -public class GroundFill extends AbstractComponent implements ILayeredComponent, IGerberComponentSimple { +public class GroundFill extends AbstractTransparentComponent + implements ILayeredComponent, IGerberComponentSimple { private static final long serialVersionUID = 1L; @@ -83,7 +84,12 @@ public class GroundFill extends AbstractComponent implements ILayeredCompo yPoints[i] = (int)controlPoints[i].getY(); } drawingObserver.startTrackingContinuityArea(true); + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } g2d.fillPolygon(xPoints, yPoints, controlPoints.length); + g2d.setComposite(oldComposite); drawingObserver.stopTrackingContinuityArea(); // Do not track any changes that follow because the whole board has been // tracked so far. diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Jumper.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Jumper.java index 2f69dd61..61d281cf 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Jumper.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Jumper.java @@ -103,11 +103,6 @@ public class Jumper extends AbstractLeadedComponent implements IContinuity return super.getBorderColor(); } - @Override - public Byte getAlpha() { - return super.getAlpha(); - } - @Override public Size getLength() { return super.getLength(); diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Line.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Line.java index 0b0234d2..9da327a5 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Line.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Line.java @@ -233,11 +233,6 @@ public class Line extends AbstractLeadedComponent { return super.getBorderColor(); } - @Override - public Byte getAlpha() { - return super.getAlpha(); - } - @Override public Size getLength() { return super.getLength(); diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/SolderPad.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/SolderPad.java index e734cca6..ebd05240 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/SolderPad.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/SolderPad.java @@ -17,8 +17,7 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Ellipse2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -29,6 +28,7 @@ import com.bancika.gerberwriter.GerberFunctions; import org.diylc.common.PCBLayer; import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -55,7 +55,8 @@ import org.diylc.utils.Constants; zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class, enableCache = true) -public class SolderPad extends AbstractComponent implements ILayeredComponent, IGerberComponentCustom { +public class SolderPad extends AbstractTransparentComponent + implements ILayeredComponent, IGerberComponentCustom { private static final long serialVersionUID = 1L; @@ -90,6 +91,11 @@ public class SolderPad extends AbstractComponent implements ILayeredCompon gerberDrawingObserver.startGerberOutput(gerberCopperLayer, GerberFunctions.CONNECTOR_PAD, false); gerberDrawingObserver.startGerberOutput(org.diylc.core.gerber.GerberLayer.SolderMaskBot, "Material", false); } + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } + if (type == Type.ROUND) { g2d.fill(new Ellipse2D.Double(point.getX() - diameter / 2, point.getY() - diameter / 2, diameter, diameter)); @@ -116,6 +122,7 @@ public class SolderPad extends AbstractComponent implements ILayeredCompon g2d.fill(new Ellipse2D.Double(point.getX() - holeDiameter / 2, point.getY() - holeDiameter / 2, holeDiameter, holeDiameter)); } + g2d.setComposite(oldComposite); if (gerberDrawingObserver != null) gerberDrawingObserver.stopGerberOutput(); } diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/TraceCut.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/TraceCut.java index 3bc979a3..4cc3964f 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/TraceCut.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/TraceCut.java @@ -21,14 +21,14 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; import org.diylc.common.OrientationHV; import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.boards.AbstractBoard; import org.diylc.components.boards.VeroBoard; import org.diylc.components.transform.SimpleComponentTransformer; @@ -49,7 +49,7 @@ import org.diylc.utils.Constants; description = "Designates the place where a trace on the vero board needs to be cut", instanceNamePrefix = "Cut", zOrder = IDIYComponent.BOARD + 1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class, enableCache = true) -public class TraceCut extends AbstractComponent implements ILayeredComponent { +public class TraceCut extends AbstractTransparentComponent implements ILayeredComponent { private static final long serialVersionUID = 1L; @@ -79,6 +79,10 @@ public class TraceCut extends AbstractComponent implements ILayeredCompone if (checkPointsClipped(g2d.getClip())) { return; } + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(1f)); int size = getClosestOdd((int) this.size.convertToPixels()); int cutWidth = getClosestOdd((int) CUT_WIDTH.convertToPixels()); @@ -105,6 +109,7 @@ public class TraceCut extends AbstractComponent implements ILayeredCompone g2d.setColor(getBoardColor().darker()); g2d.drawOval((int)(point.getX() - holeSize / 2), (int)(point.getY() - holeSize / 2), holeSize, holeSize); } + g2d.setComposite(oldComposite); } @Override diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Turret.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Turret.java index bd5c21f7..9400d75c 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Turret.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/Turret.java @@ -21,13 +21,13 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.diylc.common.ObjectCache; import org.diylc.components.AbstractComponent; +import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -47,7 +47,7 @@ import org.diylc.utils.Constants; zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = SimpleComponentTransformer.class, enableCache = true) -public class Turret extends AbstractComponent { +public class Turret extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -67,6 +67,10 @@ public class Turret extends AbstractComponent { if (checkPointsClipped(g2d.getClip())) { return; } + Composite oldComposite = g2d.getComposite(); + if (getAlpha() < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * getAlpha() / MAX_ALPHA)); + } int diameter = getClosestOdd((int) size.convertToPixels()); int holeDiameter = getClosestOdd((int) holeSize.convertToPixels()); g2d.setColor(color); @@ -82,6 +86,7 @@ public class Turret extends AbstractComponent { g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); g2d.drawOval((int)(point.getX() - holeDiameter / 2), (int)(point.getY() - holeDiameter / 2), holeDiameter, holeDiameter); + g2d.setComposite(oldComposite); } @Override