 Rectangle.setBounds(Bounds2D bounds) doesn't handle empty bounds correctly

XMLWordPrintable

Details

• Type: Bug
• Status: Resolved
• Priority: P2
• Resolution: Not an Issue
• Affects Version/s: fx1.3
• Fix Version/s:
• Component/s:
• Labels:
None
• Subcomponent:

Description

The functions intersectWith(...) in com.sun.javafx.geom.Bounds2D don't work for cases where the to Bounds rectangles do not intersect. Compare the code:

public void intersectWith(float x1, float y1, float x2, float y2) {
this.x1 = Math.max(this.x1, x1);
this.y1 = Math.max(this.y1, y1);
this.x2 = Math.min(this.x2, x2);
this.y2 = Math.min(this.y2, y2);
}

With what AWT does and you can see there are cases missed:

public Rectangle intersection(Rectangle r) {
int tx1 = this.x;
int ty1 = this.y;
int rx1 = r.x;
int ry1 = r.y;
long tx2 = tx1; tx2 += this.width;
long ty2 = ty1; ty2 += this.height;
long rx2 = rx1; rx2 += r.width;
long ry2 = ry1; ry2 += r.height;
if (tx1 < rx1) tx1 = rx1;
if (ty1 < ry1) ty1 = ry1;
if (tx2 > rx2) tx2 = rx2;
if (ty2 > ry2) ty2 = ry2;
tx2 -= tx1;
ty2 -= ty1;
// tx2,ty2 will never overflow (they will never be
// larger than the smallest of the two source w,h)
// they might underflow, though...
if (tx2 < Integer.MIN_VALUE) tx2 = Integer.MIN_VALUE;
if (ty2 < Integer.MIN_VALUE) ty2 = Integer.MIN_VALUE;
return new Rectangle(tx1, ty1, (int) tx2, (int) ty2);
}

People

Assignee: Chien Yang (Inactive)
Reporter: Jasper Potts (Inactive)
0 Vote for this issue
Watchers:
0 Start watching this issue

Dates

Created:
Updated:
Resolved:
Imported:

Time Tracking

Estimated: 2d
Remaining: 2d
Logged: Not Specified