Hi David, hi Francis, I checked in the attached patch to HeadlessGraphicsEnvironment. It now tries to get hold of a CairoGraphics2D if available. It falls back to the (Java-only) RasterGraphics only when nothing else works. David, can you please test if this works?
2006-11-23 Roman Kennke <[EMAIL PROTECTED]> * gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java (createGraphics): Try to use Cairo graphics if available. /Roman
Index: gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java,v retrieving revision 1.1 diff -u -1 -5 -r1.1 HeadlessGraphicsEnvironment.java --- gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java 9 Nov 2006 21:03:33 -0000 1.1 +++ gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java 23 Nov 2006 08:44:12 -0000 @@ -34,39 +34,68 @@ 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 gnu.java.awt.peer.headless; import gnu.java.awt.java2d.RasterGraphics; import java.awt.Font; import java.awt.Graphics2D; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; import java.awt.image.BufferedImage; +import java.awt.image.Raster; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.util.Locale; public class HeadlessGraphicsEnvironment extends GraphicsEnvironment { public Graphics2D createGraphics(BufferedImage image) { - return new RasterGraphics(image.getRaster(), image.getColorModel()); + Graphics2D g2d; + try + { + // Try to get a CairoGraphics (accellerated) when available. Do this + // via reflection to avoid having a hard compile time dependency. + Class cairoSurfaceCl = Class.forName("gnu.java.awt.peer.gtk.CairoSurface"); + Raster raster = image.getRaster(); + if (cairoSurfaceCl.isInstance(raster)) + { + Method getGraphicsM = cairoSurfaceCl.getMethod("getGraphics", + new Class[0]); + g2d = (Graphics2D) getGraphicsM.invoke(raster, new Object[0]); + } + else + { + Class bigCl = + Class.forName("gnu.java.awt.peer.gtk.BufferedImageGraphics"); + Constructor bigC = + bigCl.getConstructor(new Class[]{BufferedImage.class }); + g2d = (Graphics2D) bigCl.newInstance(); + } + } + catch (Exception ex) + { + g2d = new RasterGraphics(image.getRaster(), image.getColorModel()); + } + return g2d; } public Font[] getAllFonts() { // FIXME: Implement. return null; } public String[] getAvailableFontFamilyNames() { // FIXME: Implement. return null; } public String[] getAvailableFontFamilyNames(Locale l)