aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/Toolkit.java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2002-01-24 06:31:02 +0000
committerTom Tromey <tromey@gcc.gnu.org>2002-01-24 06:31:02 +0000
commit92bc8733c6da3c352889c1f03e0b628b5158fedf (patch)
treedcbd4f350943e311340c00ef1ec2ad6d15fd51b9 /libjava/java/awt/Toolkit.java
parente1d7127573026268f0a31ae68d62281771d26079 (diff)
downloadgcc-92bc8733c6da3c352889c1f03e0b628b5158fedf.zip
gcc-92bc8733c6da3c352889c1f03e0b628b5158fedf.tar.gz
gcc-92bc8733c6da3c352889c1f03e0b628b5158fedf.tar.bz2
Makefile.in: Rebuilt.
* Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * java/awt/Toolkit.java: Merged with Classpath. * java/awt/PrintGraphics.java: New file from Classpath. * java/awt/PrintJob.java: New file from Classpath. * java/awt/datatransfer/Clipboard.java: New file from Classpath. * java/awt/datatransfer/ClipboardOwner.java: New file from Classpath. * java/awt/datatransfer/DataFlavor.java: New file from Classpath. * java/awt/datatransfer/FlavorMap.java: New file from Classpath. * java/awt/datatransfer/MimeTypeParseException.java: New file from Classpath. * java/awt/datatransfer/StringSelection.java: New file from Classpath. * java/awt/datatransfer/SystemFlavorMap.java: New file from Classpath. * java/awt/datatransfer/Transferable.java: New file from Classpath. * java/awt/datatransfer/UnsupportedFlavorException.java: New file from Classpath. From-SVN: r49171
Diffstat (limited to 'libjava/java/awt/Toolkit.java')
-rw-r--r--libjava/java/awt/Toolkit.java1048
1 files changed, 805 insertions, 243 deletions
diff --git a/libjava/java/awt/Toolkit.java b/libjava/java/awt/Toolkit.java
index 85a38f2..4c59138 100644
--- a/libjava/java/awt/Toolkit.java
+++ b/libjava/java/awt/Toolkit.java
@@ -1,263 +1,825 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation
+/* Toolkit.java -- AWT Toolkit superclass
+ Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
- 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.peer.*;
+
import java.awt.event.*;
-import java.net.URL;
-import java.beans.*;
+import java.awt.peer.*;
import java.awt.image.*;
import java.awt.datatransfer.Clipboard;
-import java.util.Hashtable;
-import gnu.java.awt.GLightweightPeer;
-
-/* A very incomplete placeholder. */
+import java.util.Properties;
+import java.net.URL;
+import java.beans.*;
+/**
+ * The AWT system uses a set of native peer objects to implement its
+ * widgets. These peers are provided by a peer toolkit, that is accessed
+ * via a subclass of this superclass. The system toolkit is retrieved
+ * by the static methods <code>getDefaultToolkit</code>. This method
+ * determines the system toolkit by examining the system property
+ * <code>awt.toolkit</code>. That property is set to the name of the
+ * <code>Toolkit</code> subclass for the specified peer set. If the
+ * <code>awt.toolkit</code> property is not set, then the default
+ * toolkit <code>gnu.java.awt.peer.gtk.GtkToolkit</code> is used. This
+ * toolkit creates its peers using the GTK+ toolkit.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
public abstract class Toolkit
{
- static Toolkit defaultToolkit;
- PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
- Hashtable desktopProperties = new Hashtable();
-
- public static Toolkit getDefaultToolkit()
- {
- if (defaultToolkit != null)
- return defaultToolkit;
-
- Class toolkit_class;
- String tk_class_name = System.getProperty("awt.toolkit");
- if (tk_class_name == null)
- tk_class_name = "gnu.awt.gtk.GtkToolkit";
-
- try
+
+/*
+ * Static Variables
+ */
+
+// The default toolkit name.
+private static String default_toolkit_name =
+ "gnu.java.awt.peer.gtk.GtkToolkit";
+
+// The toolkit in use. Once we load it, we don't ever change it
+// if the awt.toolkit propert is set.
+private static Toolkit toolkit;
+
+// The toolkit properties
+private static Properties props = new Properties();
+
+private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
+
+private Properties desktopProperties = new Properties();
+
+/*************************************************************************/
+
+/*
+ * Static Methods
+ */
+
+/**
+ * Returns an instance of the default toolkit. The default toolkit is
+ * the subclass of <code>Toolkit</code> specified in the system property
+ * <code>awt.toolkit</code>, or <code>gnu.java.awt.peer.gtk.GtkToolkit</code>
+ * if the property is not set.
+ *
+ * @return An instance of the system default toolkit.
+ *
+ * @error AWTError If the toolkit cannot be loaded.
+ */
+public static Toolkit
+getDefaultToolkit()
+{
+ if (toolkit != null)
+ return(toolkit);
+
+ String toolkit_name = System.getProperty("awt.toolkit",
+ default_toolkit_name);
+
+ try
{
- toolkit_class = Class.forName(tk_class_name);
- defaultToolkit = (Toolkit) toolkit_class.newInstance();
+ Class cls = Class.forName(toolkit_name);
+ Object obj = cls.newInstance();
+
+ if (!(obj instanceof Toolkit))
+ throw new AWTError(toolkit_name + " is not a subclass of " +
+ "java.awt.Toolkit");
+
+ toolkit = (Toolkit)obj;
+ return(toolkit);
}
- catch (Exception x)
+ catch(Exception e)
{
- throw new AWTError("Toolkit class " + tk_class_name +
- " could not be initialized:\n " + x);
+ throw new AWTError("Cannot load AWT toolkit: " + e.getMessage());
}
+}
- return defaultToolkit;
- }
-
- protected abstract ButtonPeer createButton(Button target);
- protected abstract TextFieldPeer createTextField(TextField target);
- protected abstract LabelPeer createLabel(Label target);
- protected abstract ListPeer createList(List target);
- protected abstract CheckboxPeer createCheckbox(Checkbox target);
- protected abstract ScrollbarPeer createScrollbar(Scrollbar target);
- protected abstract ScrollPanePeer createScrollPane(ScrollPane target);
- protected abstract TextAreaPeer createTextArea(TextArea target);
- protected abstract ChoicePeer createChoice(Choice target);
- protected abstract FramePeer createFrame(Frame target);
- protected abstract CanvasPeer createCanvas(Canvas target);
- protected abstract PanelPeer createPanel(Panel target);
- protected abstract WindowPeer createWindow(Window target);
- protected abstract DialogPeer createDialog(Dialog target);
- protected abstract MenuBarPeer createMenuBar(MenuBar target);
- protected abstract MenuPeer createMenu(Menu target);
- protected abstract PopupMenuPeer createPopupMenu(PopupMenu target);
- protected abstract MenuItemPeer createMenuItem(MenuItem target);
- protected abstract FileDialogPeer createFileDialog(FileDialog target);
- protected abstract CheckboxMenuItemPeer
- createCheckboxMenuItem(CheckboxMenuItem target);
-
- protected LightweightPeer createComponent(Component target)
- {
- return GLightweightPeer.INSTANCE;
- }
-
- /* @deprecated Use GraphicsEnvironment.getAllFonts() */
- protected abstract java.awt.peer.FontPeer getFontPeer(String name, int style);
-
- /*
- public abstract DragSourceContextPeer
- createDragSourceContextPeer(DragGestureEvent dge)
- throws InvalidDnDOperationException;
+/*************************************************************************/
+
+/**
+ * Returns the value of the property with the specified name, or the
+ * default value if the property does not exist.
+ *
+ * @param key The name of the property to retrieve.
+ * @param defThe default value of the property.
*/
-
- protected void loadSystemColors(int[] systemColors)
- {
- // FIXME
- }
-
- public abstract Dimension getScreenSize();
- public abstract int getScreenResolution();
- public abstract ColorModel getColorModel();
- /* @deprecated Use GraphicsEnvironment.getAvailableFontFamilyNames() */
- public abstract String[] getFontList();
- public abstract FontMetrics getFontMetrics(Font font);
- public abstract void sync();
- public abstract Image getImage(String filename);
- public abstract Image getImage(URL url);
- public abstract Image createImage(String filename);
- public abstract Image createImage(URL url);
- public abstract boolean prepareImage(Image image, int width, int height,
- ImageObserver observer);
- public abstract int checkImage(Image image, int width, int height,
- ImageObserver observer);
- public abstract Image createImage(ImageProducer producer);
-
- public Image createImage(byte[] imagedata)
- {
- return createImage (imagedata, 0, imagedata.length);
- }
-
- public abstract Image createImage(byte[] imagedata, int imageoffset,
- int imagelength);
- /*
- public abstract PrintJob getPrintJob(Frame frame, String jobtitle,
- Properties props);
- public PrintJob getPrintJob(Frame frame, String jobtitle,
- JobAttributes jobAttributes,
- PageAttributes pageAttributes)
- {
-
- }
+public static String
+getProperty(String key, String def)
+{
+ return(props.getProperty(key, def));
+}
+
+/*************************************************************************/
+
+/**
+ * Returns the native container object of the specified component. This
+ * method is necessary because the parent component might be a lightweight
+ * component.
+ *
+ * @param component The component to fetch the native container for.
+ *
+ * @return The native container object for this component.
*/
-
- public abstract void beep();
- public abstract Clipboard getSystemClipboard();
-
- public int getMenuShortcutKeyMask()
- {
- return InputEvent.CTRL_MASK;
- }
-
- public boolean getLockingKeyState(int keyCode)
- {
- if (keyCode != KeyEvent.VK_CAPS_LOCK
- && keyCode != KeyEvent.VK_NUM_LOCK
- && keyCode != KeyEvent.VK_SCROLL_LOCK)
- throw new IllegalArgumentException();
-
- throw new UnsupportedOperationException();
- }
-
- public void setLockingKeyState(int keyCode, boolean on)
- {
- if (keyCode != KeyEvent.VK_CAPS_LOCK
- && keyCode != KeyEvent.VK_NUM_LOCK
- && keyCode != KeyEvent.VK_SCROLL_LOCK)
- throw new IllegalArgumentException();
-
- throw new UnsupportedOperationException();
- }
-
- protected static Container getNativeContainer(Component c)
- {
- while (c != null)
- {
- if (!c.isLightweight ())
- return (Container) c;
+protected static Container
+getNativeContainer(Component component)
+{
+ component = component.getParent();
- c = c.getParent();
+ for(;;)
+ {
+ if (component == null)
+ return(null);
+
+ if (!(component instanceof Container))
+ {
+ component = component.getParent();
+ continue;
+ }
+
+ if (component.getPeer() instanceof LightweightPeer)
+ {
+ component = component.getParent();
+ continue;
+ }
+
+ return((Container)component);
}
- return null;
- }
-
- public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
- throws IndexOutOfBoundsException
- {
- // Presumably the only reason this isn't abstract is for backwards
- // compatibility? FIXME?
- return null;
- }
-
- public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
- {
- return new Dimension (0,0);
- }
-
- public int getMaximumCursorColors()
- {
- return 0;
- }
-
- public static String getProperty(String key, String defaultValue)
- {
- // FIXME
- return defaultValue;
- }
-
- public final EventQueue getSystemEventQueue()
- {
- return getSystemEventQueueImpl();
- }
-
- protected abstract EventQueue getSystemEventQueueImpl();
-
- /*
- public DragGestureRecognizer
- createDragGestureRecognizer(Class abstractRecognizerClass, DragSource ds,
- Component c, int srcActions,
- DragGestureListener dgl)
- {
- // err... FIXME
- return null;
- }
- */
-
- public final Object getDesktopProperty(String propertyName)
- {
- return desktopProperties.get(propertyName);
- }
-
- protected final void setDesktopProperty(String name, Object newValue)
- {
- Object oldValue = getDesktopProperty(name);
- desktopProperties.put(name, newValue);
- changeSupport.firePropertyChange(name, oldValue, newValue);
- }
-
- protected Object lazilyLoadDesktopProperty(String name)
- {
- // FIXME - what is this??
- return null;
- }
-
- protected void initializeDesktopProperties()
- {
- // Overridden by toolkit implementation?
- }
-
- public void addPropertyChangeListener(String name,
- PropertyChangeListener pcl)
- {
- changeSupport.addPropertyChangeListener(name, pcl);
- }
-
- public void removePropertyChangeListener(String name,
- PropertyChangeListener pcl)
- {
- changeSupport.removePropertyChangeListener(name, pcl);
- }
-
- public void addAWTEventListener(AWTEventListener listener, long eventMask)
- {
- // SecurityManager s = System.getSecurityManager();
- // if (s != null)
- // s.checkPermission(AWTPermission("listenToAllAWTEvents"));
-
- // FIXME
- }
-
- public void removeAWTEventListener(AWTEventListener listener)
- {
- // FIXME
- }
-
- /*
- public abstract Map mapInputMethodHighlight(InputMethodHighlight highlight)
- {
- }
+}
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+ * Default constructor for subclasses.
+ */
+public
+Toolkit()
+{
+}
+
+/*************************************************************************/
+
+/*
+ * Instance Methods
+ */
+
+/**
+ * Creates a peer object for the specified <code>Button</code>.
+ *
+ * @param target The <code>Button</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Button</code> object.
+ */
+protected abstract ButtonPeer
+createButton(Button target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>TextField</code>.
+ *
+ * @param target The <code>TextField</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>TextField</code> object.
+ */
+protected abstract TextFieldPeer
+createTextField(TextField target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Label</code>.
+ *
+ * @param target The <code>Label</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Label</code> object.
+ */
+protected abstract LabelPeer
+createLabel(Label target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>List</code>.
+ *
+ * @param target The <code>List</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>List</code> object.
+ */
+protected abstract ListPeer
+createList(List target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Checkbox</code>.
+ *
+ * @param target The <code>Checkbox</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Checkbox</code> object.
+ */
+protected abstract CheckboxPeer
+createCheckbox(Checkbox target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Scrollbar</code>.
+ *
+ * @param target The <code>Scrollbar</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Scrollbar</code> object.
+ */
+protected abstract ScrollbarPeer
+createScrollbar(Scrollbar target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>ScrollPane</code>.
+ *
+ * @param target The <code>ScrollPane</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>ScrollPane</code> object.
+ */
+protected abstract ScrollPanePeer
+createScrollPane(ScrollPane target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>TextArea</code>.
+ *
+ * @param target The <code>TextArea</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>TextArea</code> object.
+ */
+protected abstract TextAreaPeer
+createTextArea(TextArea target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Choice</code>.
+ *
+ * @param target The <code>Choice</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Choice</code> object.
+ */
+protected abstract ChoicePeer
+createChoice(Choice target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Frame</code>.
+ *
+ * @param target The <code>Frame</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Frame</code> object.
+ */
+protected abstract FramePeer
+createFrame(Frame target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Canvas</code>.
+ *
+ * @param target The <code>Canvas</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Canvas</code> object.
+ */
+protected abstract CanvasPeer
+createCanvas(Canvas target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Panel</code>.
+ *
+ * @param target The <code>Panel</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Panel</code> object.
+ */
+protected abstract PanelPeer
+createPanel(Panel target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Window</code>.
+ *
+ * @param target The <code>Window</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Window</code> object.
+ */
+protected abstract WindowPeer
+createWindow(Window target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Dialog</code>.
+ *
+ * @param target The dialog to create the peer for
+ *
+ * @return The peer for the specified font name.
+ */
+protected abstract DialogPeer
+createDialog(Dialog target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>MenuBar</code>.
+ *
+ * @param target The <code>MenuBar</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>MenuBar</code> object.
+ */
+protected abstract MenuBarPeer
+createMenuBar(MenuBar target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Menu</code>.
+ *
+ * @param target The <code>Menu</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Menu</code> object.
+ */
+protected abstract MenuPeer
+createMenu(Menu target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>PopupMenu</code>.
+ *
+ * @param target The <code>PopupMenu</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>PopupMenu</code> object.
+ */
+protected abstract PopupMenuPeer
+createPopupMenu(PopupMenu target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>MenuItem</code>.
+ *
+ * @param target The <code>MenuItem</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>MenuItem</code> object.
+ */
+protected abstract MenuItemPeer
+createMenuItem(MenuItem target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>FileDialog</code>.
+ *
+ * @param target The <code>FileDialog</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>FileDialog</code> object.
+ */
+protected abstract FileDialogPeer
+createFileDialog(FileDialog target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>CheckboxMenuItem</code>.
+ *
+ * @param target The <code>CheckboxMenuItem</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>CheckboxMenuItem</code> object.
+ */
+protected abstract CheckboxMenuItemPeer
+createCheckboxMenuItem(CheckboxMenuItem target);
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified <code>Component</code>. The
+ * peer returned by this method is not a native windowing system peer
+ * with its own native window. Instead, this method allows the component
+ * to draw on its parent window as a "lightweight" widget.
+ *
+ * XXX: FIXME
+ *
+ * @param target The <code>Component</code> to create the peer for.
+ *
+ * @return The peer for the specified <code>Component</code> object.
*/
+protected LightweightPeer
+createComponent(Component target)
+{
+ return null;
+}
+
+/*************************************************************************/
+
+/**
+ * Creates a peer object for the specified font name.
+ *
+ * @param name The font to create the peer for.
+ * @param style The font style to create the peer for.
+ *
+ * @return The peer for the specified font name.
+ */
+protected abstract FontPeer
+getFontPeer(String name, int style);
+
+/*************************************************************************/
+
+/**
+ * Copies the current system colors into the specified array. This is
+ * the interface used by the <code>SystemColors</code> class.
+ *
+ * @param colors The array to copy the system colors into.
+ */
+protected void
+loadSystemColors(int systemColors[])
+{
}
+
+/*************************************************************************/
+
+/**
+ * Returns the dimensions of the screen in pixels.
+ *
+ * @return The dimensions of the screen in pixels.
+ */
+public abstract Dimension
+getScreenSize();
+
+/*************************************************************************/
+
+/**
+ * Returns the screen resolution in dots per square inch.
+ *
+ * @return The screen resolution in dots per square inch.
+ */
+public abstract int
+getScreenResolution();
+
+/*************************************************************************/
+
+/**
+ * Returns the color model of the screen.
+ *
+ * @return The color model of the screen.
+ */
+public abstract ColorModel
+getColorModel();
+
+/*************************************************************************/
+
+/**
+ * Returns the names of the available fonts.
+ *
+ * @return The names of the available fonts.
+ */
+public abstract String[]
+getFontList();
+
+/*************************************************************************/
+
+/**
+ * Return the font metrics for the specified font
+ *
+ * @param name The name of the font to return metrics for.
+ *
+ * @return The requested font metrics.
+ */
+public abstract FontMetrics
+getFontMetrics(Font name);
+
+/*************************************************************************/
+
+/**
+ * Flushes any buffered data to the screen so that it is in sync with
+ * what the AWT system has drawn to it.
+ */
+public abstract void
+sync();
+
+/*************************************************************************/
+
+/**
+ * Returns an image from the specified file, which must be in a
+ * recognized format. Supported formats vary from toolkit to toolkit.
+ *
+ * @return name The name of the file to read the image from.
+ */
+public abstract Image
+getImage(String name);
+
+/*************************************************************************/
+
+/**
+ * Returns an image from the specified URL, which must be in a
+ * recognized format. Supported formats vary from toolkit to toolkit.
+ *
+ * @return url The URl to read the image from.
+ */
+public abstract Image
+getImage(URL url);
+
+/*************************************************************************/
+
+/**
+ * Readies an image to be rendered on the screen. The width and height
+ * values can be set to the default sizes for the image by passing -1
+ * in those parameters.
+ *
+ * @param image The image to prepare for rendering.
+ * @param width The width of the image.
+ * @param height The height of the image.
+ * @param observer The observer to receive events about the preparation
+ * process.
+ *
+ * @return <code>true</code> if the image is already prepared for rendering,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+prepareImage(Image image, int width, int height, ImageObserver observer);
+
+/*************************************************************************/
+
+/**
+ * Checks the status of specified image as it is being readied for
+ * rendering.
+ *
+ * @param image The image to prepare for rendering.
+ * @param width The width of the image.
+ * @param height The height of the image.
+ * @param observer The observer to receive events about the preparation
+ * process.
+ *
+ * @return A union of the bitmasks from
+ * <code>java.awt.image.ImageObserver</code> that indicates the current
+ * state of the imaging readying process.
+ */
+public abstract int
+checkImage(Image image, int width, int height, ImageObserver observer);
+
+/*************************************************************************/
+
+/**
+ * Creates an image using the specified <code>ImageProducer</code>
+ *
+ * @param producer The <code>ImageProducer</code> to create the image from.
+ *
+ * @return The created image.
+ */
+public abstract Image
+createImage(ImageProducer producer);
+
+/*************************************************************************/
+
+/**
+ * Creates an image from the specified portion of the byte array passed.
+ * The array must be in a recognized format. Supported formats vary from
+ * toolkit to toolkit.
+ *
+ * @param data The raw image data.
+ * @param offset The offset into the data where the image data starts.
+ * @param len The length of the image data.
+ *
+ * @return The created image.
+ */
+public abstract Image
+createImage(byte[] data, int offset, int len);
+
+/*************************************************************************/
+
+/**
+ * Creates an image from the specified byte array. The array must be in
+ * a recognized format. Supported formats vary from toolkit to toolkit.
+ *
+ * @param data The raw image data.
+ *
+ * @return The created image.
+ */
+public Image
+createImage(byte[] data)
+{
+ return(createImage(data, 0, data.length));
+}
+
+public abstract Image
+createImage(String filename);
+
+public abstract Image
+createImage(URL url);
+
+
+/*************************************************************************/
+
+/**
+ * Returns a instance of <code>PrintJob</code> for the specified
+ * arguments.
+ *
+ * @param frame The window initiating the print job.
+ * @param title The print job title.
+ * @param props The print job properties.
+ *
+ * @return The requested print job, or <code>null</code> if the job
+ * was cancelled.
+ */
+public abstract PrintJob
+getPrintJob(Frame frame, String title, Properties props);
+
+/*************************************************************************/
+
+/**
+ * Returns the system clipboard.
+ *
+ * @return THe system clipboard.
+ */
+public abstract Clipboard
+getSystemClipboard();
+
+/*************************************************************************/
+
+/**
+ * Returns the accelerator key mask for menu shortcuts. The default is
+ * <code>Event.CTRL_MASK</code>. A toolkit must override this method
+ * to change the default.
+ *
+ * @return The key mask for the menu accelerator key.
+ */
+public int
+getMenuShortcutKeyMask()
+{
+ return Event.CTRL_MASK;
+}
+
+public boolean
+getLockingKeyState(int keyCode)
+{
+ if (keyCode != KeyEvent.VK_CAPS_LOCK
+ && keyCode != KeyEvent.VK_NUM_LOCK
+ && keyCode != KeyEvent.VK_SCROLL_LOCK)
+ throw new IllegalArgumentException();
+
+ throw new UnsupportedOperationException();
+}
+
+public void
+setLockingKeyState(int keyCode, boolean on)
+{
+ if (keyCode != KeyEvent.VK_CAPS_LOCK
+ && keyCode != KeyEvent.VK_NUM_LOCK
+ && keyCode != KeyEvent.VK_SCROLL_LOCK)
+ throw new IllegalArgumentException();
+
+ throw new UnsupportedOperationException();
+}
+
+/*************************************************************************/
+
+/**
+ * Returns the event queue for the applet. Despite the word "System"
+ * in the name of this method, there is no guarantee that the same queue
+ * is shared system wide.
+ *
+ * @return The event queue for this applet (or application)
+ */
+public final EventQueue
+getSystemEventQueue()
+{
+ return(getSystemEventQueueImpl());
+}
+
+/*************************************************************************/
+
+/**
+ * // FIXME: What does this do?
+ */
+protected abstract EventQueue
+getSystemEventQueueImpl();
+
+/*************************************************************************/
+
+/**
+ * Causes a "beep" tone to be generated.
+ */
+public abstract void
+beep();
+
+public Cursor
+createCustomCursor(Image cursor, Point hotSpot, String name)
+ throws IndexOutOfBoundsException
+{
+ // Presumably the only reason this isn't abstract is for backwards
+ // compatibility? FIXME?
+ return null;
+}
+
+public Dimension
+getBestCursorSize(int preferredWidth, int preferredHeight)
+{
+ return new Dimension (0,0);
+}
+
+public int
+getMaximumCursorColors()
+{
+ return 0;
+}
+
+public final Object
+getDesktopProperty(String propertyName)
+{
+ return desktopProperties.get(propertyName);
+}
+
+protected final void
+setDesktopProperty(String name, Object newValue)
+{
+ Object oldValue = getDesktopProperty(name);
+ desktopProperties.put(name, newValue);
+ changeSupport.firePropertyChange(name, oldValue, newValue);
+}
+protected Object
+lazilyLoadDesktopProperty(String name)
+{
+ // FIXME - what is this??
+ return null;
+}
+
+protected void
+initializeDesktopProperties()
+{
+ // Overridden by toolkit implementation?
+}
+
+public void
+addPropertyChangeListener(String name, PropertyChangeListener pcl)
+{
+ changeSupport.addPropertyChangeListener(name, pcl);
+}
+
+public void
+removePropertyChangeListener(String name, PropertyChangeListener pcl)
+{
+ changeSupport.removePropertyChangeListener(name, pcl);
+}
+
+public void
+addAWTEventListener(AWTEventListener listener, long eventMask)
+{
+ // SecurityManager s = System.getSecurityManager();
+ // if (s != null)
+ // s.checkPermission(AWTPermission("listenToAllAWTEvents"));
+
+ // FIXME
+}
+
+public void
+removeAWTEventListener(AWTEventListener listener)
+{
+ // FIXME
+}
+
+} // class Toolkit