diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml
index d093c9f6..6f212762 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/update.xml
+++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml
@@ -2940,7 +2940,7 @@
NEW_FEATURE
- Added "Sub-Mini" tube
+ Added "Sub-Mini Tube" component
NEW_FEATURE
@@ -2981,6 +2981,10 @@
BUG_FIX
All terminals of a "Terminal Strip" were connected together by mistake
+
+
+ BUG_FIX
+ Transistor would disappear when "Folded" is selected
https://github.com/bancika/diy-layout-creator/releases
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java
index 86dc453c..39518b31 100644
--- a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java
@@ -27,6 +27,7 @@ import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
+import java.awt.geom.Rectangle2D.Double;
import org.diylc.awt.StringUtils;
import org.diylc.common.HorizontalAlignment;
@@ -218,9 +219,34 @@ public abstract class AbstractTransistorPackage extends AbstractTransparentCompo
@Override
public Rectangle2D getCachingBounds() {
- int margin = 20;
- Rectangle2D bounds = getBody()[0].getBounds2D();
- return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin, bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin);
+ int margin = 50;
+ double minX = Integer.MAX_VALUE;
+ double minY = Integer.MAX_VALUE;
+ double maxX = Integer.MIN_VALUE;
+ double maxY = Integer.MIN_VALUE;
+ for(Area a : getBody())
+ if (a != null) {
+ Rectangle2D b = a.getBounds2D();
+ if (b.getMinX() < minX)
+ minX = b.getMinX();
+ if (b.getMaxX() > minX)
+ maxX = b.getMaxX();
+ if (b.getMinY() < minY)
+ minY = b.getMinY();
+ if (b.getMaxY() > minY)
+ maxY = b.getMaxY();
+ }
+ for (Point p : controlPoints) {
+ if (p.getX() < minX)
+ minX = p.getX();
+ if (p.getX() > minX)
+ maxX = p.getX();
+ if (p.getY() < minY)
+ minY = p.getY() ;
+ if (p.getY() > minY)
+ maxY = p.getY() ;
+ }
+ return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin);
}
protected boolean flipPinoutLabel() {