diff options
Diffstat (limited to 'libjava/java/awt/Rectangle.java')
-rw-r--r-- | libjava/java/awt/Rectangle.java | 314 |
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 + "]"; + } + + } |