Commit f095bbfc by Bryce McKinlay Committed by Bryce McKinlay

MediaTracker.java: Implemented.

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

From-SVN: r50349
parent c7544dd8
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> 2002-03-05 Tom Tromey <tromey@redhat.com>
* java/lang/natPosixProcess.cc (fail): Removed. * java/lang/natPosixProcess.cc (fail): Removed.
......
...@@ -654,6 +654,7 @@ java/awt/Label.java \ ...@@ -654,6 +654,7 @@ java/awt/Label.java \
java/awt/LayoutManager.java \ java/awt/LayoutManager.java \
java/awt/LayoutManager2.java \ java/awt/LayoutManager2.java \
java/awt/List.java \ java/awt/List.java \
java/awt/MediaTracker.java \
java/awt/Menu.java \ java/awt/Menu.java \
java/awt/MenuBar.java \ java/awt/MenuBar.java \
java/awt/MenuComponent.java \ java/awt/MenuComponent.java \
......
...@@ -387,6 +387,7 @@ java/awt/Label.java \ ...@@ -387,6 +387,7 @@ java/awt/Label.java \
java/awt/LayoutManager.java \ java/awt/LayoutManager.java \
java/awt/LayoutManager2.java \ java/awt/LayoutManager2.java \
java/awt/List.java \ java/awt/List.java \
java/awt/MediaTracker.java \
java/awt/Menu.java \ java/awt/Menu.java \
java/awt/MenuBar.java \ java/awt/MenuBar.java \
java/awt/MenuComponent.java \ java/awt/MenuComponent.java \
...@@ -2021,11 +2022,12 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ ...@@ -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/Insets.P .deps/java/awt/ItemSelectable.P \
.deps/java/awt/Label.P .deps/java/awt/LayoutManager.P \ .deps/java/awt/Label.P .deps/java/awt/LayoutManager.P \
.deps/java/awt/LayoutManager2.P .deps/java/awt/List.P \ .deps/java/awt/LayoutManager2.P .deps/java/awt/List.P \
.deps/java/awt/Menu.P .deps/java/awt/MenuBar.P \ .deps/java/awt/MediaTracker.P .deps/java/awt/Menu.P \
.deps/java/awt/MenuComponent.P .deps/java/awt/MenuContainer.P \ .deps/java/awt/MenuBar.P .deps/java/awt/MenuComponent.P \
.deps/java/awt/MenuItem.P .deps/java/awt/MenuShortcut.P \ .deps/java/awt/MenuContainer.P .deps/java/awt/MenuItem.P \
.deps/java/awt/Paint.P .deps/java/awt/PaintContext.P \ .deps/java/awt/MenuShortcut.P .deps/java/awt/Paint.P \
.deps/java/awt/Panel.P .deps/java/awt/Point.P .deps/java/awt/Polygon.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/PopupMenu.P .deps/java/awt/PrintGraphics.P \
.deps/java/awt/PrintJob.P .deps/java/awt/Rectangle.P \ .deps/java/awt/PrintJob.P .deps/java/awt/Rectangle.P \
.deps/java/awt/RenderingHints.P .deps/java/awt/ScrollPane.P \ .deps/java/awt/RenderingHints.P .deps/java/awt/ScrollPane.P \
......
/* MediaTracker.java -- Class used for keeping track of images /* 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. This file is part of GNU Classpath.
...@@ -38,14 +38,355 @@ exception statement from your version. */ ...@@ -38,14 +38,355 @@ exception statement from your version. */
package java.awt; 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 * This class is used for keeping track of the status of various media
* objects. * objects.
* *
* @author Aaron M. Renn (arenn@urbanophile.com) * @author Aaron M. Renn (arenn@urbanophile.com)
* @author Bryce McKinlay
*/ */
public class MediaTracker implements java.io.Serializable 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;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment