< prev index next >
src/java.desktop/share/classes/sun/java2d/pipe/Region.java
Print this page
*** 26,35 ****
--- 26,36 ----
package sun.java2d.pipe;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
+ import java.awt.geom.Rectangle2D;
import java.awt.geom.RectangularShape;
import sun.java2d.loops.TransformHelper;
/**
*** 116,125 ****
--- 117,154 ----
}
return newv;
}
/**
+ * Returns the closest {@code int} to the argument, with ties rounding to
+ * negative infinity.
+ * <p>
+ * Special cases:
+ * <ul><li>If the argument is NaN, the result is 0.
+ * <li>If the argument is negative infinity or any value less than or
+ * equal to the value of {@code Integer.MIN_VALUE}, the result is
+ * equal to the value of {@code Integer.MIN_VALUE}.
+ * <li>If the argument is positive infinity or any value greater than or
+ * equal to the value of {@code Integer.MAX_VALUE}, the result is
+ * equal to the value of {@code Integer.MAX_VALUE}.</ul>
+ *
+ * @param coordinate a floating-point value to be rounded to an integer
+ * @return the value of the argument rounded to the nearest
+ * {@code int} value.
+ */
+ public static int clipRound(final double coordinate) {
+ final double newv = coordinate - 0.5;
+ if (newv < Integer.MIN_VALUE) {
+ return Integer.MIN_VALUE;
+ }
+ if (newv > Integer.MAX_VALUE) {
+ return Integer.MAX_VALUE;
+ }
+ return (int) Math.ceil(newv);
+ }
+
+ /**
* Multiply the scale factor {@code sv} and the value {@code v} with
* appropriate clipping to the bounds of Integer resolution. If the answer
* would be greater than {@code Integer.MAX_VALUE} then {@code
* Integer.MAX_VALUE} is returned. If the answer would be less than {@code
* Integer.MIN_VALUE} then {@code Integer.MIN_VALUE} is returned. Otherwise
*** 557,566 ****
--- 586,616 ----
return getIntersectionXYXY(x, y, dimAdd(x, w), dimAdd(y, h));
}
/**
* Returns a Region object that represents the intersection of
+ * this object with the specified Rectangle2D. The return value
+ * may be this same object if no clipping occurs.
+ */
+ public Region getIntersection(Rectangle2D r) {
+ return getIntersectionXYXY(r.getMinX(), r.getMinY(), r.getMaxX(),
+ r.getMaxY());
+ }
+
+ /**
+ * Returns a Region object that represents the intersection of
+ * this object with the specified rectangular area. The return
+ * value may be this same object if no clipping occurs.
+ */
+ public Region getIntersectionXYXY(double lox, double loy, double hix,
+ double hiy) {
+ return getIntersectionXYXY(clipRound(lox), clipRound(loy),
+ clipRound(hix), clipRound(hiy));
+ }
+
+ /**
+ * Returns a Region object that represents the intersection of
* this object with the specified rectangular area. The return
* value may be this same object if no clipping occurs.
*/
public Region getIntersectionXYXY(int lox, int loy, int hix, int hiy) {
if (isInsideXYXY(lox, loy, hix, hiy)) {
< prev index next >