Source for java.awt.Cursor

   1: /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
   2: 
   3: This file is part of GNU Classpath.
   4: 
   5: GNU Classpath is free software; you can redistribute it and/or modify
   6: it under the terms of the GNU General Public License as published by
   7: the Free Software Foundation; either version 2, or (at your option)
   8: any later version.
   9: 
  10: GNU Classpath is distributed in the hope that it will be useful, but
  11: WITHOUT ANY WARRANTY; without even the implied warranty of
  12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13: General Public License for more details.
  14: 
  15: You should have received a copy of the GNU General Public License
  16: along with GNU Classpath; see the file COPYING.  If not, write to the
  17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18: 02110-1301 USA.
  19: 
  20: Linking this library statically or dynamically with other modules is
  21: making a combined work based on this library.  Thus, the terms and
  22: conditions of the GNU General Public License cover the whole
  23: combination.
  24: 
  25: As a special exception, the copyright holders of this library give you
  26: permission to link this library with independent modules to produce an
  27: executable, regardless of the license terms of these independent
  28: modules, and to copy and distribute the resulting executable under
  29: terms of your choice, provided that you also meet, for each linked
  30: independent module, the terms and conditions of the license of that
  31: module.  An independent module is a module which is not derived from
  32: or based on this library.  If you modify this library, you may extend
  33: this exception to your version of the library, but you are not
  34: obligated to do so.  If you do not wish to do so, delete this
  35: exception statement from your version. */
  36: 
  37: 
  38: package java.awt;
  39: 
  40: /**
  41:   * This class represents various predefined cursor types.
  42:   *
  43:   * @author Aaron M. Renn (arenn@urbanophile.com)
  44:   */
  45: public class Cursor implements java.io.Serializable
  46: {
  47:   static final long serialVersionUID = 8028237497568985504L;
  48: 
  49:   /**
  50:   * Constant for the system default cursor type
  51:   */
  52:   public static final int DEFAULT_CURSOR = 0;
  53: 
  54:   /**
  55:   * Constant for a cross-hair cursor.
  56:   */
  57:   public static final int CROSSHAIR_CURSOR = 1;
  58: 
  59:   /**
  60:   * Constant for a cursor over a text field.
  61:   */
  62:   public static final int TEXT_CURSOR = 2;
  63: 
  64:   /**
  65:   * Constant for a cursor to display while waiting for an action to complete.
  66:   */
  67:   public static final int WAIT_CURSOR = 3;
  68: 
  69:   /**
  70:   * Cursor used over SW corner of window decorations.
  71:   */
  72:   public static final int SW_RESIZE_CURSOR = 4;
  73: 
  74:   /**
  75:   * Cursor used over SE corner of window decorations.
  76:   */
  77:   public static final int SE_RESIZE_CURSOR = 5;
  78: 
  79:   /**
  80:   * Cursor used over NW corner of window decorations.
  81:   */
  82:   public static final int NW_RESIZE_CURSOR = 6;
  83: 
  84:   /**
  85:   * Cursor used over NE corner of window decorations.
  86:   */
  87:   public static final int NE_RESIZE_CURSOR = 7;
  88: 
  89:   /**
  90:   * Cursor used over N edge of window decorations.
  91:   */
  92:   public static final int N_RESIZE_CURSOR = 8;
  93: 
  94:   /**
  95:   * Cursor used over S edge of window decorations.
  96:   */
  97:   public static final int S_RESIZE_CURSOR = 9;
  98: 
  99:   /**
 100:   * Cursor used over W edge of window decorations.
 101:   */
 102:   public static final int W_RESIZE_CURSOR = 10;
 103: 
 104:   /**
 105:   * Cursor used over E edge of window decorations.
 106:   */
 107:   public static final int E_RESIZE_CURSOR = 11;
 108: 
 109:   /**
 110:   * Constant for a hand cursor.
 111:   */
 112:   public static final int HAND_CURSOR = 12;
 113: 
 114:   /**
 115:   * Constant for a cursor used during window move operations.
 116:   */
 117:   public static final int MOVE_CURSOR = 13;
 118: 
 119:   public static final int CUSTOM_CURSOR    = 0xFFFFFFFF;
 120: 
 121:   private static final int PREDEFINED_COUNT = 14;
 122: 
 123:   protected static Cursor[] predefined = new Cursor[PREDEFINED_COUNT];
 124:   protected String name;
 125: 
 126:   /**
 127:    * @serial The numeric id of this cursor.
 128:    */
 129:   int type;
 130: 
 131:   /**
 132:    * Initializes a new instance of <code>Cursor</code> with the specified
 133:    * type.
 134:    *
 135:    * @param type The cursor type.
 136:    *
 137:    * @exception IllegalArgumentException If the specified cursor type is invalid
 138:    */
 139:   public Cursor(int type)
 140:   {
 141:     if (type < 0 || type >= PREDEFINED_COUNT)
 142:       throw new IllegalArgumentException ("invalid cursor " + type);
 143: 
 144:     this.type = type;
 145:     // FIXME: lookup and set name?
 146:   }
 147: 
 148:   /** This constructor is used internally only. 
 149:    * Application code should call Toolkit.createCustomCursor().
 150:    */
 151:   protected Cursor(String name)
 152:   {
 153:     this.name = name;
 154:     this.type = CUSTOM_CURSOR;
 155:   }
 156: 
 157:   /**
 158:    * Returns an instance of <code>Cursor</code> for one of the specified
 159:    * predetermined types.
 160:    *
 161:    * @param type The type contant from this class.
 162:    *
 163:    * @return The requested predefined cursor.
 164:    *
 165:    * @exception IllegalArgumentException If the constant is not one of the
 166:    * predefined cursor type constants from this class.
 167:    */
 168:   public static Cursor getPredefinedCursor(int type)
 169:   {
 170:     if (type < 0 || type >= PREDEFINED_COUNT)
 171:       throw new IllegalArgumentException ("invalid cursor " + type);
 172:     if (predefined[type] == null)
 173:       predefined[type] = new Cursor(type);
 174:     return predefined[type];
 175:   }
 176: 
 177:   /**
 178:    * Retrieves the system specific custom Cursor named Cursor names are,
 179:    * for example: "Invalid.16x16".
 180:    *
 181:    * @exception AWTException
 182:    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
 183:    * returns true.
 184:    */
 185:   public static Cursor getSystemCustomCursor(String name)
 186:                                       throws AWTException
 187:   {
 188:     if (GraphicsEnvironment.isHeadless())
 189:       throw new HeadlessException ();
 190: 
 191:     // FIXME
 192:     return null;
 193:   }
 194: 
 195:   /**
 196:    * Returns an instance of the system default cursor type.
 197:    *
 198:    * @return The system default cursor.
 199:    */
 200:   public static Cursor getDefaultCursor()
 201:   {
 202:     return getPredefinedCursor(DEFAULT_CURSOR);
 203:   }
 204: 
 205:   /**
 206:    * Returns the numeric type identifier for this cursor.
 207:    *
 208:    * @return The cursor id.
 209:    */
 210:   public int getType()
 211:   {
 212:     return type;
 213:   }
 214: 
 215:   public String getName()
 216:   {
 217:     return name;
 218:   }
 219: 
 220:   public String toString()
 221:   {
 222:     return (this.getClass() + "[" + getName() + "]");
 223:   }
 224: }