diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 73b37672..1784711a 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java index 5216b118..3d961de0 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java @@ -84,7 +84,8 @@ public class TransistorTO1 extends AbstractTransparentComponent { public TransistorTO1() { super(); - updateControlPoints(); + updateControlPoints(); + alpha = (byte) 100; } @EditableProperty @@ -214,7 +215,18 @@ public class TransistorTO1 extends AbstractTransparentComponent { if (checkPointsClipped(g2d.getClip())) { return; } - int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + + for (Point point : controlPoints) { + if (!outlineMode) { + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + Area mainArea = getBody(); Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { @@ -224,7 +236,7 @@ public class TransistorTO1 extends AbstractTransparentComponent { g2d.fill(mainArea); g2d.setComposite(oldComposite); Color finalBorderColor; - Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + if (outlineMode) { finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR @@ -236,16 +248,7 @@ public class TransistorTO1 extends AbstractTransparentComponent { } g2d.setColor(finalBorderColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); - g2d.draw(mainArea); - - for (Point point : controlPoints) { - if (!outlineMode) { - g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } - g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } + g2d.draw(mainArea); // Draw label. g2d.setFont(project.getFont()); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java index 6e918e37..53f689d1 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java @@ -92,7 +92,8 @@ public class TransistorTO220 extends AbstractTransparentComponent { public TransistorTO220() { super(); - updateControlPoints(); + updateControlPoints(); + alpha = (byte) 100; } @EditableProperty @@ -263,7 +264,75 @@ public class TransistorTO220 extends AbstractTransparentComponent { if (checkPointsClipped(g2d.getClip())) { return; } - int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + + Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + + // Draw pins. + + if (folded) { + int leadThickness = getClosestOdd(LEAD_THICKNESS.convertToPixels()); + int leadLength = (int) getLeadLength().convertToPixels(); + Color finalPinColor; + Color finalPinBorderColor; + if (outlineMode) { + finalPinColor = new Color(0, 0, 0, 0); + finalPinBorderColor = + componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : theme.getOutlineColor(); + } else { + finalPinColor = METAL_COLOR; + finalPinBorderColor = METAL_COLOR.darker(); + } + for (Point point : controlPoints) { + switch (orientation) { + case DEFAULT: + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); + g2d.setColor(finalPinBorderColor); + g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); + g2d.setColor(finalPinColor); + g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); + break; + case _90: + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); + g2d.setColor(finalPinBorderColor); + g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); + g2d.setColor(finalPinColor); + g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); + break; + case _180: + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); + g2d.setColor(finalPinBorderColor); + g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); + g2d.setColor(finalPinColor); + g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); + break; + case _270: + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); + g2d.setColor(finalPinBorderColor); + g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); + g2d.setColor(finalPinColor); + g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); + break; + } + } + } else { + if (!outlineMode) { + for (Point point : controlPoints) { + + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + } + } + + Shape mainArea = getBody()[0]; Shape tabArea = getBody()[1]; Composite oldComposite = g2d.getComposite(); @@ -273,9 +342,7 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : bodyColor); g2d.fill(mainArea); Color finalTabColor; - if (outlineMode) { - Theme theme = - (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + if (outlineMode) { finalTabColor = theme.getOutlineColor(); } else { finalTabColor = tabColor; @@ -289,7 +356,7 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.draw(tabArea); } Color finalBorderColor; - Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + if (outlineMode) { finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR @@ -305,70 +372,6 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.draw(tabArea); } - // Draw pins. - - if (folded) { - int leadThickness = getClosestOdd(LEAD_THICKNESS.convertToPixels()); - int leadLength = (int) getLeadLength().convertToPixels(); - Color finalPinColor; - Color finalPinBorderColor; - if (outlineMode) { - finalPinColor = new Color(0, 0, 0, 0); - finalPinBorderColor = - componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR - : theme.getOutlineColor(); - } else { - finalPinColor = METAL_COLOR; - finalPinBorderColor = METAL_COLOR.darker(); - } - for (Point point : controlPoints) { - switch (orientation) { - case DEFAULT: - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); - g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); - g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, point.y); - break; - case _90: - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); - g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); - g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x, point.y + leadLength - leadThickness / 2); - break; - case _180: - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); - g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); - g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, point.y); - break; - case _270: - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); - g2d.setColor(finalPinBorderColor); - g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); - g2d.setColor(finalPinColor); - g2d.drawLine(point.x, point.y, point.x, point.y - leadLength); - break; - } - } - } else { - if (!outlineMode) { - for (Point point : controlPoints) { - - g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } - } - } - // Draw label. g2d.setFont(project.getFont()); Color finalLabelColor; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java index 39c0f276..6865ab55 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java @@ -87,7 +87,8 @@ public class TransistorTO3 extends AbstractTransparentComponent { public TransistorTO3() { super(); - updateControlPoints(); + updateControlPoints(); + alpha = (byte) 100; } @EditableProperty @@ -249,7 +250,18 @@ public class TransistorTO3 extends AbstractTransparentComponent { if (checkPointsClipped(g2d.getClip())) { return; } - int pinSize = (int) PIN_DIAMETER.convertToPixels() / 2 * 2; + int pinSize = (int) PIN_DIAMETER.convertToPixels() / 2 * 2; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + + for (Point point : controlPoints) { + if (!outlineMode) { + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + Area mainArea = getBody()[0]; Area innerArea = getBody()[1]; Composite oldComposite = g2d.getComposite(); @@ -260,7 +272,7 @@ public class TransistorTO3 extends AbstractTransparentComponent { g2d.fill(mainArea); g2d.setComposite(oldComposite); Color finalBorderColor; - Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + if (outlineMode) { finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR @@ -273,16 +285,7 @@ public class TransistorTO3 extends AbstractTransparentComponent { g2d.setColor(finalBorderColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(mainArea); - g2d.draw(innerArea); - - for (Point point : controlPoints) { - if (!outlineMode) { - g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } - g2d.setColor(outlineMode ? theme.getOutlineColor() : PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } + g2d.draw(innerArea); // Draw label. g2d.setFont(project.getFont()); diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java index b95f0f0c..db8cd4ac 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java @@ -82,7 +82,8 @@ public class TransistorTO92 extends AbstractTransparentComponent { public TransistorTO92() { super(); - updateControlPoints(); + updateControlPoints(); + alpha = (byte) 100; } @EditableProperty @@ -248,7 +249,17 @@ public class TransistorTO92 extends AbstractTransparentComponent { if (checkPointsClipped(g2d.getClip())) { return; } - int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + + if (!outlineMode) { + for (Point point : controlPoints) { + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.setColor(PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + } + Area mainArea = getBody(); Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { @@ -273,15 +284,6 @@ public class TransistorTO92 extends AbstractTransparentComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(mainArea); - if (!outlineMode) { - for (Point point : controlPoints) { - g2d.setColor(PIN_COLOR); - g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - g2d.setColor(PIN_BORDER_COLOR); - g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); - } - } - // Draw label. g2d.setFont(project.getFont()); Color finalLabelColor; diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 564f956a..6b06cff9 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index e787f88b..cacecde2 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2226,6 +2226,10 @@ IMPROVEMENT Use hardware acceleration for rendering to improve performance + + IMPROVEMENT + Use transparency instead of rendering pins on top of transistor body + IMPROVEMENT Leads and wires are rendered better, especially when zoomed in