From 6f6d802829b4bce7830737f742ca837c0478516e Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 16 Jan 2011 09:32:34 +0000 Subject: [PATCH] hotspot tracking optimization --- .../DIYLC/library/main.jar | Bin 519431 -> 519903 bytes .../components/AbstractCurvedComponent.java | 7 +- .../components/AbstractLeadedComponent.java | 6 +- .../src/org/diylc/core/IDIYComponent.java | 6 +- .../src/org/diylc/core/IDrawingObserver.java | 15 ++++ .../src/org/diylc/presenter/G2DWrapper.java | 84 +++++++++++++----- .../src/org/diylc/presenter/Presenter.java | 2 +- .../diylc/components/MockDIYComponent.java | 4 +- .../components/boards/AbstractBoard.java | 7 +- .../diylc/components/boards/PerfBoard.java | 7 +- .../diylc/components/boards/VeroBoard.java | 6 +- .../components/connectivity/SolderPad.java | 6 +- .../components/connectivity/TraceCut.java | 4 +- .../electromechanical/MiniToggleSwitch.java | 7 +- .../src/org/diylc/components/misc/BOM.java | 4 +- .../components/misc/ProjectInformation.java | 4 +- .../components/semiconductors/DIL_IC.java | 21 +++-- 17 files changed, 142 insertions(+), 48 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDrawingObserver.java diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index 094be57192e093a4a9b9bec8ac1a1491e2a8ab44..1784cb4d706c425c51be1cd58ff73a227fb8e58e 100644 GIT binary patch delta 27831 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 delta 27161 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 extends AbstractTransparentComp } @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { if (componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING) { + // Do not track guidelines. + drawingObserver.stopTracking(); g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER, 10f, new float[] { 2f, 3f }, 5f)); g2d.setColor(GUIDELINE_COLOR); @@ -68,6 +72,7 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp controlPoints[2].y); g2d.drawLine(controlPoints[2].x, controlPoints[2].y, controlPoints[3].x, controlPoints[3].y); + drawingObserver.startTracking(); } CubicCurve2D curve = new CubicCurve2D.Double(controlPoints[0].x, controlPoints[0].y, controlPoints[1].x, controlPoints[1].y, controlPoints[2].x, controlPoints[2].y, diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java index 72aaa07a..7095e94f 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java @@ -11,6 +11,7 @@ import java.awt.Rectangle; import java.awt.Shape; import org.diylc.core.ComponentState; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; @@ -55,7 +56,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { double distance = points[0].distance(points[1]); Shape shape = getBodyShape(); if (shape == null) { @@ -92,6 +94,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp (int) ((shapeRect.width - distance) / 2 + leadLenght), (int) shapeRect.height / 2); g2d.drawLine((int) (shapeRect.width + distance) / 2, (int) shapeRect.height / 2, (int) ((shapeRect.width + distance) / 2 - leadLenght), (int) shapeRect.height / 2); + // Do not track the label because that area was already covered. + drawingObserver.stopTracking(); // Draw label. g2d.setFont(Constants.LABEL_FONT); g2d diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java index 7419f262..c6d76b90 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java @@ -39,7 +39,7 @@ public interface IDIYComponent extends Serializable { public static final int ABOVE_BOARD = 6; public static final int COMPONENT = 7; public static final int ABOVE_COMPONENT = 8; - + public static Color SELECTION_COLOR = Color.red; /** @@ -93,8 +93,10 @@ public interface IDIYComponent extends Serializable { * @param g2d * @param componentState * @param project + * @param drawingObserver */ - void draw(Graphics2D g2d, ComponentState componentState, Project project); + void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver); /** * Draws icon representation of the component. This should not depend on diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDrawingObserver.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDrawingObserver.java new file mode 100644 index 00000000..8db76e21 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDrawingObserver.java @@ -0,0 +1,15 @@ +package org.diylc.core; + +/** + * Interface for tracking component drawing process. Components may use it to + * stop or restart tracking. Anything drawn while tracking is stopped will not + * be added to the mouse hot-spot area. + * + * @author Branislav Stojkovic + */ +public interface IDrawingObserver { + + void stopTracking(); + + void startTracking(); +} diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java index b0fcb7ed..333d6d6e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java @@ -37,6 +37,8 @@ import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; import java.util.Map; +import org.diylc.core.IDrawingObserver; + /** * {@link Graphics2D} wrapper that keeps track of all drawing actions and * creates an {@link Area} that corresponds to drawn objects. Before each @@ -47,12 +49,13 @@ import java.util.Map; * * @author Branislav Stojkovic */ -class G2DWrapper extends Graphics2D { +class G2DWrapper extends Graphics2D implements IDrawingObserver { public static int LINE_SENSITIVITY_MARGIN = 2; public static int CURVE_SENSITIVITY = 6; private boolean drawingComponent = false; + private boolean trackingAllowed = true; private Graphics2D canvasGraphics; private Stroke originalStroke; @@ -89,6 +92,7 @@ class G2DWrapper extends Graphics2D { originalFont = canvasGraphics.getFont(); currentTx = new AffineTransform(); lastShape = null; + startTracking(); } /** @@ -107,13 +111,23 @@ class G2DWrapper extends Graphics2D { return currentArea; } + @Override + public void startTracking() { + this.trackingAllowed = true; + } + + @Override + public void stopTracking() { + this.trackingAllowed = false; + } + /** * Appends shape interior to the current component area. * * @param s */ private void appendShape(Shape s) { - if (!drawingComponent) { + if (!drawingComponent || !trackingAllowed) { return; } Area area = new Area(s); @@ -129,7 +143,7 @@ class G2DWrapper extends Graphics2D { */ private void appendShapeOutline(Shape s) { // Do not add shape outline if the same shape has been filled recently. - if (!drawingComponent || s.equals(lastShape)) { + if (!drawingComponent || !trackingAllowed || s.equals(lastShape)) { return; } lastShape = s; @@ -235,7 +249,9 @@ class G2DWrapper extends Graphics2D { @Override public void draw(Shape s) { canvasGraphics.draw(s); - appendShapeOutline(s); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(s); + } } @Override @@ -270,19 +286,23 @@ class G2DWrapper extends Graphics2D { @Override public void drawString(String str, int x, int y) { canvasGraphics.drawString(str, x, y); - FontMetrics fontMetrics = canvasGraphics.getFontMetrics(); - Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics); - appendShape(new Rectangle2D.Double(rect.getX() + x, rect.getY() + y, rect.getWidth(), rect - .getHeight())); + if (drawingComponent && trackingAllowed) { + FontMetrics fontMetrics = canvasGraphics.getFontMetrics(); + Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics); + appendShape(new Rectangle2D.Double(rect.getX() + x, rect.getY() + y, rect.getWidth(), + rect.getHeight())); + } } @Override public void drawString(String str, float x, float y) { canvasGraphics.drawString(str, x, y); - FontMetrics fontMetrics = canvasGraphics.getFontMetrics(); - Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics); - appendShape(new Rectangle2D.Double(rect.getX() + x, rect.getY() + y, rect.getWidth(), rect - .getHeight())); + if (drawingComponent && trackingAllowed) { + FontMetrics fontMetrics = canvasGraphics.getFontMetrics(); + Rectangle2D rect = fontMetrics.getStringBounds(str, canvasGraphics); + appendShape(new Rectangle2D.Double(rect.getX() + x, rect.getY() + y, rect.getWidth(), + rect.getHeight())); + } } @Override @@ -508,19 +528,25 @@ class G2DWrapper extends Graphics2D { @Override public void drawLine(int x1, int y1, int x2, int y2) { canvasGraphics.drawLine(x1, y1, x2, y2); - appendShapeOutline(new Line2D.Double(x1, y1, x2, y2)); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(new Line2D.Double(x1, y1, x2, y2)); + } } @Override public void drawOval(int x, int y, int width, int height) { canvasGraphics.drawOval(x, y, width, height); - appendShapeOutline(new Ellipse2D.Double(x, y, width, height)); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(new Ellipse2D.Double(x, y, width, height)); + } } @Override public void drawPolygon(int[] points, int[] points2, int points3) { canvasGraphics.drawPolygon(points, points2, points3); - appendShapeOutline(new Polygon(points, points2, points3)); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(new Polygon(points, points2, points3)); + } } @Override @@ -531,43 +557,57 @@ class G2DWrapper extends Graphics2D { @Override public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { canvasGraphics.drawRoundRect(x, y, width, height, arcWidth, arcHeight); - appendShapeOutline(new RoundRectangle2D.Double(x, y, width, height, arcWidth, arcHeight)); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(new RoundRectangle2D.Double(x, y, width, height, arcWidth, arcHeight)); + } } @Override public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { canvasGraphics.fillArc(x, y, width, height, startAngle, arcAngle); - appendShape(new Arc2D.Double(x, y, width, height, startAngle, arcAngle, Arc2D.PIE)); + if (drawingComponent && trackingAllowed) { + appendShape(new Arc2D.Double(x, y, width, height, startAngle, arcAngle, Arc2D.PIE)); + } } @Override public void fillOval(int x, int y, int width, int height) { canvasGraphics.fillOval(x, y, width, height); - appendShape(new Ellipse2D.Double(x, y, width, height)); + if (drawingComponent && trackingAllowed) { + appendShape(new Ellipse2D.Double(x, y, width, height)); + } } @Override public void fillPolygon(int[] points, int[] points2, int points3) { canvasGraphics.fillPolygon(points, points2, points3); - appendShape(new Polygon(points, points2, points3)); + if (drawingComponent && trackingAllowed) { + appendShape(new Polygon(points, points2, points3)); + } } @Override public void drawRect(int x, int y, int width, int height) { canvasGraphics.drawRect(x, y, width, height); - appendShapeOutline(new Rectangle(x, y, width, height)); + if (drawingComponent && trackingAllowed) { + appendShapeOutline(new Rectangle(x, y, width, height)); + } } @Override public void fillRect(int x, int y, int width, int height) { canvasGraphics.fillRect(x, y, width, height); - appendShape(new Rectangle(x, y, width, height)); + if (drawingComponent && trackingAllowed) { + appendShape(new Rectangle(x, y, width, height)); + } } @Override public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) { canvasGraphics.fillRoundRect(x, y, width, height, arcWidth, arcHeight); - appendShape(new RoundRectangle2D.Double(x, y, width, height, arcWidth, arcHeight)); + if (drawingComponent && trackingAllowed) { + appendShape(new RoundRectangle2D.Double(x, y, width, height, arcWidth, arcHeight)); + } } @Override diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java index 6f9f6195..ed184ecb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java @@ -365,7 +365,7 @@ public class Presenter implements IPlugInPort { } } // Draw the component through the g2dWrapper. - component.draw(g2dWrapper, state, currentProject); + component.draw(g2dWrapper, state, currentProject, g2dWrapper); componentAreaMap.put(component, g2dWrapper.finishedDrawingComponent()); } // Draw control points. diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java index 4d0b4687..3c5cd5fb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java @@ -6,6 +6,7 @@ import java.awt.Point; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -115,7 +116,8 @@ public class MockDIYComponent implements IDIYComponent { } @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { g2d.setColor(componentState.equals(ComponentState.SELECTED) ? color : color.darker()); g2d.fillRect(leftTopCorner.x, leftTopCorner.y, 200, 50); } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java index 3d9bc2db..bf72a54d 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java @@ -9,6 +9,7 @@ import java.awt.Point; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; @@ -32,7 +33,8 @@ public abstract class AbstractBoard extends AbstractTransparentComponent protected Color borderColor = BORDER_COLOR; @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { g2d.setStroke(new BasicStroke()); if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); @@ -49,6 +51,9 @@ public abstract class AbstractBoard extends AbstractTransparentComponent || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); g2d.drawRect(controlPoints[0].x, controlPoints[0].y, controlPoints[1].x - controlPoints[0].x, controlPoints[1].y - controlPoints[0].y); + // Do not track any changes that follow because the whole board has been + // tracked so far. + drawingObserver.stopTracking(); } @EditableProperty(name = "Color") diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/PerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/PerfBoard.java index 8e466c51..89c12e0b 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/PerfBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/PerfBoard.java @@ -7,6 +7,7 @@ import java.awt.Point; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -30,9 +31,9 @@ public class PerfBoard extends AbstractBoard { protected Color padColor = PAD_COLOR; @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { - super.draw(g2d, componentState, project); - + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { + super.draw(g2d, componentState, project, drawingObserver); if (componentState != ComponentState.DRAGGING) { if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java index c90b85be..9861989e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/VeroBoard.java @@ -8,6 +8,7 @@ import java.awt.Point; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -32,8 +33,9 @@ public class VeroBoard extends AbstractBoard { protected Color padColor = PAD_COLOR; @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { - super.draw(g2d, componentState, project); + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { + super.draw(g2d, componentState, project, drawingObserver); if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java index 8321a049..66b8ad22 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java @@ -7,6 +7,7 @@ import java.awt.Point; import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -28,7 +29,8 @@ public class SolderPad extends AbstractComponent { private Point point = new Point(0, 0); @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { int diameter = getClosestOdd(size.convertToPixels()); int holeDiameter = getClosestOdd(HOLE_SIZE.convertToPixels()); g2d.setColor(componentState == ComponentState.SELECTED @@ -94,7 +96,7 @@ public class SolderPad extends AbstractComponent { public Void getValue() { return null; } - + @Override public void setValue(Void value) { } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java index 4fb3c35f..2307c4d2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java @@ -7,6 +7,7 @@ import java.awt.Graphics2D; import org.diylc.components.AbstractSinglePointComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -28,7 +29,8 @@ public class TraceCut extends AbstractSinglePointComponent { private Color borderColor = BORDER_COLOR; @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { int size = this.size.convertToPixels() / 2 * 2; int dotDiameter = (size / 3 * 2) / 2 * 2 + 1; g2d.setColor(fillColor); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index 00a60cf6..aff26f03 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -12,6 +12,7 @@ import java.awt.geom.RoundRectangle2D; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -153,7 +154,8 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { private Point point = new Point(0, 0); @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { List bom = BomMaker.getInstance().createBom(project.getComponents()); // Cleanup entries that do not have a value set. Iterator iterator = bom.iterator(); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java index fcbe87f9..4fe87e63 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java @@ -10,6 +10,7 @@ import java.awt.geom.Rectangle2D; import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.measures.Size; @@ -28,7 +29,8 @@ public class ProjectInformation extends AbstractComponent { private Point point = new Point(0, 0); @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { g2d.setFont(Constants.LABEL_FONT); g2d.setColor(componentState == ComponentState.DRAGGING || componentState == ComponentState.SELECTED ? SELECTION_COLOR : COLOR); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java index f0ddad31..edb53cf9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -16,6 +16,7 @@ import org.diylc.common.Orientation; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -44,13 +45,16 @@ public class DIL_IC extends AbstractTransparentComponent { private Size pinSpacing = new Size(0.1d, SizeUnit.in); private Size rowSpacing = new Size(0.3d, SizeUnit.in); private Point[] controlPoints = new Point[] { new Point(0, 0) }; -// new Point(0, pinSpacing.convertToPixels()), -// new Point(0, 2 * pinSpacing.convertToPixels()), -// new Point(0, 3 * pinSpacing.convertToPixels()), -// new Point(3 * pinSpacing.convertToPixels(), 0), -// new Point(3 * pinSpacing.convertToPixels(), pinSpacing.convertToPixels()), -// new Point(3 * pinSpacing.convertToPixels(), 2 * pinSpacing.convertToPixels()), -// new Point(3 * pinSpacing.convertToPixels(), 3 * pinSpacing.convertToPixels()) }; + // new Point(0, pinSpacing.convertToPixels()), + // new Point(0, 2 * pinSpacing.convertToPixels()), + // new Point(0, 3 * pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 0), + // new Point(3 * pinSpacing.convertToPixels(), + // pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 2 * + // pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 3 * + // pinSpacing.convertToPixels()) }; private Shape body; public DIL_IC() { @@ -212,7 +216,8 @@ public class DIL_IC extends AbstractTransparentComponent { } @Override - public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { int pinSize = PIN_SIZE.convertToPixels() / 2 * 2; for (Point point : controlPoints) { g2d.setColor(PIN_COLOR);