Better selection rendering for a few components, mostly

electro-mechanical
This commit is contained in:
Branislav Stojkovic
2019-01-23 23:20:14 +01:00
parent c8af6dbbb2
commit 197f9ca216
11 changed files with 268 additions and 243 deletions
@@ -0,0 +1,35 @@
package org.diylc.components;
import java.awt.Graphics2D;
import java.awt.geom.Area;
import org.diylc.common.ObjectCache;
import org.diylc.core.ComponentState;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
public abstract class AbstractMultiPartComponent<T> extends AbstractTransparentComponent<T> {
private static final long serialVersionUID = 1L;
public abstract Area[] getBody();
public void drawSelectionOutline(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project,
IDrawingObserver drawingObserver) {
if (componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING) {
g2d.setColor(SELECTION_COLOR);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f));
g2d.draw(getBodyOutline());
}
}
public Area getBodyOutline() {
Area[] body = getBody();
Area outline = new Area();
for (Area b : body)
if (b != null)
outline.add(b);
return outline;
}
}
@@ -39,7 +39,7 @@ import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.common.VerticalAlignment; import org.diylc.common.VerticalAlignment;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.components.transform.CliffJackTransformer; import org.diylc.components.transform.CliffJackTransformer;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
@@ -56,7 +56,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Cliff 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Cliff 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Cliff-style closed panel mount 1/4\" phono jack", stretchable = false, description = "Cliff-style closed panel mount 1/4\" phono jack", stretchable = false,
zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J", autoEdit = false, transformer = CliffJackTransformer.class) zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J", autoEdit = false, transformer = CliffJackTransformer.class)
public class CliffJack1_4 extends AbstractTransparentComponent<String> { public class CliffJack1_4 extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -74,7 +74,7 @@ public class CliffJack1_4 extends AbstractTransparentComponent<String> {
private Point[] controlPoints = new Point[] {new Point(0, 0)}; private Point[] controlPoints = new Point[] {new Point(0, 0)};
private JackType type = JackType.MONO; private JackType type = JackType.MONO;
private Orientation orientation = Orientation.DEFAULT; private Orientation orientation = Orientation.DEFAULT;
transient private Shape[] body; transient private Area[] body;
private String value = ""; private String value = "";
public CliffJack1_4() { public CliffJack1_4() {
@@ -129,29 +129,27 @@ public class CliffJack1_4 extends AbstractTransparentComponent<String> {
return angle; return angle;
} }
public Shape[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Shape[5]; body = new Area[5];
// Create body. // Create body.
int bodyLength = (int) BODY_LENGTH.convertToPixels(); int bodyLength = (int) BODY_LENGTH.convertToPixels();
int bodyWidth = (int) BODY_WIDTH.convertToPixels(); int bodyWidth = (int) BODY_WIDTH.convertToPixels();
int centerX = (controlPoints[0].x + controlPoints[3].x) / 2; int centerX = (controlPoints[0].x + controlPoints[3].x) / 2;
int centerY = (controlPoints[0].y + controlPoints[3].y) / 2; int centerY = (controlPoints[0].y + controlPoints[3].y) / 2;
body[0] = new Rectangle(centerX - bodyLength / 2, centerY - bodyWidth / 2, bodyLength, bodyWidth); body[0] = new Area(new Rectangle(centerX - bodyLength / 2, centerY - bodyWidth / 2, bodyLength, bodyWidth));
int tailLength = (int) TAIL_LENGTH.convertToPixels(); int tailLength = (int) TAIL_LENGTH.convertToPixels();
body[1] = body[1] = new Area(new RoundRectangle2D.Double(centerX - bodyLength / 2 - tailLength, centerY - bodyWidth / 4, tailLength * 2,
new RoundRectangle2D.Double(centerX - bodyLength / 2 - tailLength, centerY - bodyWidth / 4, tailLength * 2, bodyWidth / 2, tailLength, tailLength));
bodyWidth / 2, tailLength, tailLength);
Area tailArea = new Area(body[1]); Area tailArea = new Area(body[1]);
tailArea.subtract(new Area(body[0])); tailArea.subtract(new Area(body[0]));
body[1] = tailArea; body[1] = tailArea;
body[2] = new Rectangle(centerX + bodyLength / 2, centerY - bodyWidth / 4, tailLength, bodyWidth / 2); body[2] = new Area(new Rectangle(centerX + bodyLength / 2, centerY - bodyWidth / 4, tailLength, bodyWidth / 2));
body[3] = body[3] = new Area(new Rectangle(centerX + bodyLength / 2 + tailLength, centerY - bodyWidth / 4, tailLength, bodyWidth / 2));
new Rectangle(centerX + bodyLength / 2 + tailLength, centerY - bodyWidth / 4, tailLength, bodyWidth / 2);
tailArea = new Area(body[3]); tailArea = new Area(body[3]);
int radius = bodyLength / 2 + tailLength * 2; int radius = bodyLength / 2 + tailLength * 2;
tailArea.intersect(new Area(new Ellipse2D.Double(centerX - radius, centerY - radius, radius * 2, radius * 2))); tailArea.intersect(new Area(new Ellipse2D.Double(centerX - radius, centerY - radius, radius * 2, radius * 2)));
@@ -215,13 +213,9 @@ public class CliffJack1_4 extends AbstractTransparentComponent<String> {
Color finalBorderColor; Color finalBorderColor;
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
if (outlineMode) { if (outlineMode) {
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = BORDER_COLOR;
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: BORDER_COLOR;
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -253,6 +247,8 @@ public class CliffJack1_4 extends AbstractTransparentComponent<String> {
int centerX = (controlPoints[0].x + controlPoints[3].x) / 2; int centerX = (controlPoints[0].x + controlPoints[3].x) / 2;
int centerY = (controlPoints[0].y + controlPoints[3].y) / 2; int centerY = (controlPoints[0].y + controlPoints[3].y) / 2;
drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@Override @Override
@@ -39,7 +39,7 @@ import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.common.VerticalAlignment; import org.diylc.common.VerticalAlignment;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.components.transform.ClosedJackTransformer; import org.diylc.components.transform.ClosedJackTransformer;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
@@ -56,7 +56,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Closed 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Closed 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Enclosed panel mount 1/4\" phono jack", stretchable = false, zOrder = IDIYComponent.COMPONENT, description = "Enclosed panel mount 1/4\" phono jack", stretchable = false, zOrder = IDIYComponent.COMPONENT,
instanceNamePrefix = "J", autoEdit = false, transformer = ClosedJackTransformer.class) instanceNamePrefix = "J", autoEdit = false, transformer = ClosedJackTransformer.class)
public class ClosedJack1_4 extends AbstractTransparentComponent<String> { public class ClosedJack1_4 extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -76,7 +76,7 @@ public class ClosedJack1_4 extends AbstractTransparentComponent<String> {
private Point[] controlPoints = new Point[] {new Point(0, 0)}; private Point[] controlPoints = new Point[] {new Point(0, 0)};
private JackType type = JackType.MONO; private JackType type = JackType.MONO;
private Orientation orientation = Orientation.DEFAULT; private Orientation orientation = Orientation.DEFAULT;
transient private Shape[] body; transient private Area[] body;
private String value = ""; private String value = "";
public ClosedJack1_4() { public ClosedJack1_4() {
@@ -129,9 +129,9 @@ public class ClosedJack1_4 extends AbstractTransparentComponent<String> {
return angle; return angle;
} }
public Shape[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Shape[5]; body = new Area[5];
// Create body. // Create body.
int x = controlPoints[0].x; int x = controlPoints[0].x;
@@ -170,7 +170,7 @@ public class ClosedJack1_4 extends AbstractTransparentComponent<String> {
} }
Area pathArea = new Area(path); Area pathArea = new Area(path);
pathArea.intersect(shaft); pathArea.intersect(shaft);
body[2] = path; body[2] = new Area(path);
// Create lugs. // Create lugs.
Area lugs = new Area(); Area lugs = new Area();
@@ -234,13 +234,9 @@ public class ClosedJack1_4 extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = BORDER_COLOR;
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: BORDER_COLOR;
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -274,6 +270,8 @@ public class ClosedJack1_4 extends AbstractTransparentComponent<String> {
int centerX = bounds.x + bounds.width / 2; int centerX = bounds.x + bounds.width / 2;
int centerY = bounds.y + bounds.height / 2; int centerY = bounds.y + bounds.height / 2;
drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@Override @Override
@@ -38,7 +38,7 @@ import org.diylc.common.Display;
import org.diylc.common.IPlugInPort; import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.OrientationHV; import org.diylc.common.OrientationHV;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver; import org.diylc.core.IDrawingObserver;
@@ -54,7 +54,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Fuse Holder (Panel)", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Fuse Holder (Panel)", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Panel mounted fuse holder", stretchable = false, zOrder = IDIYComponent.COMPONENT, description = "Panel mounted fuse holder", stretchable = false, zOrder = IDIYComponent.COMPONENT,
instanceNamePrefix = "FH", autoEdit = false) instanceNamePrefix = "FH", autoEdit = false)
public class FuseHolderPanel extends AbstractTransparentComponent<String> { public class FuseHolderPanel extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -188,13 +188,9 @@ public class FuseHolderPanel extends AbstractTransparentComponent<String> {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
Color finalBorderColor; Color finalBorderColor;
if (outlineMode) { if (outlineMode) {
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = getBorderColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: getBorderColor();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
for (Area a : body) for (Area a : body)
@@ -255,8 +251,11 @@ public class FuseHolderPanel extends AbstractTransparentComponent<String> {
int x = bounds.x + (bounds.width - textWidth) / 2; int x = bounds.x + (bounds.width - textWidth) / 2;
int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent();
g2d.drawString(label, x, y); g2d.drawString(label, x, y);
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@Override
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
Point firstPoint = controlPoints[0]; Point firstPoint = controlPoints[0];
@@ -35,7 +35,7 @@ import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.common.IPlugInPort; import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.components.RoundedPolygon; import org.diylc.components.RoundedPolygon;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
@@ -52,7 +52,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "IEC Socket", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "IEC Socket", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Panel mounted IEC power socket", stretchable = false, zOrder = IDIYComponent.COMPONENT, description = "Panel mounted IEC power socket", stretchable = false, zOrder = IDIYComponent.COMPONENT,
instanceNamePrefix = "IEC", autoEdit = false) instanceNamePrefix = "IEC", autoEdit = false)
public class IECSocket extends AbstractTransparentComponent<String> { public class IECSocket extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -209,13 +209,9 @@ public class IECSocket extends AbstractTransparentComponent<String> {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
Color finalBorderColor; Color finalBorderColor;
if (outlineMode) { if (outlineMode) {
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = getBorderColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: getBorderColor();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
for (Area a : body) for (Area a : body)
@@ -245,6 +241,8 @@ public class IECSocket extends AbstractTransparentComponent<String> {
g2d.fillRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); g2d.fillRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight);
} }
} }
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
@@ -38,7 +38,7 @@ import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.common.VerticalAlignment; import org.diylc.common.VerticalAlignment;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver; import org.diylc.core.IDrawingObserver;
@@ -54,7 +54,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Open 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Open 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Switchcraft-style open panel mount 1/4\" phono jack, stereo and mono", stretchable = false, description = "Switchcraft-style open panel mount 1/4\" phono jack, stereo and mono", stretchable = false,
zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J") zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J")
public class OpenJack1_4 extends AbstractTransparentComponent<String> { public class OpenJack1_4 extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -71,7 +71,7 @@ public class OpenJack1_4 extends AbstractTransparentComponent<String> {
private String value = ""; private String value = "";
private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)};
transient Shape[] body; transient Area[] body;
private Orientation orientation = Orientation.DEFAULT; private Orientation orientation = Orientation.DEFAULT;
private JackType type = JackType.MONO; private JackType type = JackType.MONO;
private boolean showLabels = true; private boolean showLabels = true;
@@ -104,13 +104,9 @@ public class OpenJack1_4 extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = WAFER_COLOR.darker();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: WAFER_COLOR.darker();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -136,13 +132,9 @@ public class OpenJack1_4 extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = BASE_COLOR.darker();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: BASE_COLOR.darker();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -192,12 +184,14 @@ public class OpenJack1_4 extends AbstractTransparentComponent<String> {
if (getType() == JackType.STEREO) if (getType() == JackType.STEREO)
drawCenteredText(g2d, "R", ringLabel.x, ringLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); drawCenteredText(g2d, "R", ringLabel.x, ringLabel.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
} }
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
public Shape[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Shape[4]; body = new Area[4];
int x = controlPoints[0].x; int x = controlPoints[0].x;
int y = controlPoints[0].y; int y = controlPoints[0].y;
@@ -26,24 +26,19 @@ import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Polygon;
import java.awt.RadialGradientPaint;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D; import java.awt.geom.RoundRectangle2D;
import java.util.ArrayList;
import java.util.List;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.common.IPlugInPort; import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver; import org.diylc.core.IDrawingObserver;
@@ -59,7 +54,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Pilot Lamp Holder", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Pilot Lamp Holder", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Fender-style pilot bulb holder for T2 and T-3 ¼ miniature bayonet lamps", stretchable = false, description = "Fender-style pilot bulb holder for T2 and T-3 ¼ miniature bayonet lamps", stretchable = false,
zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "PL") zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "PL")
public class PilotLampHolder extends AbstractTransparentComponent<String> { public class PilotLampHolder extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -110,13 +105,9 @@ public class PilotLampHolder extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = WAFER_COLOR.darker();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: WAFER_COLOR.darker();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -146,13 +137,9 @@ public class PilotLampHolder extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = BASE_COLOR.darker();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: BASE_COLOR.darker();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
@@ -163,6 +150,8 @@ public class PilotLampHolder extends AbstractTransparentComponent<String> {
g2d.draw(body[1]); g2d.draw(body[1]);
g2d.draw(body[2]); g2d.draw(body[2]);
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@SuppressWarnings("incomplete-switch") @SuppressWarnings("incomplete-switch")
@@ -36,7 +36,7 @@ import org.diylc.common.HorizontalAlignment;
import org.diylc.common.IPlugInPort; import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.VerticalAlignment; import org.diylc.common.VerticalAlignment;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver; import org.diylc.core.IDrawingObserver;
@@ -52,7 +52,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Plastic DC Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic", @ComponentDescriptor(name = "Plastic DC Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic",
description = "Panel mount plastic DC jack", stretchable = false, zOrder = IDIYComponent.COMPONENT, description = "Panel mount plastic DC jack", stretchable = false, zOrder = IDIYComponent.COMPONENT,
instanceNamePrefix = "J", autoEdit = false) instanceNamePrefix = "J", autoEdit = false)
public class PlasticDCJack extends AbstractTransparentComponent<String> { public class PlasticDCJack extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -68,7 +68,7 @@ public class PlasticDCJack extends AbstractTransparentComponent<String> {
private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; private Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)};
private String value = ""; private String value = "";
private DCPolarity polarity = DCPolarity.CENTER_NEGATIVE; private DCPolarity polarity = DCPolarity.CENTER_NEGATIVE;
transient private Shape[] body; transient private Area[] body;
public PlasticDCJack() { public PlasticDCJack() {
updateControlPoints(); updateControlPoints();
@@ -86,18 +86,19 @@ public class PlasticDCJack extends AbstractTransparentComponent<String> {
controlPoints[2] = new Point(x - spacing, y + spacing * 2); controlPoints[2] = new Point(x - spacing, y + spacing * 2);
} }
public Shape[] getBody() { @Override
public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Shape[4]; body = new Area[4];
int x = controlPoints[0].x; int x = controlPoints[0].x;
int y = controlPoints[0].y; int y = controlPoints[0].y;
int spacing = (int) SPACING.convertToPixels(); int spacing = (int) SPACING.convertToPixels();
int diameter = getClosestOdd(DIAMETER.convertToPixels()); int diameter = getClosestOdd(DIAMETER.convertToPixels());
body[0] = new Ellipse2D.Double(x - diameter / 2, y + spacing - diameter / 2, diameter, diameter); body[0] = new Area(new Ellipse2D.Double(x - diameter / 2, y + spacing - diameter / 2, diameter, diameter));
int rectWidth = (int) (diameter / Math.sqrt(2)) - 2; int rectWidth = (int) (diameter / Math.sqrt(2)) - 2;
body[1] = new Rectangle(x - rectWidth / 2, y + spacing - rectWidth / 2, rectWidth, rectWidth); body[1] = new Area(new Rectangle(x - rectWidth / 2, y + spacing - rectWidth / 2, rectWidth, rectWidth));
int lugWidth = getClosestOdd(LUG_WIDTH.convertToPixels()); int lugWidth = getClosestOdd(LUG_WIDTH.convertToPixels());
int lugThickness = getClosestOdd(LUG_THICKNESS.convertToPixels()); int lugThickness = getClosestOdd(LUG_THICKNESS.convertToPixels());
@@ -186,6 +187,8 @@ public class PlasticDCJack extends AbstractTransparentComponent<String> {
drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "_" : "+", controlPoints[2].x, drawCenteredText(g2d, getPolarity() == DCPolarity.CENTER_NEGATIVE ? "_" : "+", controlPoints[2].x,
controlPoints[2].y - spacing * 3 / 4, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); controlPoints[2].y - spacing * 3 / 4, HorizontalAlignment.CENTER, VerticalAlignment.CENTER);
} }
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@Override @Override
@@ -40,7 +40,7 @@ import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache; import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation; import org.diylc.common.Orientation;
import org.diylc.common.VerticalAlignment; import org.diylc.common.VerticalAlignment;
import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.AbstractMultiPartComponent;
import org.diylc.components.transform.DIL_ICTransformer; import org.diylc.components.transform.DIL_ICTransformer;
import org.diylc.core.ComponentState; import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent; import org.diylc.core.IDIYComponent;
@@ -59,7 +59,7 @@ import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Audio Transformer", author = "Branislav Stojkovic", category = "Passive", @ComponentDescriptor(name = "Audio Transformer", author = "Branislav Stojkovic", category = "Passive",
instanceNamePrefix = "TR", description = "Small signal audio transformer with EI core", stretchable = false, instanceNamePrefix = "TR", description = "Small signal audio transformer with EI core", stretchable = false,
zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = DIL_ICTransformer.class) zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = DIL_ICTransformer.class)
public class AudioTransformer extends AbstractTransparentComponent<String> { public class AudioTransformer extends AbstractMultiPartComponent<String> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -205,6 +205,7 @@ public class AudioTransformer extends AbstractTransparentComponent<String> {
} }
} }
@Override
public Area[] getBody() { public Area[] getBody() {
if (body == null) { if (body == null) {
body = new Area[2]; body = new Area[2];
@@ -287,13 +288,9 @@ public class AudioTransformer extends AbstractTransparentComponent<String> {
if (outlineMode) { if (outlineMode) {
Theme theme = Theme theme =
(Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = finalBorderColor = theme.getOutlineColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else { } else {
finalBorderColor = finalBorderColor = getCoilBorderColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: getCoilBorderColor();
} }
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
g2d.draw(coilArea); g2d.draw(coilArea);
@@ -303,11 +300,9 @@ public class AudioTransformer extends AbstractTransparentComponent<String> {
g2d.fill(coreArea); g2d.fill(coreArea);
g2d.setComposite(oldComposite); g2d.setComposite(oldComposite);
if (!outlineMode) { if (!outlineMode)
finalBorderColor = finalBorderColor = getCoreBorderColor();
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: getCoreBorderColor();
}
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
g2d.draw(coreArea); g2d.draw(coreArea);
@@ -383,6 +378,8 @@ public class AudioTransformer extends AbstractTransparentComponent<String> {
g2d.setTransform(oldTransform); g2d.setTransform(oldTransform);
} }
} }
drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver);
} }
@Override @Override
Binary file not shown.
+16
View File
@@ -2317,5 +2317,21 @@
</changes> </changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url> <url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version> </org.diylc.appframework.update.Version>
<org.diylc.appframework.update.Version>
<versionNumber>
<major>3</major>
<minor>51</minor>
<build>0</build>
</versionNumber>
<releaseDate>2019-01-23 00:00:00.000 CET</releaseDate>
<name></name>
<changes>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Better selection rendering for a few components, mostly electro-mechanical</description>
</org.diylc.appframework.update.Change>
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
</a> </a>
</java.util.Arrays_-ArrayList> </java.util.Arrays_-ArrayList>