This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][patch] fix for bug 16280
- From: "graydon hoare" <graydon at redhat dot com>
- To: "java-patches at gcc dot gnu dot org" <java-patches at gcc dot gnu dot org>
- Date: Wed, 07 Jul 2004 12:31:12 -0400
- Subject: [gui][patch] fix for bug 16280
- Organization: red hat
hi,
this patch corrects bug 16280; I had previously checked in changes to
ImageIcon.java which failed to recover properly when loading missing
image icons, under Graphics2D. I've committed this to java-gui-branch.
2004-07-07 Graydon Hoare <graydon@redhat.com>
* java/awt/image/BufferedImage.java (getSource): Remove tracing chatter.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(GtkErrorImage): New helper class.
(bufferedImageOrError): New helper method.
(createImage): Use it.
--- java/awt/image/BufferedImage.java 29 Jun 2004 05:24:26 -0000 1.9.14.3
+++ java/awt/image/BufferedImage.java 7 Jul 2004 16:27:27 -0000
@@ -481,7 +481,6 @@
Iterator i = consumers.iterator();
while(i.hasNext())
{
- System.err.println("delivering " + width + "x" + height + " (" + pixels.length + ") pixels");
ImageConsumer c = (ImageConsumer) i.next();
c.setHints(ImageConsumer.SINGLEPASS);
c.setDimensions(getWidth(), getHeight());
--- gnu/java/awt/peer/gtk/GtkToolkit.java 16 Jun 2004 19:05:54 -0000 1.8.2.5
+++ gnu/java/awt/peer/gtk/GtkToolkit.java 7 Jul 2004 16:27:27 -0000
@@ -44,13 +44,17 @@
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
+import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
+import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.awt.GraphicsEnvironment;
import java.awt.peer.*;
import java.net.URL;
+import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Properties;
@@ -127,10 +131,102 @@
return status;
}
+ /**
+ * A helper class to return to clients in cases where a BufferedImage is
+ * desired but its construction fails.
+ */
+ private class GtkErrorImage extends Image
+ {
+ public GtkErrorImage()
+ {
+ }
+
+ public int getWidth(ImageObserver observer)
+ {
+ return -1;
+ }
+
+ public int getHeight(ImageObserver observer)
+ {
+ return -1;
+ }
+
+ public ImageProducer getSource()
+ {
+
+ return new ImageProducer()
+ {
+ HashSet consumers = new HashSet();
+ public void addConsumer(ImageConsumer ic)
+ {
+ consumers.add(ic);
+ }
+
+ public boolean isConsumer(ImageConsumer ic)
+ {
+ return consumers.contains(ic);
+ }
+
+ public void removeConsumer(ImageConsumer ic)
+ {
+ consumers.remove(ic);
+ }
+
+ public void startProduction(ImageConsumer ic)
+ {
+ consumers.add(ic);
+ Iterator i = consumers.iterator();
+ while(i.hasNext())
+ {
+ ImageConsumer c = (ImageConsumer) i.next();
+ c.imageComplete(ImageConsumer.IMAGEERROR);
+ }
+ }
+ public void requestTopDownLeftRightResend(ImageConsumer ic)
+ {
+ startProduction(ic);
+ }
+ };
+ }
+
+ public Graphics getGraphics()
+ {
+ return null;
+ }
+
+ public Object getProperty(String name, ImageObserver observer)
+ {
+ return null;
+ }
+ public Image getScaledInstance(int width, int height, int flags)
+ {
+ return new GtkErrorImage();
+ }
+
+ public void flush()
+ {
+ }
+ }
+
+
+ /**
+ * Helper to return either a BufferedImage -- the argument -- or a
+ * GtkErrorImage if the argument is null.
+ */
+
+ private static Image bufferedImageOrError(BufferedImage b)
+ {
+ if (b == null)
+ return new GtkErrorImage();
+ else
+ return b;
+ }
+
+
public Image createImage (String filename)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (filename);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (filename);
@@ -143,7 +239,7 @@
public Image createImage (URL url)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (url);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (url);
@@ -156,7 +252,7 @@
public Image createImage (ImageProducer producer)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (producer);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (producer));
else
{
GtkImage image = new GtkImage (producer, null);
@@ -169,9 +265,9 @@
int imagelength)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (imagedata,
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (imagedata,
imageoffset,
- imagelength);
+ imagelength));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (imagedata,