Index: gnu/java/awt/peer/gtk/GtkFramePeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java,v
retrieving revision 1.17.2.4
diff -u -r1.17.2.4 GtkFramePeer.java
--- gnu/java/awt/peer/gtk/GtkFramePeer.java 30 Jul 2004 20:00:15 -0000 1.17.2.4
+++ gnu/java/awt/peer/gtk/GtkFramePeer.java 5 Aug 2004 13:52:57 -0000
@@ -47,6 +47,7 @@
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.PaintEvent;
+import java.awt.image.ColorModel;
import java.awt.peer.FramePeer;
import java.awt.peer.MenuBarPeer;
@@ -146,16 +147,35 @@
setIconImage(frame.getIconImage());
}
- native void nativeSetIconImage (GdkPixbufDecoder decoder);
+ native void nativeSetIconImageFromDecoder (GdkPixbufDecoder decoder);
+ native void nativeSetIconImageFromData (int[] pixels, int width, int height);
public void setIconImage (Image image)
{
if (image != null)
{
GtkImage img = (GtkImage) image;
// FIXME: Image should be loaded, but if not, do image loading here.
- // Also, can the image source be anything else than GdkPixbufDecoder?
- if (img.isLoaded() && img.getSource() instanceof GdkPixbufDecoder)
- nativeSetIconImage((GdkPixbufDecoder) img.getSource());
+ if (img.isLoaded())
+ {
+ if (img.getSource() instanceof GdkPixbufDecoder)
+ {
+ nativeSetIconImageFromDecoder((GdkPixbufDecoder) img.getSource());
+ }
+ else
+ {
+ int[] pixels = img.getPixelCache();
+ ColorModel model = img.getColorModel();
+ int[] data = new int[pixels.length * 4];
+ for (int i = 0; i < pixels.length; i++)
+ {
+ data[i * 4] = model.getRed(pixels[i]);
+ data[i * 4 + 1] = model.getGreen(pixels[i]);
+ data[i * 4 + 2] = model.getBlue(pixels[i]);
+ data[i * 4 + 3] = model.getAlpha(pixels[i]);
+ }
+ nativeSetIconImageFromData(data, img.getWidth(null), img.getHeight(null));
+ }
+ }
}
}