[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