diff options
Diffstat (limited to 'libjava/java/awt/MediaTracker.java')
-rw-r--r-- | libjava/java/awt/MediaTracker.java | 663 |
1 files changed, 0 insertions, 663 deletions
diff --git a/libjava/java/awt/MediaTracker.java b/libjava/java/awt/MediaTracker.java deleted file mode 100644 index 45ed7b48b42..00000000000 --- a/libjava/java/awt/MediaTracker.java +++ /dev/null @@ -1,663 +0,0 @@ -/* MediaTracker.java -- Class used for keeping track of images - Copyright (C) 1999, 2002, 2004, 2005 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., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 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. */ - - -package java.awt; - -import java.awt.image.ImageObserver; -import java.util.ArrayList; - -/** - * This class is used for keeping track of the status of various media - * objects. - * - * Media objects are tracked by assigning them an ID. It is possible - * to assign the same ID to mutliple objects, effectivly grouping them - * together. In this case the status flags ({@link #statusID}) and error flag - * (@link #isErrorID} and {@link #getErrorId}) are ORed together. This - * means that you cannot say exactly which media object has which status, - * at most you can say that there <em>are</em> certain media objects with - * some certain status. - * - * At the moment only images are supported by this class. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Bryce McKinlay - */ -public class MediaTracker implements java.io.Serializable -{ - /** Indicates that the media is still loading. */ - public static final int LOADING = 1 << 0; - - /** Indicates that the loading operation has been aborted. */ - public static final int ABORTED = 1 << 1; - - /** Indicates that an error has occured during loading of the media. */ - public static final int ERRORED = 1 << 2; - - /** Indicates that the media has been successfully and completely loaded. */ - public static final int COMPLETE = 1 << 3; - - /** The component on which the media is eventually been drawn. */ - Component target; - - /** The head of the linked list of tracked media objects. */ - MediaEntry head; - - /** Our serialVersionUID for serialization. */ - static final long serialVersionUID = -483174189758638095L; - - /** - * This represents a media object that is tracked by a MediaTracker. - * It also implements a simple linked list. - */ - // FIXME: The serialized form documentation says MediaEntry is a - // serializable field, but the serialized form of MediaEntry itself - // doesn't appear to be documented. - class MediaEntry implements ImageObserver - { - /** The ID of the media object. */ - int id; - - /** The media object. (only images are supported ATM). */ - Image image; - - /** The link to the next entry in the list. */ - MediaEntry next; - - /** The tracking status. */ - int status; - - /** The width of the image. */ - int width; - - /** The height of the image. */ - int height; - - /** - * Receives notification from an {@link java.awt.image.ImageProducer} - * that more data of the image is available. - * - * @param img the image that is updated - * @param flags flags from the ImageProducer that indicate the status - * of the loading process - * @param x the X coordinate of the upper left corner of the image - * @param y the Y coordinate of the upper left corner of the image - * @param width the width of the image - * @param height the height of the image - * - * @return <code>true</code> if more data is needed, <code>false</code> - * otherwise - * - * @see {@link java.awt.image.ImageObserver} - */ - public boolean imageUpdate(Image img, int flags, int x, int y, - int width, int height) - { - if ((flags & ABORT) != 0) - status = ABORTED; - else if ((flags & ERROR) != 0) - status = ERRORED; - else if ((flags & ALLBITS) != 0) - status = COMPLETE; - else - status = 0; - - synchronized (MediaTracker.this) - { - MediaTracker.this.notifyAll(); - } - - // If status is not COMPLETE then we need more updates. - return ((status & (COMPLETE | ERRORED | ABORTED)) == 0); - } - } - - /** - * Constructs a new MediaTracker for the component <code>c</code>. The - * component should be the component that uses the media (i.e. draws it). - * - * @param c the Component that wants to use the media - */ - public MediaTracker(Component c) - { - target = c; - } - - /** - * Adds an image to the tracker with the specified <code>ID</code>. - * - * @param image the image to be added - * @param id the ID of the tracker list to which the image is added - */ - public void addImage(Image image, int id) - { - MediaEntry e = new MediaEntry(); - e.id = id; - e.image = image; - synchronized(this) - { - e.next = head; - head = e; - } - } - - /** - * Adds an image to the tracker with the specified <code>ID</code>. - * The image is expected to be rendered with the specified width and - * height. - * - * @param image the image to be added - * @param id the ID of the tracker list to which the image is added - * @param width the width of the image - * @param height the height of the image - */ - public void addImage(Image image, int id, int width, int height) - { - MediaEntry e = new MediaEntry(); - e.id = id; - e.image = image; - e.width = width; - e.height = height; - synchronized(this) - { - e.next = head; - head = e; - } - } - - /** - * Checks if all media objects have finished loading, i.e. are - * {@link #COMPLETE}, {@link #ABORTED} or {@link #ERRORED}. - * - * If the media objects are not already loading, a call to this - * method does <em>not</em> start loading. This is equivalent to - * a call to <code>checkAll(false)</code>. - * - * @return if all media objects have finished loading either by beeing - * complete, have been aborted or errored. - */ - public boolean checkAll() - { - return checkAll(false); - } - - /** - * Checks if all media objects have finished loading, i.e. are - * {@link #COMPLETE}, {@link #ABORTED} or {@link #ERRORED}. - * - * If the media objects are not already loading, and <code>load</code> - * is <code>true</code> then a call to this - * method starts loading the media objects. - * - * @param load if <code>true</code> this method starts loading objects - * that are not already loading - * - * @return if all media objects have finished loading either by beeing - * complete, have been aborted or errored. - */ - public boolean checkAll(boolean load) - { - MediaEntry e = head; - boolean result = true; - - while (e != null) - { - if ((e.status & (COMPLETE | ERRORED | ABORTED)) == 0) - { - if (load && ((e.status & LOADING) == 0)) - { - e.status = LOADING; - result = false; - boolean complete = target.prepareImage(e.image, e); - if (complete) - { - e.status = COMPLETE; - result = true; - } - } - else - result = false; - } - e = e.next; - } - return result; - } - - /** - * Checks if any of the registered media objects has encountered an error - * during loading. - * - * @return <code>true</code> if at least one media object has encountered - * an error during loading, <code>false</code> otherwise - * - */ - public boolean isErrorAny() - { - MediaEntry e = head; - while (e != null) - { - if ((e.status & ERRORED) != 0) - return true; - e = e.next; - } - return false; - } - - /** - * Returns all media objects that have encountered errors during loading. - * - * @return an array of all media objects that have encountered errors - * or <code>null</code> if there were no errors at all - */ - public Object[] getErrorsAny() - { - MediaEntry e = head; - ArrayList result = null; - while (e != null) - { - if ((e.status & ERRORED) != 0) - { - if (result == null) - result = new ArrayList(); - result.add(e.image); - } - e = e.next; - } - if (result == null) - return null; - else - return result.toArray(); - } - - /** - * Waits for all media objects to finish loading, either by completing - * successfully or by aborting or encountering an error. - * - * @throws InterruptedException if another thread interrupted the - * current thread while waiting - */ - public void waitForAll() throws InterruptedException - { - synchronized (this) - { - while (checkAll(true) == false) - wait(); - } - } - - /** - * Waits for all media objects to finish loading, either by completing - * successfully or by aborting or encountering an error. - * - * This method waits at most <code>ms</code> milliseconds. If the - * media objects have not completed loading within this timeframe, this - * method returns <code>false</code>, otherwise <code>true</code>. - * - * @param ms timeframe in milliseconds to wait for the media objects to - * finish - * - * @return <code>true</code> if all media objects have successfully loaded - * within the timeframe, <code>false</code> otherwise - * - * @throws InterruptedException if another thread interrupted the - * current thread while waiting - */ - public boolean waitForAll(long ms) throws InterruptedException - { - long start = System.currentTimeMillis(); - boolean result = checkAll(true); - synchronized (this) - { - while (result == false) - { - wait(ms); - result = checkAll(true); - if ((System.currentTimeMillis() - start) > ms) - break; - } - } - - return result; - } - - /** - * Returns the status flags of all registered media objects ORed together. - * If <code>load</code> is <code>true</code> then media objects that - * are not already loading will be started to load. - * - * @param load if set to <code>true</code> then media objects that are - * not already loading are started - * - * @return the status flags of all tracked media objects ORed together - */ - public int statusAll(boolean load) - { - int result = 0; - MediaEntry e = head; - while (e != null) - { - if (load && e.status == 0) - { - boolean complete = target.prepareImage(e.image, e); - if (complete) - e.status = COMPLETE; - else - e.status = LOADING; - } - result |= e.status; - e = e.next; - } - return result; - } - - /** - * Checks if the media objects with <code>ID</code> have completed loading. - * - * @param id the ID of the media objects to check - * - * @return <code>true</code> if all media objects with <code>ID</code> - * have successfully finished - */ - public boolean checkID(int id) - { - return checkID(id, false); - } - - /** - * Checks if the media objects with <code>ID</code> have completed loading. - * If <code>load</code> is <code>true</code> then media objects that - * are not already loading will be started to load. - * - * @param id the ID of the media objects to check - * @param load if set to <code>true</code> then media objects that are - * not already loading are started - * - * @return <code>true</code> if all media objects with <code>ID</code> - * have successfully finished - */ - public boolean checkID(int id, boolean load) - { - MediaEntry e = head; - boolean result = true; - - while (e != null) - { - if (e.id == id && ((e.status & (COMPLETE | ABORTED | ERRORED)) == 0)) - { - if (load && ((e.status & LOADING) == 0)) - { - e.status = LOADING; - result = false; - boolean complete = target.prepareImage(e.image, e); - if (complete) - { - e.status = COMPLETE; - result = true; - } - } - else - result = false; - } - e = e.next; - } - return result; - } - - /** - * Returns <code>true</code> if any of the media objects with <code>ID</code> - * have encountered errors during loading, false otherwise. - * - * @param id the ID of the media objects to check - * - * @return <code>true</code> if any of the media objects with <code>ID</code> - * have encountered errors during loading, false otherwise - */ - public boolean isErrorID(int id) - { - MediaEntry e = head; - while (e != null) - { - if (e.id == id && ((e.status & ERRORED) != 0)) - return true; - e = e.next; - } - return false; - } - - /** - * Returns all media objects with the specified ID that have encountered - * an error. - * - * @param id the ID of the media objects to check - * - * @return an array of all media objects with the specified ID that - * have encountered an error - */ - public Object[] getErrorsID(int id) - { - MediaEntry e = head; - ArrayList result = null; - while (e != null) - { - if (e.id == id && ((e.status & ERRORED) != 0)) - { - if (result == null) - result = new ArrayList(); - result.add(e.image); - } - e = e.next; - } - if (result == null) - return null; - else - return result.toArray(); - } - - /** - * Waits for all media objects with the specified ID to finish loading, - * either by completing successfully or by aborting or encountering an error. - * - * @param id the ID of the media objects to wait for - * - * @throws InterruptedException if another thread interrupted the - * current thread while waiting - */ - public void waitForID(int id) throws InterruptedException - { - MediaEntry e = head; - synchronized (this) - { - while (checkID (id, true) == false) - wait(); - } - } - - /** - * Waits for all media objects with the specified ID to finish loading, - * either by completing successfully or by aborting or encountering an error. - * - * This method waits at most <code>ms</code> milliseconds. If the - * media objects have not completed loading within this timeframe, this - * method returns <code>false</code>, otherwise <code>true</code>. - * - * @param id the ID of the media objects to wait for - * @param ms timeframe in milliseconds to wait for the media objects to - * finish - * - * @return <code>true</code> if all media objects have successfully loaded - * within the timeframe, <code>false</code> otherwise - * - * @throws InterruptedException if another thread interrupted the - * current thread while waiting - */ - public boolean waitForID(int id, long ms) throws InterruptedException - { - MediaEntry e = head; - long start = System.currentTimeMillis(); - boolean result = checkID(id, true); - - synchronized (this) - { - while (result == false) - { - wait(ms); - result = checkID(id, true); - if ((System.currentTimeMillis() - start) > ms) - break; - } - } - - return result; - } - - /** - * Returns the status flags of the media objects with the specified ID - * ORed together. - * - * If <code>load</code> is <code>true</code> then media objects that - * are not already loading will be started to load. - * - * @param load if set to <code>true</code> then media objects that are - * not already loading are started - * - * @return the status flags of all tracked media objects ORed together - */ - public int statusID(int id, boolean load) - { - int result = 0; - MediaEntry e = head; - while (e != null) - { - if (e.id == id) - { - if (load && e.status == 0) - { - boolean complete = target.prepareImage(e.image, e); - if (complete) - e.status = COMPLETE; - else - e.status = LOADING; - } - result |= e.status; - } - e = e.next; - } - return result; - } - - /** - * Removes an image from this MediaTracker. - * - * @param image the image to be removed - */ - public void removeImage(Image image) - { - synchronized (this) - { - MediaEntry e = head; - MediaEntry prev = null; - while (e != null) - { - if (e.image == image) - { - if (prev == null) - head = e.next; - else - prev.next = e.next; - } - prev = e; - e = e.next; - } - } - } - - /** - * Removes an image with the specified ID from this MediaTracker. - * - * @param image the image to be removed - */ - public void removeImage(Image image, int id) - { - synchronized (this) - { - MediaEntry e = head; - MediaEntry prev = null; - while (e != null) - { - if (e.id == id && e.image == image) - { - if (prev == null) - head = e.next; - else - prev.next = e.next; - } - else - prev = e; - e = e.next; - } - } - } - - /** - * Removes an image with the specified ID and scale from this MediaTracker. - * - * @param image the image to be removed - */ - public void removeImage(Image image, int id, int width, int height) - { - synchronized (this) - { - MediaEntry e = head; - MediaEntry prev = null; - while (e != null) - { - if (e.id == id && e.image == image - && e.width == width && e.height == height) - { - if (prev == null) - head = e.next; - else - prev.next = e.next; - } - else - prev = e; - e = e.next; - } - } - } -} |