gcc/libjava/java/awt/Rectangle.java

342 lines
7.0 KiB
Java
Raw Normal View History

/* Copyright (C) 1999, 2000, 2001 Free Software Foundation
This file is part of libjava.
This software is copyrighted work licensed under the terms of the
Libjava License. Please consult the file "LIBJAVA_LICENSE" for
details. */
package java.awt;
import java.awt.geom.*;
import java.io.Serializable;
2000-07-12 11:32:07 +08:00
/* Status: Mostly complete. Some of the Java2D stuff is commented out. */
public class Rectangle extends Rectangle2D
implements Cloneable, Shape, Serializable
{
public int x;
public int y;
public int width;
public int height;
2000-07-12 11:32:07 +08:00
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;
}
2000-07-12 11:32:07 +08:00
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;
}
2000-07-12 11:32:07 +08:00
public Rectangle(Dimension d)
{
2000-07-12 11:32:07 +08:00
x = 0;
y = 0;
width = d.width;
height = d.height;
}
public Rectangle getBounds ()
{
2000-07-12 11:32:07 +08:00
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);
}
2000-07-12 11:32:07 +08:00
/** @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()
{
ComponentDataBlitOp.java: New file. * gnu/gcj/awt/ComponentDataBlitOp.java: New file. * gnu/gcj/awt/GLightweightPeer.java: New file. * java/awt/BorderLayout.java: Implemented all methods. * java/awt/Button.java (actionListener, actionCommand): Renamed and modifier change. (addNotify): Call super. (dispatchEventImpl): New method. (getListeners): New method. (label): Made package-private, not private. * java/awt/Canvas.java: Implemented class body. * java/awt/Color.java (brighter): New method. (darker): New method. (hashCode): New method. * java/awt/Component.java (visible, enabled, eventMask): Set defaults. (getGraphicsConfiguration): Delegate to getGraphicsConfigurationImpl(). (getGraphicsConfigurationImpl): New method. (getToolkit): Only return value from peer if not null. (isDisplayable): Check with parent. (isShowing): No parent implies not showing. (getForeground): Check parent property if local is null. (getBackground): Likewise. (getFont): Likewise. (setForeground): Inform peer. (setBackground): Likewise (setLocale): Invalidate component. (getColorModel): Implemented. (setLocation): Invalidate, or ignore if no change. (setSize): Invalidate, or ignore if no change. (setBounds): Invalidate, or ignore if no change. (isOpaque): By default, heavyweight implies opaque. (isLightweight): Implemented. (getMaximumSize): Implemented. (doLayout): Implemented, NOP. (validate): Implemented, NOP. (invalidate): Only propagate to parent if parent was valid. (getGraphics): Implemented. (getFontMetrics): Implemented. (update): Implemented. (paintAll): Implemented. (repaint): Implemented all repaint methods. (print): Implemented. (printAll): Implemented. (createImage): Implemented. (dispatchEvent): Give the peer a chance to handle the event. (dispatchEventImpl): Dispatch paint events. (enableEvents): Lightweights enable events on parent component. (coalesceEvents): Coalesce paint events, and select event type using a switch. (coalescePaintEvents): New method. (processEvent): Fix unfortunate ordering of statements, and call correct method for MOUSE_CLICKED. (processPaintEvent): New method. (addNotify): Allow container to notify children before event mask is set in peer. (addNotifyContainerChildren): New method. (removeNotify): Visibility should not change on removeNotify. (paramString): Implemented. (list): Implemented two of the list methods. * Container (myInsets): Removed, insets are managed by peer. (getInsets): Query peer. (addImpl): Fix reparenting, enable events for lightweights, initialize component array. (validate): Call doLayout in validateTree() instead. (validateTree): Do nothing if already valid. Call beginValidate(), endValidate() on peer. Call validateTree() instead of validate() for children that are containers. Mark valid after validation of children. (setFont): Partial implementation. (paint): Implemented. (visitChildren): New method. (visitChild): New method. (update): Implemented. (print): Implemented. (paintComponents): Implemented. (printComponents): Consider translation and clipping. (getComponentAt): Ignore invisible children. Return this if no child match. (addNotify): Call super. (addNotifyContainerChildren): New method. (paramString): Implemented. (list): Implemented. * java/awt/EventQueue (invokeAndWait): Get system event queue the right way. (invokeLater): Likewise. (isDispatchThread): Likewise. * java/awt/FontMetrics (getLeading): Formula change. (getDescent): Consider leading also. (getMaxAscent): Default to getAscent(). (getMaxDescent): Default to getDescent. (getMaxAdvance): Return value signifying unknown. (charWidth): Both methods implemented. (charsWidth): Implemented. (bytesWidth): Implemented. (getWidths): Implemented. * java/awt/Frame.java (NORMAL, ICONIFIED, iconImage, isResizable, state): New fields. (Frame): Rearragend constuctor chaining to disallow null being passed as a graphics configuration. (getTitle): Return empty string if null. (dispose): Removed. (getIconImage): New method. (setIconImage): New method. (finalize): New method. (setMenuBar): Notify peer. (isResizable): New method. (setResizable): New method. (getState): New method. (getFont): Removed. (remove): Implemented. (removeNotify): New method. (getFrames): New method. * java/awt/Graphics.java: Implemented body of class. * java/awt/Graphics2D.java: New file. * java/awt/GraphicsConfiguration.java: Enabled part of the API. * java/awt/Image.java: Implemented body of class. * java/awt/Panel.java (Panel): Call correct super constructor. (addNotify): Implemented. * java/awt/Rectangle.java (isEmpty): Fixed reversed logic. * java/awt/RenderingHints.java: New file. * java/awt/Toolkit.java (createComponent): Implemented. (getSystemEventQueue): Delegate to getSystemEventQueueImpl(). * java/awt/Window.java (Window): Two new constructors. Reordered constructor chaining. (getGraphicsConfigurationImpl): New method. (finalize): Call super. (addNotify): Call super. (pack): Do layout stuff. (show): Ensure that peer exists and that component is valid. (dispose): Dispose owned children. (getOwner): Simplify code, casting null pointers is valid. (getGraphicsConfiguration): Ask peer if local value is null. * java/awt/event/ActionEvent.java (getActionCommand): Renamed from getcmd(). * java/awt/image/BufferedImage.java: New file. * java/awt/image/RasterOp.java: New file. * java/awt/peer/ComponentPeer.java (getGraphicsConfiguration): More powerfull replacement for getColorModel(). (getColorModel) Removed. (setEventMask) New method. * Makefile.am: Added new files. * Makefile.in: Rebuilt. From-SVN: r35748
2000-08-17 02:03:48 +08:00
return !(width > 0 && height > 0);
2000-07-12 11:32:07 +08:00
}
/** @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)
{
// FIXME: maybe we should consider returning a Rectangle or
// Rectangle2D.Float depending on type of R.
Rectangle2D.Double res = new Rectangle2D.Double ();
intersect (this, r, res);
return res;
2000-07-12 11:32:07 +08:00
}
public Rectangle2D createUnion(Rectangle2D r)
{
// FIXME: maybe we should consider returning a Rectangle or
// Rectangle2D.Float depending on type of R.
Rectangle2D.Double res = new Rectangle2D.Double ();
union (this, r, res);
return res;
2000-07-12 11:32:07 +08:00
}
public Rectangle2D getBounds2D()
{
return new Rectangle (x, y, width, height);
2000-07-12 11:32:07 +08:00
}
public String toString()
{
return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width +
",height=" + height + "]";
}
}