[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: mediatracker fixes
Kaffe CVS
cvs-commits at kaffe.org
Mon Apr 18 17:13:35 PDT 2005
PatchSet 5705
Date: 2005/04/19 00:07:19
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU Classpath: mediatracker fixes
2005-04-18 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
2005-04-08 Roman Kennke <roman at kennke.org>
* java/awt/MediaTracker.java
(MediaEntry.imageUpdate): Fixed flags. The different flags
must not be ORed together.
(checkAll): Modified to handle different meaning of the flags.
(waitForAll): Fixed so that it waits maximum the
specified amount of milliseconds.
(statusAll): Modified to handle different meaning of the flags.
(waitForID): Fixed so that it waits maximum the
specified amount of milliseconds.
Members:
ChangeLog:1.3872->1.3873
libraries/javalib/java/awt/MediaTracker.java:INITIAL->1.15
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3872 kaffe/ChangeLog:1.3873
--- kaffe/ChangeLog:1.3872 Tue Apr 19 00:01:47 2005
+++ kaffe/ChangeLog Tue Apr 19 00:07:19 2005
@@ -4,6 +4,22 @@
2005-04-08 Roman Kennke <roman at kennke.org>
+ * java/awt/MediaTracker.java
+ (MediaEntry.imageUpdate): Fixed flags. The different flags
+ must not be ORed together.
+ (checkAll): Modified to handle different meaning of the flags.
+ (waitForAll): Fixed so that it waits maximum the
+ specified amount of milliseconds.
+ (statusAll): Modified to handle different meaning of the flags.
+ (waitForID): Fixed so that it waits maximum the
+ specified amount of milliseconds.
+
+2005-04-18 Dalibor Topic <robilad at kaffe.org>
+
+ Resynced with GNU Classpath.
+
+ 2005-04-08 Roman Kennke <roman at kennke.org>
+
* javax/swing/text/ImageIcon.java
(ImageIcon): Use setImage instead of direct assignment.
(setImage): Call loadImage to make sure that the image is loaded.
===================================================================
Checking out kaffe/libraries/javalib/java/awt/MediaTracker.java
RCS: /home/cvs/kaffe/kaffe/libraries/javalib/java/awt/MediaTracker.java,v
VERS: 1.15
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/libraries/javalib/java/awt/MediaTracker.java Tue Apr 19 00:13:35 2005
@@ -0,0 +1,406 @@
+/* MediaTracker.java -- Class used for keeping track of images
+ Copyright (C) 1999, 2002i, 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.awt;
+
+import java.awt.image.ImageObserver;
+import java.util.ArrayList;
+
+/**
+ * This class is used for keeping track of the status of various media
+ * objects.
+ *
+ * @author Aaron M. Renn (arenn at 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;
+ else if ((flags & ERROR) != 0)
+ status = ERRORED;
+ else if ((flags & ALLBITS) != 0)
+ status = COMPLETE;
+ else if ((flags & SOMEBITS) != 0)
+ status = LOADING;
+ else
+ status = 0;
+
+ synchronized (MediaTracker.this)
+ {
+ MediaTracker.this.notifyAll();
+ }
+
+ // If status is not COMPLETE then we need more updates.
+ return ((status & (COMPLETE | ERRORED | ABORTED)) == 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.
+ int flags = target.checkImage(image, e);
+ e.imageUpdate(image, flags, -1, -1, -1, -1);
+ }
+
+ 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.
+ int flags = target.checkImage(image, width, height, e);
+ e.imageUpdate(image, flags, -1, -1, width, height);
+ }
+
+ public boolean checkAll()
+ {
+ return checkAll(false);
+ }
+
+ public boolean checkAll(boolean load)
+ {
+ MediaEntry e = head;
+ boolean result = true;
+
+ while (e != null)
+ {
+ if ((e.status & (COMPLETE | ERRORED | ABORTED)) == 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();
+ boolean result = checkAll(true);
+ synchronized (this)
+ {
+ while (result == false)
+ {
+ wait(ms);
+ result = checkAll(true);
+ if ((System.currentTimeMillis() - start) < ms)
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ 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 | ABORTED | ERRORED)) == 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();
+ boolean result = checkID(id, true);
+
+ synchronized (this)
+ {
+ while (result == false)
+ {
+ wait(ms);
+ result = checkID(id, true);
+ if ((System.currentTimeMillis() - start) < ms)
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ 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;
+ }
+ }
+}
More information about the kaffe
mailing list