Improve clipping logic

This commit is contained in:
Bane Stojkovic
2026-10-13 20:57:40 +02:00
parent 4d02f54e8a
commit ef82ffc4a4
5 changed files with 29 additions and 57 deletions
@@ -607,7 +607,7 @@
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
<description>Improved rendering performance and reduced lagging with complex projects while dragging components around</description>
<description>Significantly improved rendering performance and reduced lagging with complex projects while dragging components around</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>IMPROVEMENT</changeType>
@@ -40,23 +40,16 @@ public abstract class AbstractMultiPartComponent<T> extends AbstractLabeledCompo
public Rectangle2D getCachingBounds() {
Shape[] body = getBody();
int margin = 20;
double minX = 0;
double minY = 0;
double maxX = 0;
double maxY = 0;
Rectangle2D bounds = null;
for (Shape a : body) {
if (a != null) {
Rectangle2D bounds2d = a.getBounds2D();
if (bounds2d.getMinX() < minX)
minX = bounds2d.getMinX();
if (bounds2d.getMinY() < minY)
minY = bounds2d.getMinY();
if (bounds2d.getMaxX() > maxX)
maxX = bounds2d.getMaxX();
if (bounds2d.getMaxY() > maxY)
maxY = bounds2d.getMaxY();
bounds = bounds == null ? a.getBounds2D() : bounds.createUnion(a.getBounds2D());
}
}
return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin);
if (bounds == null) {
bounds = new Rectangle2D.Double(getControlPoint(0).getX(), getControlPoint(0).getY(), 0, 0);
}
return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin,
bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin);
}
}
@@ -274,24 +274,17 @@ public abstract class AbstractGuitarPickup extends AbstractLabeledComponent<Stri
public Rectangle2D getCachingBounds() {
Shape[] body = getBody();
int margin = 20;
double minX = 0;
double minY = 0;
double maxX = 0;
double maxY = 0;
Rectangle2D bounds = null;
for (Shape a : body) {
if (a != null) {
Rectangle2D bounds2d = a.getBounds2D();
if (bounds2d.getMinX() < minX)
minX = bounds2d.getMinX();
if (bounds2d.getMinY() < minY)
minY = bounds2d.getMinY();
if (bounds2d.getMaxX() > maxX)
maxX = bounds2d.getMaxX();
if (bounds2d.getMaxY() > maxY)
maxY = bounds2d.getMaxY();
bounds = bounds == null ? a.getBounds2D() : bounds.createUnion(a.getBounds2D());
}
}
return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin);
if (bounds == null) {
bounds = new Rectangle2D.Double(getControlPoint(0).getX(), getControlPoint(0).getY(), 0, 0);
}
return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin,
bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin);
}
public boolean isStacked() {
@@ -776,24 +776,17 @@ public class PotentiometerPanel extends AbstractPotentiometer implements ILayere
public Rectangle2D getCachingBounds() {
Shape[] body = getBody();
int margin = 20;
double minX = 0;
double minY = 0;
double maxX = 0;
double maxY = 0;
Rectangle2D bounds = null;
for (Shape a : body) {
if (a != null) {
Rectangle2D bounds2d = a.getBounds2D();
if (bounds2d.getMinX() < minX)
minX = bounds2d.getMinX();
if (bounds2d.getMinY() < minY)
minY = bounds2d.getMinY();
if (bounds2d.getMaxX() > maxX)
maxX = bounds2d.getMaxX();
if (bounds2d.getMaxY() > maxY)
maxY = bounds2d.getMaxY();
bounds = bounds == null ? a.getBounds2D() : bounds.createUnion(a.getBounds2D());
}
}
return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin);
if (bounds == null) {
bounds = new Rectangle2D.Double(getControlPoint(0).getX(), getControlPoint(0).getY(), 0, 0);
}
return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin,
bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin);
}
@Override
@@ -367,23 +367,16 @@ public class TransistorTO3 extends AbstractLabeledComponent<String> {
public Rectangle2D getCachingBounds() {
Shape[] body = getBody();
int margin = 20;
double minX = 0;
double minY = 0;
double maxX = 0;
double maxY = 0;
Rectangle2D bounds = null;
for (Shape a : body) {
if (a != null) {
Rectangle2D bounds2d = a.getBounds2D();
if (bounds2d.getMinX() < minX)
minX = bounds2d.getMinX();
if (bounds2d.getMinY() < minY)
minY = bounds2d.getMinY();
if (bounds2d.getMaxX() > maxX)
maxX = bounds2d.getMaxX();
if (bounds2d.getMaxY() > maxY)
maxY = bounds2d.getMaxY();
bounds = bounds == null ? a.getBounds2D() : bounds.createUnion(a.getBounds2D());
}
}
return new Rectangle2D.Double(minX - margin, minY - margin, maxX - minX + 2 * margin, maxY - minY + 2 * margin);
if (bounds == null) {
bounds = new Rectangle2D.Double(getControlPoint(0).getX(), getControlPoint(0).getY(), 0, 0);
}
return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin,
bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin);
}
}