diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index 5efa5d23..179365a8 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java index ef3457ee..da4a0dd2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java @@ -10,6 +10,8 @@ import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; import org.diylc.common.Orientation; import org.diylc.core.ComponentState; @@ -17,10 +19,12 @@ import org.diylc.core.CreationMethod; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.Theme; 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 = "Potentiometer (panel mount)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "Panel mount potentiometer with solder lugs", zOrder = IDIYComponent.COMPONENT, stretchable = false) public class PotentiometerPanel extends AbstractPotentiometer { @@ -42,7 +46,8 @@ public class PotentiometerPanel extends AbstractPotentiometer { transient protected Area[] body = null; public PotentiometerPanel() { - controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), + new Point(0, 0) }; updateControlPoints(); } @@ -50,20 +55,28 @@ public class PotentiometerPanel extends AbstractPotentiometer { int spacing = (int) this.spacing.convertToPixels(); switch (orientation) { case DEFAULT: - controlPoints[1].setLocation(controlPoints[0].x + spacing, controlPoints[0].y); - controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing, controlPoints[0].y); + controlPoints[1].setLocation(controlPoints[0].x + spacing, + controlPoints[0].y); + controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing, + controlPoints[0].y); break; case _90: - controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + spacing); - controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + 2 * spacing); + controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + + spacing); + controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + + 2 * spacing); break; case _180: - controlPoints[1].setLocation(controlPoints[0].x - spacing, controlPoints[0].y); - controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing, controlPoints[0].y); + controlPoints[1].setLocation(controlPoints[0].x - spacing, + controlPoints[0].y); + controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing, + controlPoints[0].y); break; case _270: - controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y - spacing); - controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y - 2 * spacing); + controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + - spacing); + controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + - 2 * spacing); break; default: break; @@ -80,49 +93,55 @@ public class PotentiometerPanel extends AbstractPotentiometer { int lugDiameter = getClosestOdd(this.lugDiameter.convertToPixels()); int holeDiameter = getClosestOdd(this.lugDiameter.convertToPixels() / 2); for (int i = 0; i < 3; i++) { - Area area = new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2, - controlPoints[i].y - lugDiameter / 2, lugDiameter, lugDiameter)); + Area area = new Area(new Ellipse2D.Double(controlPoints[i].x + - lugDiameter / 2, + controlPoints[i].y - lugDiameter / 2, lugDiameter, + lugDiameter)); body[4 + i] = area; } switch (orientation) { case DEFAULT: - body[3] = new Area(new Ellipse2D.Double( - controlPoints[0].x + spacing - diameter / 2, controlPoints[0].y - spacing - / 2 - diameter, diameter, diameter)); + body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + + spacing - diameter / 2, controlPoints[0].y - spacing + / 2 - diameter, diameter, diameter)); for (int i = 0; i < 3; i++) { body[i] = new Area(new Rectangle2D.Double( - controlPoints[i].x - holeDiameter / 2, controlPoints[i].y - - (spacing + diameter) / 2, holeDiameter, - (spacing + diameter) / 2)); - } - break; - case _90: - body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + spacing / 2, - controlPoints[0].y + spacing - diameter / 2, diameter, diameter)); - for (int i = 0; i < 3; i++) { - body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x, - controlPoints[i].y - holeDiameter / 2, (spacing + diameter) / 2, - holeDiameter)); - } - break; - case _180: - body[3] = new Area(new Ellipse2D.Double( - controlPoints[0].x - spacing - diameter / 2, controlPoints[0].y + spacing - / 2, diameter, diameter)); - for (int i = 0; i < 3; i++) { - body[i] = new Area(new Rectangle2D.Double( - controlPoints[i].x - holeDiameter / 2, controlPoints[i].y, + controlPoints[i].x - holeDiameter / 2, + controlPoints[i].y - (spacing + diameter) / 2, holeDiameter, (spacing + diameter) / 2)); } break; - case _270: - body[3] = new Area(new Ellipse2D.Double( - controlPoints[0].x - spacing / 2 - diameter, controlPoints[0].y - spacing - - diameter / 2, diameter, diameter)); + case _90: + body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + + spacing / 2, controlPoints[0].y + spacing - diameter + / 2, diameter, diameter)); for (int i = 0; i < 3; i++) { - body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x - - (spacing + diameter) / 2, controlPoints[i].y - holeDiameter / 2, + body[i] = new Area(new Rectangle2D.Double( + controlPoints[i].x, controlPoints[i].y + - holeDiameter / 2, + (spacing + diameter) / 2, holeDiameter)); + } + break; + case _180: + body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + - spacing - diameter / 2, controlPoints[0].y + spacing + / 2, diameter, diameter)); + for (int i = 0; i < 3; i++) { + body[i] = new Area(new Rectangle2D.Double( + controlPoints[i].x - holeDiameter / 2, + controlPoints[i].y, holeDiameter, + (spacing + diameter) / 2)); + } + break; + case _270: + body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + - spacing / 2 - diameter, controlPoints[0].y - spacing + - diameter / 2, diameter, diameter)); + for (int i = 0; i < 3; i++) { + body[i] = new Area(new Rectangle2D.Double( + controlPoints[i].x - (spacing + diameter) / 2, + controlPoints[i].y - holeDiameter / 2, (spacing + diameter) / 2, holeDiameter)); } break; @@ -136,8 +155,9 @@ public class PotentiometerPanel extends AbstractPotentiometer { } // Make holes in the lugs. for (int i = 0; i < 3; i++) { - body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x - - holeDiameter / 2, controlPoints[i].y - holeDiameter / 2, holeDiameter, + body[4 + i].subtract(new Area(new Ellipse2D.Double( + controlPoints[i].x - holeDiameter / 2, + controlPoints[i].y - holeDiameter / 2, holeDiameter, holeDiameter))); } } @@ -158,30 +178,51 @@ public class PotentiometerPanel extends AbstractPotentiometer { } @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, - Project project, IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); for (Area shape : getBody()) { if (shape != null) { g2d.setColor(bodyColor); Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha - / MAX_ALPHA)); + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + if (!outlineMode) { + g2d.fill(shape); } - g2d.fill(shape); g2d.setComposite(oldComposite); - g2d.setColor(componentState == ComponentState.SELECTED - || componentState == ComponentState.DRAGGING ? SELECTION_COLOR - : borderColor); + Color finalBorderColor; + if (outlineMode) { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : theme.getOutlineColor(); + } else { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : borderColor; + } + g2d.setColor(finalBorderColor); g2d.draw(shape); } } // Draw caption. g2d.setFont(LABEL_FONT); - g2d - .setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED - : LABEL_COLOR); + Color finalLabelColor; + if (outlineMode) { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : theme.getOutlineColor(); + } else { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : LABEL_COLOR; + } + g2d.setColor(finalLabelColor); FontMetrics fontMetrics = g2d.getFontMetrics(); Rectangle2D bodyRect = getBody()[3].getBounds2D(); Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d); @@ -194,7 +235,8 @@ public class PotentiometerPanel extends AbstractPotentiometer { int x = (panelWidth - textWidth) / 2; int y = panelHeight / 2 - textHeight + fontMetrics.getAscent(); - g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect.getY() + y)); + g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect + .getY() + y)); // Draw value. rect = fontMetrics.getStringBounds(getValueForDisplay(), g2d); @@ -214,19 +256,27 @@ public class PotentiometerPanel extends AbstractPotentiometer { int margin = 4 * width / 32; int spacing = width / 3 - 1; g2d.setColor(BORDER_COLOR); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2 * width / 32)); - g2d.drawLine(width / 2 - spacing, height / 2, width / 2 - spacing, height - margin); - g2d.drawLine(width / 2 + spacing, height / 2, width / 2 + spacing, height - margin); + g2d.setStroke(ObjectCache.getInstance() + .fetchBasicStroke(2 * width / 32)); + g2d.drawLine(width / 2 - spacing, height / 2, width / 2 - spacing, + height - margin); + g2d.drawLine(width / 2 + spacing, height / 2, width / 2 + spacing, + height - margin); g2d.drawLine(width / 2, height / 2, width / 2, height - margin); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(4 * width / 32)); - g2d.drawLine(width / 2 - spacing, height - margin, width / 2 - spacing, height - margin); - g2d.drawLine(width / 2 + spacing, height - margin, width / 2 + spacing, height - margin); + g2d.setStroke(ObjectCache.getInstance() + .fetchBasicStroke(4 * width / 32)); + g2d.drawLine(width / 2 - spacing, height - margin, width / 2 - spacing, + height - margin); + g2d.drawLine(width / 2 + spacing, height - margin, width / 2 + spacing, + height - margin); g2d.drawLine(width / 2, height - margin, width / 2, height - margin); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setColor(BODY_COLOR); - g2d.fillOval(margin, margin / 2, width - 2 * margin, height - 2 * margin); + g2d.fillOval(margin, margin / 2, width - 2 * margin, height - 2 + * margin); g2d.setColor(BORDER_COLOR); - g2d.drawOval(margin, margin / 2, width - 2 * margin, height - 2 * margin); + g2d.drawOval(margin, margin / 2, width - 2 * margin, height - 2 + * margin); } @EditableProperty diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java index f117ccf7..20dccb70 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/TrimmerPotentiometer.java @@ -12,6 +12,8 @@ import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; import org.diylc.common.Orientation; import org.diylc.core.ComponentState; @@ -19,10 +21,12 @@ import org.diylc.core.CreationMethod; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.Theme; 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 = "Trimmer Potentiometer", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "Various types of board mounted trimmer potentiometers", zOrder = IDIYComponent.COMPONENT, stretchable = false) public class TrimmerPotentiometer extends AbstractPotentiometer { @@ -50,7 +54,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { protected TrimmerType type = TrimmerType.FLAT_SMALL; public TrimmerPotentiometer() { - controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), + new Point(0, 0) }; updateControlPoints(); } @@ -176,8 +181,10 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { default: break; } - controlPoints[1].setLocation(controlPoints[0].x + dx1, controlPoints[0].y + dy1); - controlPoints[2].setLocation(controlPoints[0].x + dx2, controlPoints[0].y + dy2); + controlPoints[1].setLocation(controlPoints[0].x + dx1, + controlPoints[0].y + dy1); + controlPoints[2].setLocation(controlPoints[0].x + dx2, + controlPoints[0].y + dy2); } public Shape[] getBody() { @@ -186,12 +193,14 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { // Calculate the center point as center of the minimum bounding // rectangle. - int centerX = (Math.max(Math.max(controlPoints[0].x, controlPoints[1].x), - controlPoints[2].x) + Math.min( - Math.min(controlPoints[0].x, controlPoints[1].x), controlPoints[2].x)) / 2; - int centerY = (Math.max(Math.max(controlPoints[0].y, controlPoints[1].y), - controlPoints[2].y) + Math.min( - Math.min(controlPoints[0].y, controlPoints[1].y), controlPoints[2].y)) / 2; + int centerX = (Math.max(Math.max(controlPoints[0].x, + controlPoints[1].x), controlPoints[2].x) + Math.min(Math + .min(controlPoints[0].x, controlPoints[1].x), + controlPoints[2].x)) / 2; + int centerY = (Math.max(Math.max(controlPoints[0].y, + controlPoints[1].y), controlPoints[2].y) + Math.min(Math + .min(controlPoints[0].y, controlPoints[1].y), + controlPoints[2].y)) / 2; // Calculate body dimensions based on the selected type. int length = 0; @@ -202,11 +211,12 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { length = getClosestOdd(FLAT_BODY_SIZE.convertToPixels()); width = length; int shaftSize = getClosestOdd(FLAT_SHAFT_SIZE.convertToPixels()); - Area shaft = new Area(new Ellipse2D.Double(centerX - shaftSize / 2, centerY - - shaftSize / 2, shaftSize, shaftSize)); - Area slot = new Area(new Rectangle2D.Double(centerX - shaftSize / 2, centerY - - shaftSize / 8, shaftSize, shaftSize / 4)); - slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, centerX, centerY)); + Area shaft = new Area(new Ellipse2D.Double(centerX - shaftSize + / 2, centerY - shaftSize / 2, shaftSize, shaftSize)); + Area slot = new Area(new Rectangle2D.Double(centerX - shaftSize + / 2, centerY - shaftSize / 8, shaftSize, shaftSize / 4)); + slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, + centerX, centerY)); shaft.subtract(slot); body[1] = shaft; break; @@ -216,13 +226,14 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { width = getClosestOdd(VERTICAL_BODY_WIDTH.convertToPixels()); break; } - if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { + if (orientation == Orientation.DEFAULT + || orientation == Orientation._180) { int p = length; length = width; width = p; } - body[0] = new Rectangle2D.Double(centerX - length / 2, centerY - width / 2, length, - width); + body[0] = new Rectangle2D.Double(centerX - length / 2, centerY + - width / 2, length, width); } return body; } @@ -241,48 +252,75 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { } @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, - Project project, IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { if (checkPointsClipped(g2d.getClip())) { return; } g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); Shape mainShape = getBody()[0]; Shape shaftShape = getBody()[1]; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); if (mainShape != null) { g2d.setColor(bodyColor); Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha - / MAX_ALPHA)); + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - g2d.fill(mainShape); - if (shaftShape != null) { + if (!outlineMode) { + g2d.fill(mainShape); + } + if (!outlineMode && shaftShape != null) { g2d.setColor(SHAFT_COLOR); g2d.fill(shaftShape); g2d.setColor(SHAFT_BORDER_COLOR); g2d.draw(shaftShape); } g2d.setComposite(oldComposite); - g2d.setColor(componentState == ComponentState.SELECTED - || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); + Color finalBorderColor; + if (outlineMode) { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : theme.getOutlineColor(); + } else { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : borderColor; + } + g2d.setColor(finalBorderColor); g2d.draw(mainShape); } // Draw pins. int pinSize = getClosestOdd(PIN_SIZE.convertToPixels()); 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); + 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); } // Draw label. g2d.setFont(LABEL_FONT); - g2d - .setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED - : LABEL_COLOR); + Color finalLabelColor; + if (outlineMode) { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : theme.getOutlineColor(); + } else { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : LABEL_COLOR; + } + g2d.setColor(finalLabelColor); FontMetrics fontMetrics = g2d.getFontMetrics(); Rectangle2D bodyRect = getBody()[0].getBounds2D(); Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d); @@ -295,7 +333,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { int x = (panelWidth - textWidth) / 2; int y = (panelHeight - textHeight) / 2 + fontMetrics.getAscent(); - g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect.getY() + y)); + g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect + .getY() + y)); } @Override @@ -308,10 +347,12 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { g2d.drawRect(margin, margin, width - 2 * margin, width - 2 * margin); int shaftSize = 11; int slotSize = 2; - Area area = new Area(new Ellipse2D.Double(width / 2 - shaftSize / 2, width / 2 - shaftSize - / 2, shaftSize, shaftSize)); - Area slot = new Area(new Rectangle2D.Double(0, width / 2 - slotSize / 2, width, slotSize)); - slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, width / 2, width / 2)); + Area area = new Area(new Ellipse2D.Double(width / 2 - shaftSize / 2, + width / 2 - shaftSize / 2, shaftSize, shaftSize)); + Area slot = new Area(new Rectangle2D.Double(0, + width / 2 - slotSize / 2, width, slotSize)); + slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, + width / 2, width / 2)); area.subtract(slot); g2d.setColor(SHAFT_COLOR); g2d.fill(area); @@ -330,9 +371,11 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { g2d.drawOval(margin - pinSize / 2, 21 - pinSize / 2, pinSize, pinSize); g2d.setColor(PIN_COLOR); - g2d.fillOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, pinSize, pinSize); + g2d.fillOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, + pinSize, pinSize); g2d.setColor(PIN_BORDER_COLOR); - g2d.drawOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, pinSize, pinSize); + g2d.drawOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, + pinSize, pinSize); } @EditableProperty(name = "Body") @@ -369,7 +412,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { @Override public String toString() { - return name().substring(0, 1) + name().substring(1).toLowerCase().replace("_", " "); + return name().substring(0, 1) + + name().substring(1).toLowerCase().replace("_", " "); } } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java index b622a01e..9de54901 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java @@ -152,23 +152,38 @@ public class TransistorTO1 extends AbstractTransparentComponent { if (folded) { switch (orientation) { case DEFAULT: - body = new Area(new RoundRectangle2D.Double(x - bodyLength, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); + body = new Area(new RoundRectangle2D.Double(x - bodyLength, + y - bodyDiameter / 2, bodyLength, bodyDiameter, + edgeRadius, edgeRadius)); + body.add(new Area(new Rectangle2D.Double( + x - bodyLength / 2, y - bodyDiameter / 2, + bodyLength / 2, bodyDiameter))); break; case _90: - body = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y - bodyLength, bodyDiameter, bodyLength, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter, bodyLength / 2))); + body = new Area(new RoundRectangle2D.Double(x + - bodyDiameter / 2, y - bodyLength, bodyDiameter, + bodyLength, edgeRadius, edgeRadius)); + body.add(new Area(new Rectangle2D.Double(x - bodyDiameter + / 2, y - bodyLength / 2, bodyDiameter, + bodyLength / 2))); break; case _180: - body = new Area(new RoundRectangle2D.Double(x, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); + body = new Area(new RoundRectangle2D.Double(x, y + - bodyDiameter / 2, bodyLength, bodyDiameter, + edgeRadius, edgeRadius)); + body.add(new Area(new Rectangle2D.Double(x, y + - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); break; case _270: - body = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2))); + body = new Area(new RoundRectangle2D.Double(x + - bodyDiameter / 2, y, bodyDiameter, bodyLength, + edgeRadius, edgeRadius)); + body.add(new Area(new Rectangle2D.Double(x - bodyDiameter + / 2, y, bodyDiameter, bodyLength / 2))); break; default: - throw new RuntimeException("Unexpected orientation: " + orientation); + throw new RuntimeException("Unexpected orientation: " + + orientation); } } else { body = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y @@ -197,9 +212,9 @@ 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) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : theme.getOutlineColor(); @@ -212,23 +227,22 @@ public class TransistorTO1 extends AbstractTransparentComponent { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(mainArea); - if (!outlineMode) { - for (Point point : controlPoints) { + for (Point point : controlPoints) { + if (!outlineMode) { 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); } + g2d.setColor(outlineMode ? theme.getOutlineColor() + : PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, + pinSize); } // Draw label. g2d.setFont(LABEL_FONT); Color finalLabelColor; if (outlineMode) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalLabelColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED : theme.getOutlineColor(); @@ -282,12 +296,12 @@ public class TransistorTO1 extends AbstractTransparentComponent { // Reset body shape; body = null; } - - @EditableProperty(name="Pin spacing") + + @EditableProperty(name = "Pin spacing") public Size getPinSpacing() { return pinSpacing; } - + public void setPinSpacing(Size pinSpacing) { this.pinSpacing = pinSpacing; updateControlPoints(); @@ -303,12 +317,12 @@ public class TransistorTO1 extends AbstractTransparentComponent { public void setBorderColor(Color borderColor) { this.borderColor = borderColor; } - + @EditableProperty(name = "Label") public Color getLabelColor() { return labelColor; } - + public void setLabelColor(Color labelColor) { this.labelColor = labelColor; } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java index 0e59dd3f..a3732a58 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java @@ -285,9 +285,9 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.draw(tabArea); } Color finalBorderColor; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); if (outlineMode) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : theme.getOutlineColor(); @@ -303,69 +303,82 @@ public class TransistorTO220 extends AbstractTransparentComponent { } // Draw pins. - if (!outlineMode) { - if (folded) { - int leadThickness = getClosestOdd(LEAD_THICKNESS - .convertToPixels()); - int leadLength = (int) getLeadLength().convertToPixels(); - for (Point point : controlPoints) { - switch (orientation) { - case DEFAULT: - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness)); - g2d.setColor(METAL_COLOR.darker()); - g2d.drawLine(point.x, point.y, point.x + leadLength - - leadThickness / 2, point.y); - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness - 2)); - g2d.setColor(METAL_COLOR); - g2d.drawLine(point.x, point.y, point.x + leadLength - - leadThickness / 2, point.y); - break; - case _90: - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness)); - g2d.setColor(METAL_COLOR.darker()); - g2d.drawLine(point.x, point.y, point.x, point.y - + leadLength - leadThickness / 2); - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness - 2)); - g2d.setColor(METAL_COLOR); - g2d.drawLine(point.x, point.y, point.x, point.y - + leadLength - leadThickness / 2); - break; - case _180: - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness)); - g2d.setColor(METAL_COLOR.darker()); - g2d.drawLine(point.x, point.y, point.x - leadLength - - leadThickness / 2, point.y); - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness - 2)); - g2d.setColor(METAL_COLOR); - g2d.drawLine(point.x, point.y, point.x - leadLength - - leadThickness / 2, point.y); - break; - case _270: - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness)); - g2d.setColor(METAL_COLOR.darker()); - g2d.drawLine(point.x, point.y, point.x, point.y - - leadLength); - g2d.setStroke(ObjectCache.getInstance() - .fetchBasicStroke(leadThickness - 2)); - g2d.setColor(METAL_COLOR); - g2d.drawLine(point.x, point.y, point.x, point.y - - leadLength); - break; - } - } + + 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(PIN_BORDER_COLOR); + g2d.setColor(outlineMode ? theme.getOutlineColor() + : PIN_BORDER_COLOR); g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); } @@ -376,8 +389,6 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.setFont(LABEL_FONT); Color finalLabelColor; if (outlineMode) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalLabelColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED : theme.getOutlineColor(); @@ -413,7 +424,7 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.setColor(TAB_COLOR); g2d.fill(a); g2d.setColor(BORDER_COLOR); - g2d.draw(a); + g2d.draw(a); g2d.setColor(BODY_COLOR); g2d.fillRect((width - bodySize) / 2, margin + tabSize, bodySize, bodySize); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java index c257bfc6..26e9b28b 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorTO3.java @@ -250,9 +250,9 @@ 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) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : theme.getOutlineColor(); @@ -266,23 +266,22 @@ public class TransistorTO3 extends AbstractTransparentComponent { g2d.draw(mainArea); g2d.draw(innerArea); - if (!outlineMode) { - for (Point point : controlPoints) { + for (Point point : controlPoints) { + if (!outlineMode) { 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); } + g2d.setColor(outlineMode ? theme.getOutlineColor() + : PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, + pinSize); } // Draw label. g2d.setFont(LABEL_FONT); Color finalLabelColor; if (outlineMode) { - Theme theme = (Theme) ConfigurationManager.getInstance() - .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); finalLabelColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED : theme.getOutlineColor(); @@ -313,20 +312,20 @@ public class TransistorTO3 extends AbstractTransparentComponent { int hole = 4 * width / 32; Area area = new Area(new Ellipse2D.Double((width - sizeLarge) / 2, (height - sizeLarge) / 2, sizeLarge, sizeLarge)); -// int[] x = new int[] { width / 2 + sizeSmall / 2, -// width / 2 + sizeLarge / 2, width / 2 + sizeSmall / 2, -// width / 2 - sizeSmall / 2, width / 2 - sizeLarge / 2, -// width / 2 - sizeSmall / 2 }; -// int[] y = new int[] { height / 8, height / 2, height * 7 / 8, -// height * 7 / 8, height / 2, height / 8 }; -// Area p = new Area(new Polygon(x, y, x.length)); -// AffineTransform t = AffineTransform.getTranslateInstance(width / 2, -// height / 2); -// t.concatenate(AffineTransform.getScaleInstance(1.05, 1.05)); -// t.concatenate(AffineTransform.getTranslateInstance(-width / 2, -// -height / 2)); -// p.transform(t); -// area.add(new Area(p)); + // int[] x = new int[] { width / 2 + sizeSmall / 2, + // width / 2 + sizeLarge / 2, width / 2 + sizeSmall / 2, + // width / 2 - sizeSmall / 2, width / 2 - sizeLarge / 2, + // width / 2 - sizeSmall / 2 }; + // int[] y = new int[] { height / 8, height / 2, height * 7 / 8, + // height * 7 / 8, height / 2, height / 8 }; + // Area p = new Area(new Polygon(x, y, x.length)); + // AffineTransform t = AffineTransform.getTranslateInstance(width / 2, + // height / 2); + // t.concatenate(AffineTransform.getScaleInstance(1.05, 1.05)); + // t.concatenate(AffineTransform.getTranslateInstance(-width / 2, + // -height / 2)); + // p.transform(t); + // area.add(new Area(p)); area.add(new Area(new Ellipse2D.Double((width - sizeSmall) / 2, height / 8 - sizeSmall / 2, sizeSmall, sizeSmall))); area.add(new Area(new Ellipse2D.Double((width - sizeSmall) / 2, height @@ -341,8 +340,8 @@ public class TransistorTO3 extends AbstractTransparentComponent { g2d.fill(area); g2d.setColor(BORDER_COLOR); g2d.draw(area); - g2d.drawOval((width - sizeInner) / 2, (height - sizeInner) / 2, sizeInner, - sizeInner); + g2d.drawOval((width - sizeInner) / 2, (height - sizeInner) / 2, + sizeInner, sizeInner); } @EditableProperty(name = "Body")