MediaTracker.java: Implemented.

* java/awt/MediaTracker.java: Implemented.
        * Makefile.am: Add MediaTracker.
        * Makefile.in: Rebuilt.

From-SVN: r50349
This commit is contained in:
Bryce McKinlay 2002-03-06 08:11:06 +00:00 committed by Bryce McKinlay
parent c7544dd8fd
commit f095bbfc5b
4 changed files with 357 additions and 7 deletions

View File

@ -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.

View File

@ -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 \

View File

@ -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 \

View File

@ -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;
} // class MediaTracker
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;
}
}
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;
}
}
}