From b9d896d6002cad7cb268a7c6084e0008561aa4ea Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Tue, 19 Apr 2005 05:59:46 +0000 Subject: [PATCH] 2005-04-19 Roman Kennke * javax/swing/ImageIcon.java Added API documentation. 2005-04-19 Roman Kennke * javax/swing/text/ImageIcon.java (ImageIcon): Use setImage instead of direct assignment. (setImage): Call loadImage to make sure that the image is loaded. (loadImage): Waits for the image to complete loading. (getImageLoadStatus): Added. Returns the load status of the image. From-SVN: r98384 --- libjava/ChangeLog | 14 +++++++ libjava/javax/swing/ImageIcon.java | 60 ++++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 78bc42dbf24..95488e7216d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,17 @@ +2005-04-19 Roman Kennke + + * javax/swing/ImageIcon.java + Added API documentation. + +2005-04-19 Roman Kennke + + * javax/swing/text/ImageIcon.java + (ImageIcon): Use setImage instead of direct assignment. + (setImage): Call loadImage to make sure that the image is loaded. + (loadImage): Waits for the image to complete loading. + (getImageLoadStatus): Added. Returns the load status of the + image. + 2005-04-19 Audrius Meskauskas * javax/swing/JTextArea.java (replaceRange): diff --git a/libjava/javax/swing/ImageIcon.java b/libjava/javax/swing/ImageIcon.java index 36bd088ff6b..abdc3913179 100644 --- a/libjava/javax/swing/ImageIcon.java +++ b/libjava/javax/swing/ImageIcon.java @@ -1,5 +1,5 @@ /* ImageIcon.java -- - Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,6 +40,7 @@ package javax.swing; import java.awt.Component; import java.awt.Graphics; import java.awt.Image; +import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.image.ImageObserver; import java.io.Serializable; @@ -50,10 +51,23 @@ public class ImageIcon implements Icon, Serializable { private static final long serialVersionUID = 532615968316031794L; + + /** A dummy Component that is used in the MediaTracker. */ + protected static Component component = new Component(){}; + + /** The MediaTracker used to monitor the loading of images. */ + protected static MediaTracker tracker = new MediaTracker(component); + + /** The ID that is used in the tracker. */ + private static int id; + Image image; String description; ImageObserver observer; + /** The image loading status. */ + private int loadStatus; + public ImageIcon() { } @@ -95,8 +109,8 @@ public class ImageIcon public ImageIcon(Image image, String description) { - this.image = Toolkit.getDefaultToolkit().createImage(image.getSource()); - this.description = description; + setImage(image); + setDescription(description); } public ImageObserver getImageObserver() @@ -116,7 +130,8 @@ public class ImageIcon public void setImage(Image image) { - this.image = Toolkit.getDefaultToolkit().createImage(image.getSource()); + loadImage(image); + this.image = image; } public String getDescription() @@ -143,4 +158,41 @@ public class ImageIcon { g.drawImage(image, x, y, observer != null ? observer : c); } + + /** + * Loads the image and blocks until the loading operation is finished. + * + * @param image the image to be loaded + */ + protected void loadImage(Image image) + { + try + { + tracker.addImage(image, id); + id++; + tracker.waitForID(id - 1); + } + catch (InterruptedException ex) + { + ; // ignore this for now + } + finally + { + loadStatus = tracker.statusID(id - 1, false); + } + } + + /** + * Returns the load status of the icon image. + * + * @return the load status of the icon image + * + * @see {@link MediaTracker.COMPLETE} + * @see {@link MediaTracker.ABORTED} + * @see {@link MediaTracker.ERRORED} + */ + public int getImageLoadStatus() + { + return loadStatus; + } }