summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/Makefile.am1
-rw-r--r--libjava/Makefile.in12
-rw-r--r--libjava/java/awt/MediaTracker.java345
4 files changed, 357 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 392d370d115..72605436112 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2002-03-06 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
+
+ * java/awt/MediaTracker.java: Implemented.
+ * Makefile.am: Add MediaTracker.
+ * Makefile.in: Rebuilt.
+
2002-03-05 Tom Tromey <tromey@redhat.com>
* java/lang/natPosixProcess.cc (fail): Removed.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index bceb907421a..332f64f3844 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -654,6 +654,7 @@ java/awt/Label.java \
java/awt/LayoutManager.java \
java/awt/LayoutManager2.java \
java/awt/List.java \
+java/awt/MediaTracker.java \
java/awt/Menu.java \
java/awt/MenuBar.java \
java/awt/MenuComponent.java \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index a87668f9afc..ea1b798d40e 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -387,6 +387,7 @@ java/awt/Label.java \
java/awt/LayoutManager.java \
java/awt/LayoutManager2.java \
java/awt/List.java \
+java/awt/MediaTracker.java \
java/awt/Menu.java \
java/awt/MenuBar.java \
java/awt/MenuComponent.java \
@@ -2021,11 +2022,12 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/awt/Insets.P .deps/java/awt/ItemSelectable.P \
.deps/java/awt/Label.P .deps/java/awt/LayoutManager.P \
.deps/java/awt/LayoutManager2.P .deps/java/awt/List.P \
-.deps/java/awt/Menu.P .deps/java/awt/MenuBar.P \
-.deps/java/awt/MenuComponent.P .deps/java/awt/MenuContainer.P \
-.deps/java/awt/MenuItem.P .deps/java/awt/MenuShortcut.P \
-.deps/java/awt/Paint.P .deps/java/awt/PaintContext.P \
-.deps/java/awt/Panel.P .deps/java/awt/Point.P .deps/java/awt/Polygon.P \
+.deps/java/awt/MediaTracker.P .deps/java/awt/Menu.P \
+.deps/java/awt/MenuBar.P .deps/java/awt/MenuComponent.P \
+.deps/java/awt/MenuContainer.P .deps/java/awt/MenuItem.P \
+.deps/java/awt/MenuShortcut.P .deps/java/awt/Paint.P \
+.deps/java/awt/PaintContext.P .deps/java/awt/Panel.P \
+.deps/java/awt/Point.P .deps/java/awt/Polygon.P \
.deps/java/awt/PopupMenu.P .deps/java/awt/PrintGraphics.P \
.deps/java/awt/PrintJob.P .deps/java/awt/Rectangle.P \
.deps/java/awt/RenderingHints.P .deps/java/awt/ScrollPane.P \
diff --git a/libjava/java/awt/MediaTracker.java b/libjava/java/awt/MediaTracker.java
index 04ecad5169e..a94d6507114 100644
--- a/libjava/java/awt/MediaTracker.java
+++ b/libjava/java/awt/MediaTracker.java
@@ -1,5 +1,5 @@
/* MediaTracker.java -- Class used for keeping track of images
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,14 +38,355 @@ exception statement from your version. */
package java.awt;
+import java.util.ArrayList;
+import java.awt.image.ImageObserver;
+
/**
* This class is used for keeping track of the status of various media
* objects.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Bryce McKinlay
*/
public class MediaTracker implements java.io.Serializable
{
+ public static final int LOADING = 1 << 0;
+ public static final int ABORTED = 1 << 1;
+ public static final int ERRORED = 1 << 2;
+ public static final int COMPLETE = 1 << 3;
+
+ Component target;
+ MediaEntry head;
+
+ static final long serialVersionUID = -483174189758638095L;
+
+ // 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
+ {
+ int id;
+ Image image;
+ MediaEntry next;
+ int status;
+ int width;
+ int height;
+
+ public boolean imageUpdate(Image img, int flags, int x, int y,
+ int width, int height)
+ {
+ if ((flags & ABORT) != 0)
+ status = ABORTED & COMPLETE;
+ else if ((flags & ERROR) != 0)
+ status = ERRORED & COMPLETE;
+ else if ((flags & ALLBITS) != 0)
+ status = COMPLETE;
+ else
+ status = LOADING;
+
+ synchronized (MediaTracker.this)
+ {
+ MediaTracker.this.notifyAll();
+ }
+
+ return ((status & COMPLETE) != 0);
+ }
+ }
+
+ public MediaTracker(Component c)
+ {
+ target = c;
+ }
+
+ public void addImage(Image image, int id)
+ {
+ MediaEntry e = new MediaEntry();
+ e.id = id;
+ e.image = image;
+ e.next = head;
+ head = e;
+ // Start tracking image status.
+ target.checkImage(image, e);
+ }
+
+ public void addImage(Image image, int id, int width, int height)
+ {
+ MediaEntry e = new MediaEntry();
+ e.id = id;
+ e.image = image;
+ e.next = head;
+ e.width = width;
+ e.height = height;
+ head = e;
+ // Start tracking image status.
+ target.checkImage(image, width, height, e);
+ }
+
+ public boolean checkAll()
+ {
+ return checkAll(false);
+ }
+
+ public boolean checkAll(boolean load)
+ {
+ MediaEntry e = head;
+ boolean result = true;
+
+ while (e != null)
+ {
+ if ((e.status & COMPLETE) == 0)
+ {
+ if (load)
+ {
+ result = false;
+ if (e.status == 0)
+ {
+ target.prepareImage(e.image, e);
+ e.status = LOADING;
+ }
+ }
+ else
+ return false;
+ }
+ e = e.next;
+ }
+ return result;
+ }
+
+ public boolean isErrorAny()
+ {
+ MediaEntry e = head;
+ while (e != null)
+ {
+ if ((e.status & ERRORED) != 0)
+ return true;
+ e = e.next;
+ }
+ return false;
+ }
+
+ 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();
+ }
+
+ public void waitForAll() throws InterruptedException
+ {
+ synchronized (this)
+ {
+ while (checkAll(true) == false)
+ wait();
+ }
+ }
+
+ public boolean waitForAll(long ms) throws InterruptedException
+ {
+ long start = System.currentTimeMillis();
+ synchronized (this)
+ {
+ while (!checkAll(true))
+ wait(ms);
+ }
+ if ((System.currentTimeMillis() - start) < ms)
+ return true;
+ else
+ return false;
+ }
+
+ public int statusAll(boolean load)
+ {
+ int result = 0;
+ MediaEntry e = head;
+ while (e != null)
+ {
+ if (load && e.status == 0)
+ {
+ target.prepareImage(e.image, e);
+ e.status = LOADING;
+ }
+ result |= e.status;
+ e = e.next;
+ }
+ return result;
+ }
+
+ public boolean checkID(int id)
+ {
+ return checkID(id, false);
+ }
+
+ public boolean checkID(int id, boolean load)
+ {
+ MediaEntry e = head;
+ boolean result = true;
+
+ while (e != null)
+ {
+ if (e.id == id && ((e.status & COMPLETE) == 0))
+ {
+ if (load)
+ {
+ result = false;
+ if (e.status == 0)
+ {
+ target.prepareImage(e.image, e);
+ e.status = LOADING;
+ }
+ }
+ else
+ return false;
+ }
+ e = e.next;
+ }
+ return result;
+ }
+
+ 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;
+ }
+
+ 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();
+ }
+
+ public void waitForID(int id) throws InterruptedException
+ {
+ MediaEntry e = head;
+ synchronized (this)
+ {
+ while (checkID (id, true) == false)
+ wait();
+ }
+ }
+
+ public boolean waitForID(int id, long ms) throws InterruptedException
+ {
+ MediaEntry e = head;
+ long start = System.currentTimeMillis();
+ synchronized (this)
+ {
+ while (checkID (id, true) == false)
+ wait(ms);
+ }
+ if ((System.currentTimeMillis() - start) < ms)
+ return true;
+ else
+ return false;
+ }
+
+ 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)
+ {
+ target.prepareImage(e.image, e);
+ e.status = LOADING;
+ }
+ result |= e.status;
+ }
+ e = e.next;
+ }
+ return result;
+ }
+
+ public void removeImage(Image image)
+ {
+ 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;
+ }
+ }
-} // class MediaTracker
+ public void removeImage(Image image, int id)
+ {
+ 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;
+ }
+ }
+ public void removeImage(Image image, int id, int width, int height)
+ {
+ 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;
+ }
+ }
+}