summaryrefslogtreecommitdiff
path: root/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java')
-rw-r--r--gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java32
1 files changed, 31 insertions, 1 deletions
diff --git a/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java b/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java
index 77ec4bf00..b3eeb1baa 100644
--- a/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java
+++ b/gnu/java/awt/peer/headless/HeadlessGraphicsEnvironment.java
@@ -46,6 +46,9 @@ 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
@@ -54,7 +57,34 @@ public class HeadlessGraphicsEnvironment
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) bigC.newInstance(new Object[]{ image});
+ }
+ }
+ catch (Exception ex)
+ {
+ g2d = new RasterGraphics(image.getRaster(), image.getColorModel());
+ }
+ return g2d;
}
public Font[] getAllFonts()