--- GdkGraphics2D.java 2004-11-26 18:17:16.137000000 +0100 +++ /data/sven/myprograms/cp/sven/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java 2004-11-26 18:04:11.442278034 +0100 @@ -82,6 +82,7 @@ import java.awt.image.ImageConsumer; import java.awt.image.ImageObserver; import java.awt.image.ImagingOpException; +import java.awt.image.MultiPixelPackedSampleModel; import java.awt.image.Raster; import java.awt.image.RenderedImage; import java.awt.image.SampleModel; @@ -1019,27 +1020,39 @@ pixels = dbi.getData(); } else - pixels = r.getPixels(0, 0, r.getWidth(), r.getHeight(), pixels); - - ColorSpace cs = cm.getColorSpace(); - if (cs != null && cs.getType() != ColorSpace.CS_sRGB) { - int[] pixels2 = new int[pixels.length]; - for (int i = 0; i < pixels2.length; i++) - pixels2[i] = cm.getRGB(pixels[i]); - pixels = pixels2; + // FIXME: I don't think this code will work correctly with a non-RGB + // MultiPixelPackedSampleModel. Although this entire method should + // probably be rewritten to better utilize Cairo's different supported + // data formats. + if (sm instanceof MultiPixelPackedSampleModel) + { + pixels = r.getPixels(0, 0, r.getWidth(), r.getHeight(), pixels); + for (int i = 0; i < pixels2.length; i++) + pixels[i] = cm.getRGB(pixels[i]); + } + else + { + pixels = new int[r.getWidth() * r.getHeight()]; + for (int i = 0; i < pixels.length; i++) + pixels[i] = cm.getRGB(db.getElem(i)); + } } // change all transparent pixels in the image to the - // specified bgcolor - if (bgcolor != null) + // specified bgcolor + if (cm.hasAlpha()) { - for (int i = 0; i < pixels.length; i++) - { - if (cm.getAlpha(pixels[i]) == 0) - pixels[i] = bgcolor.getRGB(); - } + if (bgcolor != null && cm.hasAlpha()) + for (int i = 0; i < pixels.length; i++) + { + if (cm.getAlpha(pixels[i]) == 0) + pixels[i] = bgcolor.getRGB(); + } } + else + for (int i = 0; i < pixels.length; i++) + pixels[i] |= 0xFF000000; drawPixels(pixels, r.getWidth(), r.getHeight(), r.getWidth(), i2u);