From: bryce Date: Wed, 6 Mar 2002 08:11:06 +0000 (+0000) Subject: * java/awt/MediaTracker.java: Implemented. X-Git-Tag: upstream/4.9.2~88286 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bedc9c789fa2bd4faf858e1cdf7cec38b8d020d6;p=platform%2Fupstream%2Flinaro-gcc.git * java/awt/MediaTracker.java: Implemented. * Makefile.am: Add MediaTracker. * Makefile.in: Rebuilt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50349 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 392d370..7260543 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2002-03-06 Bryce McKinlay + + * java/awt/MediaTracker.java: Implemented. + * Makefile.am: Add MediaTracker. + * Makefile.in: Rebuilt. + 2002-03-05 Tom Tromey * java/lang/natPosixProcess.cc (fail): Removed. diff --git a/libjava/Makefile.am b/libjava/Makefile.am index bceb907..332f64f 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 a87668f..ea1b798 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 04ecad5..a94d650 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; + } + } +}