diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml index b87aedc2..1a4eaa5d 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml @@ -9,11 +9,11 @@ lastPath - C:\Documents and Settings\Branislav Stojkovic\Desktop\oldFiles + C:\Documents and Settings\Branislav Stojkovic\Desktop antiAliasing - false + true hiQualityRender 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 dafb05bb..91bcf9a4 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractComponent.java index 626fcece..31cba9b6 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractComponent.java @@ -2,6 +2,7 @@ package org.diylc.components; import java.awt.Color; import java.awt.Font; +import java.awt.Shape; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.EditableProperty; @@ -19,7 +20,7 @@ public abstract class AbstractComponent implements IDIYComponent { private static final long serialVersionUID = 1L; protected String name = ""; - + public static Color SELECTION_COLOR = Color.red; public static Color LABEL_COLOR = Color.black; public static Color LABEL_COLOR_SELECTED = Color.red; @@ -35,7 +36,7 @@ public abstract class AbstractComponent implements IDIYComponent { public void setName(String name) { this.name = name; } - + @Override public boolean canControlPointOverlap(int index) { return false; @@ -56,4 +57,17 @@ public abstract class AbstractComponent implements IDIYComponent { protected int getClosestOdd(double x) { return ((int) x / 2) * 2 + 1; } + + /** + * @param clip + * @return true if none of the control points lie in the clip rectangle. + */ + protected boolean checkPointsClipped(Shape clip) { + for (int i = 0; i < getControlPointCount(); i++) { + if (clip.contains(getControlPoint(i))) { + return false; + } + } + return true; + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java index 81c235b3..76347721 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java @@ -63,6 +63,9 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } if (componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING) { // Do not track guidelines. drawingObserver.stopTracking(); 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 ecba4f66..b4908428 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 @@ -65,6 +65,9 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp Shape shape = getBodyShape(); // If there's no body, just draw the line connecting the ending points. if (shape == null) { + if (checkPointsClipped(g2d.getClip())) { + return; + } g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(getLeadThickness())); g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker() : getLeadColor(componentState)); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java index f00148fe..3389f77b 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/DrawingManager.java @@ -147,7 +147,7 @@ public class DrawingManager { g2dWrapper.setColor(Constants.CANVAS_COLOR); g2dWrapper.fillRect(0, 0, d.width, d.height); - g2d.setClip(new Rectangle(new Point(0, 0), d)); + g2d.clip(new Rectangle(new Point(0, 0), d)); GridType gridType = (GridType) ConfigurationManager.getInstance().readObject( ANTIALIASING_KEY, GridType.LINES); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPanel.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPanel.java index cee29526..a5d210a7 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPanel.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPanel.java @@ -107,10 +107,6 @@ class CanvasPanel extends JComponent implements Autoscroll { } else { bufferImage = createImage(getWidth(), getHeight()); } - Graphics2D g2d = (Graphics2D) bufferImage.getGraphics(); - plugInPort.draw(g2d, ConfigurationManager.getInstance().readBoolean( - IPlugInPort.ANTI_ALIASING_KEY, true) ? DRAW_OPTIONS_ANTI_ALIASING : DRAW_OPTIONS, - null); } @Override @@ -120,12 +116,12 @@ class CanvasPanel extends JComponent implements Autoscroll { } if (bufferImage == null) { createBufferImage(); - } else { - Graphics2D g2d = (Graphics2D) bufferImage.getGraphics(); - plugInPort.draw(g2d, ConfigurationManager.getInstance().readBoolean( - IPlugInPort.ANTI_ALIASING_KEY, true) ? DRAW_OPTIONS_ANTI_ALIASING - : DRAW_OPTIONS, null); } + Graphics2D g2d = (Graphics2D) bufferImage.getGraphics(); + g2d.setClip(getVisibleRect()); + plugInPort.draw(g2d, ConfigurationManager.getInstance().readBoolean( + IPlugInPort.ANTI_ALIASING_KEY, true) ? DRAW_OPTIONS_ANTI_ALIASING : DRAW_OPTIONS, + null); if (USE_HARDWARE_ACCELLERATION) { VolatileImage volatileImage = (VolatileImage) bufferImage; do { diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar index 82e176b1..7fb591b1 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar and b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar differ 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 19b1c796..697df7d6 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 @@ -37,6 +37,9 @@ public abstract class AbstractBoard extends AbstractTransparentComponent @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java index 0c928642..9a65608e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java @@ -34,6 +34,9 @@ public class Eyelet extends AbstractComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int diameter = getClosestOdd((int) size.convertToPixels()); int holeDiameter = getClosestOdd((int) holeSize.convertToPixels()); g2d.setColor(color); 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 5bfeaa18..7941818a 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 @@ -33,6 +33,9 @@ public class SolderPad extends AbstractComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int diameter = getClosestOdd((int) size.convertToPixels()); int holeDiameter = getClosestOdd((int) HOLE_SIZE.convertToPixels()); g2d.setColor(componentState == ComponentState.SELECTED 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 59504c22..106821f3 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 @@ -35,6 +35,9 @@ public class TraceCut extends AbstractComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int size = getClosestOdd((int) this.size.convertToPixels()); int dotDiameter = size - 6; 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 c1ebe8b9..9a288300 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 @@ -167,6 +167,9 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + double s = 1d * scale / DEFAULT_SCALE; + Point endPoint = new Point((int) (image.getIconWidth() * s), + (int) (image.getIconHeight() * s)); + if (!g2d.getClip().contains(point) && !g2d.getClip().contains(endPoint)) { + return; + } Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - double s = 1d * scale / DEFAULT_SCALE; + g2d.scale(s, s); g2d.drawImage(image.getImage(), (int) (point.x / s), (int) (point.y / s), null); if (componentState == ComponentState.SELECTED) { g2d.setComposite(oldComposite); g2d.scale(1 / s, 1 / s); g2d.setColor(SELECTION_COLOR); - g2d.drawRect(point.x, point.y, (int) (image.getIconWidth() * s), (int) (image - .getIconHeight() * s)); + g2d.drawRect(point.x, point.y, endPoint.x, endPoint.y); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ResistorValue.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ResistorValue.java index a5cb31a1..4fbe5c80 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ResistorValue.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ResistorValue.java @@ -23,6 +23,6 @@ public class ResistorValue { @Override public String toString() { - return resistance.toString() + " " + power.toString(); + return resistance.toString() + power.toString(); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/TrimmerPotentiometer.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/TrimmerPotentiometer.java index ba0c7a6b..9c9faa0a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/TrimmerPotentiometer.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/TrimmerPotentiometer.java @@ -243,6 +243,9 @@ public class TrimmerPotentiometer extends AbstractPotentiometer { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); Shape mainShape = getBody()[0]; Shape shaftShape = getBody()[1]; 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 92cd763d..d8573c7a 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 @@ -249,6 +249,9 @@ public class DIL_IC extends AbstractTransparentComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; Area mainArea = getBody()[0]; for (Point point : controlPoints) { diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java index 5436836f..ab26c288 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java @@ -174,6 +174,9 @@ public class TransistorTO220 extends AbstractTransparentComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; Shape mainArea = getBody()[0]; Shape tabArea = getBody()[1]; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java index 7c36ddfb..c4d1765e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java @@ -166,6 +166,9 @@ public class TransistorTO92 extends AbstractTransparentComponent { @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; Area mainArea = getBody(); Composite oldComposite = g2d.getComposite();