Hi Roman,

Roman Kennke wrote:
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();
Should you be using the Constructor 'bigC' here to create the 'g2d' (passing the BufferedImage as an argument), and not the Class 'bigCl'?

Regards,

Dave

+          }
+      }
+    catch (Exception ex)
+      {
+        g2d = new RasterGraphics(image.getRaster(), image.getColorModel());
+      }
+    return g2d;
   }

Reply via email to