summaryrefslogtreecommitdiff
path: root/libjava/java/awt/Rectangle.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/Rectangle.java')
-rw-r--r--libjava/java/awt/Rectangle.java314
1 files changed, 305 insertions, 9 deletions
diff --git a/libjava/java/awt/Rectangle.java b/libjava/java/awt/Rectangle.java
index d6c9c5e48ab..c741a337aa5 100644
--- a/libjava/java/awt/Rectangle.java
+++ b/libjava/java/awt/Rectangle.java
@@ -8,28 +8,324 @@ details. */
package java.awt;
-/* Status: Quite imcomplete. */
+/* Status: Mostly complete. Some of the Java2D stuff is commented out. */
-public class Rectangle implements Shape
+// FIXME: Should extend Rectangle2D for 1.2 implementation
+public class Rectangle implements Cloneable, Shape
{
public int x;
public int y;
public int width;
public int height;
- public Rectangle () { }
+ public Rectangle()
+ {
+ x = 0;
+ y = 0;
+ width = 0;
+ height = 0;
+ }
+
+ public Rectangle(Rectangle r)
+ {
+ x = r.x;
+ y = r.y;
+ width = r.width;
+ height = r.height;
+ }
+
+ public Rectangle(int x, int y, int width, int height)
+ {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
- public Rectangle (int width, int height)
- { this.width = width; this.height = height; }
+ public Rectangle(int width, int height)
+ {
+ x = 0;
+ y = 0;
+ this.width = width;
+ this.height = height;
+ }
+
+ public Rectangle(Point p, Dimension d)
+ {
+ x = p.x;
+ y = p.y;
+ width = d.width;
+ height = d.height;
+ }
+
+ public Rectangle(Point p)
+ {
+ x = p.x;
+ y = p.y;
+ width = 0;
+ height = 0;
+ }
- public Rectangle (int x, int y, int width, int height)
+ public Rectangle(Dimension d)
{
- this.x = x; this.y = y;
- this.width = width; this.height = height;
+ x = 0;
+ y = 0;
+ width = d.width;
+ height = d.height;
}
public Rectangle getBounds ()
{
- return new Rectangle (x, y, width, height);
+ return (Rectangle) this.clone();
+ }
+
+ public void add(int newx, int newy)
+ {
+ int x = this.x > newx ? newx : this.x;
+ int y = this.y > newy ? newy : this.y;
+ width = (this.x + width > newx ? this.x + width : newx) - x;
+ height = (this.y + height > newy ? this.y + height : newy) - y;
+ this.x = x;
+ this.y = y;
+ }
+
+ public void add(Point pt)
+ {
+ add (pt.x, pt.y);
+ }
+
+ public void add(Rectangle r)
+ {
+ int x = this.x > r.x ? r.x : this.x;
+ int y = this.y > r.y ? r.y : this.y;
+ width = (this.x + width > r.x + r.width ?
+ this.x + width : r.x + r.width) - x;
+ height = (this.y + height > r.y + r.height ?
+ this.y + height : r.y + r.height) - y;
+ this.x = x;
+ this.y = y;
+ }
+
+ public boolean contains(int x, int y)
+ {
+ return (x >= this.x && x <= this.x + this.width
+ && y >= this.y && y <= this.y + this.height);
+ }
+
+ public boolean contains(int x, int y, int w, int h)
+ {
+ return (x >= this.x && x + w <= this.x + this.width
+ && y >= this.y && y + h <= this.y + this.height);
+ }
+
+ public boolean contains(Point p)
+ {
+ return contains(p.x, p.y);
+ }
+
+ public boolean contains(Rectangle r)
+ {
+ return contains(r.x, r.y, r.width, r.height);
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof Rectangle)
+ {
+ Rectangle r = (Rectangle) obj;
+ return (r.x == x
+ && r.y == y
+ && r.width == width
+ && r.height == height);
+ }
+ return false;
+ }
+
+ public double getHeight()
+ {
+ return (double) this.height;
+ }
+
+ public Point getLocation()
+ {
+ return new Point(x,y);
+ }
+
+ public Dimension getSize()
+ {
+ return new Dimension(width, height);
+ }
+
+ public double getWidth()
+ {
+ return (double) this.width;
+ }
+
+ public double getX()
+ {
+ return (double) x;
+ }
+
+ public double getY()
+ {
+ return (double) y;
+ }
+
+ public void grow(int h, int v)
+ {
+ width += h;
+ height += v;
+ }
+
+ /** @deprecated Use contains() instead. */
+ public boolean inside(int x, int y)
+ {
+ return contains(x, y);
}
+
+ /** @specnote If there is no intersection, an empty rectangle at 0,0
+ * is returned.
+ */
+ public Rectangle intersection(Rectangle r)
+ {
+ int newx = x < r.x ? r.x : x;
+ int newy = y < r.y ? r.y : y;
+ int neww = (x + width < r.x + r.width ?
+ x + width : r.x + r.width) - newx;
+ int newh = (y + height < r.y + r.height ?
+ y + height : r.y + r.height) - newy;
+ if (neww >= 0 && newh >= 0)
+ return new Rectangle(newx, newy, neww, newh);
+ else
+ return new Rectangle(0, 0, 0, 0);
+ }
+
+ /** @specnote If the intersection is at an edge or corner only (an empty
+ * intersection with a non-zero location), false is returned.
+ */
+ public boolean intersects(Rectangle r)
+ {
+ int neww = (x + width < r.x + r.width ?
+ x + width : r.x + r.width) - (x < r.x ? r.x : x);
+ int newh = (y + height < r.y + r.height ?
+ y + height : r.y + r.height) - (y < r.y ? r.y : y);
+ return (neww > 0 && newh > 0);
+ }
+
+ public boolean isEmpty()
+ {
+ return (width > 0 && height > 0);
+ }
+
+ /** @deprecated Use setLocation() instead. */
+ public void move(int x, int y)
+ {
+ setLocation(x, y);
+ }
+
+ public int outcode(double x, double y)
+ {
+ // FIXME
+ return 0;
+ }
+
+ /** @deprecated Use setBounds() instead. */
+ public void reshape(int x, int y, int width, int height)
+ {
+ setBounds(x, y, width, height);
+ }
+
+ /** @deprecated Use setSize() instead. */
+ public void resize(int width, int height)
+ {
+ setSize(width, height);
+ }
+
+ public void setBounds(int x, int y, int width, int height)
+ {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+
+ public void setBounds(Rectangle r)
+ {
+ this.x = r.x;
+ this.y = r.y;
+ this.width = r.width;
+ this.height = r.height;
+ }
+
+ public void setLocation(int x, int y)
+ {
+ this.x = x;
+ this.y = y;
+ }
+
+ public void setLocation(Point p)
+ {
+ this.x = p.x;
+ this.y = p.y;
+ }
+
+ public void setRect(double x, double y, double width, double height)
+ {
+ this.x = (int) x;
+ this.y = (int) y;
+ this.width = (int) width;
+ this.height = (int) height;
+ }
+
+ public void setSize(Dimension d)
+ {
+ this.width = d.width;
+ this.height = d.height;
+ }
+
+ public void setSize(int width, int height)
+ {
+ this.width = width;
+ this.height = height;
+ }
+
+ public void translate(int x, int y)
+ {
+ x += x;
+ y += y;
+ }
+
+ public Rectangle union(Rectangle r)
+ {
+ int newx = x > r.x ? r.x : x;
+ int newy = y > r.y ? r.y : y;
+ int neww = (this.x + width > r.x + r.width ?
+ this.x + width : r.x + r.width) - newx;
+ int newh = (this.y + height > r.y + r.height ?
+ this.y + height : r.y + r.height) - newy;
+ return new Rectangle(newx, newy, neww, newh);
+ }
+
+ // Commented out until we have Rectangle2D
+ /*
+ public Rectangle2D createIntersection(Rectangle2D r)
+ {
+ }
+
+ public Rectangle2D createUnion(Rectangle2D r)
+ {
+ }
+
+ public Rectangle2D getBounds2D()
+ {
+ }
+ */
+
+ public String toString()
+ {
+ return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width +
+ ",height=" + height + "]";
+ }
+
+
}