mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 13:54:19 +08:00
MediaTracker.java: Implemented.
* java/awt/MediaTracker.java: Implemented. * Makefile.am: Add MediaTracker. * Makefile.in: Rebuilt. From-SVN: r50349
This commit is contained in:
parent
c7544dd8fd
commit
f095bbfc5b
@ -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.
|
||||
|
@ -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 \
|
||||
|
@ -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 \
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user