Source for java.awt.Dimension

   1: /* Dimension.java -- represents a 2-dimensional span
   2:    Copyright (C) 1999, 2000, 2002 Free Software Foundation
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: 
  39: package java.awt;
  40: 
  41: import java.awt.geom.Dimension2D;
  42: import java.io.Serializable;
  43: 
  44: /**
  45:  * This class holds a width and height value pair. This is used in plenty
  46:  * of windowing classes, but also has geometric meaning.
  47:  *
  48:  * <p>It is valid for a dimension to have negative width or height; but it
  49:  * is considered to have no area. Therefore, the behavior in various methods
  50:  * is undefined in such a case.
  51:  *
  52:  * <p>There are some public fields; if you mess with them in an inconsistent
  53:  * manner, it is your own fault when you get invalid results. Also, this
  54:  * class is not threadsafe.
  55:  *
  56:  * @author Per Bothner (bothner@cygnus.com)
  57:  * @author Aaron M. Renn (arenn@urbanophile.com)
  58:  * @author Eric Blake (ebb9@email.byu.edu)
  59:  * @see Component
  60:  * @see LayoutManager
  61:  * @since 1.0
  62:  * @status updated to 1.14
  63:  */
  64: public class Dimension extends Dimension2D implements Serializable
  65: {
  66:   /**
  67:    * Compatible with JDK 1.0+.
  68:    */
  69:   private static final long serialVersionUID = 4723952579491349524L;
  70: 
  71:   /**
  72:    * The width of this object.
  73:    *
  74:    * @see #getSize()
  75:    * @see #setSize(double, double)
  76:    * @serial the width
  77:    */
  78:   public int width;
  79: 
  80:   /**
  81:    * The height of this object.
  82:    *
  83:    * @see #getSize()
  84:    * @see #setSize(double, double)
  85:    * @serial the height
  86:    */
  87:   public int height;
  88: 
  89:   /**
  90:    * Create a new Dimension with a width and height of zero.
  91:    */
  92:   public Dimension()
  93:   {
  94:   }
  95: 
  96:   /**
  97:    * Create a new Dimension with width and height identical to that of the
  98:    * specified dimension.
  99:    *
 100:    * @param d the Dimension to copy
 101:    * @throws NullPointerException if d is null
 102:    */
 103:   public Dimension(Dimension d)
 104:   {
 105:     width = d.width;
 106:     height = d.height;
 107:   }
 108: 
 109:   /**
 110:    * Create a new Dimension with the specified width and height.
 111:    *
 112:    * @param w the width of this object
 113:    * @param h the height of this object
 114:    */
 115:   public Dimension(int w, int h)
 116:   {
 117:     width = w;
 118:     height = h;
 119:   }
 120: 
 121:   /**
 122:    * Gets the width of this dimension.
 123:    *
 124:    * @return the width, as a double
 125:    */
 126:   public double getWidth()
 127:   {
 128:     return width;
 129:   }
 130: 
 131:   /**
 132:    * Gets the height of this dimension.
 133:    *
 134:    * @return the height, as a double
 135:    */
 136:   public double getHeight()
 137:   {
 138:     return height;
 139:   }
 140: 
 141:   /**
 142:    * Sets the size of this dimension. The values are rounded to int.
 143:    *
 144:    * @param w the new width
 145:    * @param h the new height
 146:    * @since 1.2
 147:    */
 148:   public void setSize(double w, double h)
 149:   {
 150:     width = (int) w;
 151:     height = (int) h;
 152:   }
 153: 
 154:   /**
 155:    * Returns the size of this dimension. A pretty useless method, as this is
 156:    * already a dimension.
 157:    *
 158:    * @return a copy of this dimension
 159:    * @see #setSize(Dimension)
 160:    * @since 1.1
 161:    */
 162:   public Dimension getSize()
 163:   {
 164:     return new Dimension(width, height);
 165:   }
 166: 
 167:   /**
 168:    * Sets the width and height of this object to match that of the
 169:    * specified object.
 170:    *
 171:    * @param d the Dimension to get the new width and height from
 172:    * @throws NullPointerException if d is null
 173:    * @see #getSize()
 174:    * @since 1.1
 175:    */
 176:   public void setSize(Dimension d)
 177:   {
 178:     width = d.width;
 179:     height = d.height;
 180:   }
 181: 
 182:   /**
 183:    * Sets the width and height of this object to the specified values.
 184:    *
 185:    * @param w the new width value
 186:    * @param h the new height value
 187:    */
 188:   public void setSize(int w, int h)
 189:   {
 190:     width = w;
 191:     height = h;
 192:   }
 193: 
 194:   /**
 195:    * Tests this object for equality against the specified object.  This will
 196:    * be true if and only if the specified object is an instance of
 197:    * Dimension2D, and has the same width and height.
 198:    *
 199:    * @param obj the object to test against
 200:    * @return true if the object is equal to this
 201:    */
 202:   public boolean equals(Object obj)
 203:   {
 204:     if (! (obj instanceof Dimension))
 205:       return false;
 206:     Dimension dim = (Dimension) obj;
 207:     return height == dim.height && width == dim.width;
 208:   }
 209: 
 210:   /**
 211:    * Return the hashcode for this object. It is not documented, but appears
 212:    * to be <code>((width + height) * (width + height + 1) / 2) + width</code>.
 213:    *
 214:    * @return the hashcode
 215:    */
 216:   public int hashCode()
 217:   {
 218:     // Reverse engineering this was fun!
 219:     return (width + height) * (width + height + 1) / 2 + width;
 220:   }
 221: 
 222:   /**
 223:    * Returns a string representation of this object. The format is:
 224:    * <code>getClass().getName() + "[width=" + width + ",height=" + height
 225:    * + ']'</code>.
 226:    *
 227:    * @return a string representation of this object
 228:    */
 229:   public String toString()
 230:   {
 231:     return getClass().getName()
 232:       + "[width=" + width + ",height=" + height + ']';
 233:   }
 234: } // class Dimension