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)

Reply via email to