summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/awt/peer
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java/awt/peer')
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java3
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java12
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java3
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java111
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java9
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkToolkit.java81
6 files changed, 212 insertions, 7 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
index d5378dc77de..1a0c4c968e3 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
@@ -56,6 +56,9 @@ public class GtkCanvasPeer extends GtkComponentPeer implements CanvasPeer
public Graphics getGraphics ()
{
+ if (GtkToolkit.useGraphics2D ())
+ return new GdkGraphics2D (this);
+ else
return new GdkGraphics (this);
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 4e216f8770e..6a7c3405f84 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -48,6 +48,7 @@ import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
+import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Insets;
@@ -148,7 +149,16 @@ public class GtkComponentPeer extends GtkGenericPeer
public Image createImage (int width, int height)
{
- GdkGraphics g = new GdkGraphics (width, height);
+ Graphics g;
+ if (GtkToolkit.useGraphics2D ())
+ {
+ Graphics2D g2 = new GdkGraphics2D (width, height);
+ g2.setBackground (getBackground ());
+ g = g2;
+ }
+ else
+ g = new GdkGraphics (width, height);
+
return new GtkOffScreenImage (null, g, width, height);
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 8ab37341917..e51b7f09856 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -92,6 +92,9 @@ public class GtkContainerPeer extends GtkComponentPeer
public Graphics getGraphics ()
{
+ if (GtkToolkit.useGraphics2D ())
+ return new GdkGraphics2D (this);
+ else
return new GdkGraphics (this);
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
index d3130a905e9..8c1ec8fedd0 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
@@ -38,10 +38,15 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.peer.FontPeer;
-import java.awt.Font;
+import java.awt.*;
+import java.awt.geom.*;
+import java.awt.font.*;
+import java.util.Locale;
import java.util.ResourceBundle;
+import java.text.*;
+import gnu.java.awt.peer.ClasspathFontPeer;
-public class GtkFontPeer implements FontPeer
+public class GtkFontPeer extends ClasspathFontPeer
{
private static ResourceBundle bundle;
@@ -61,6 +66,8 @@ public class GtkFontPeer implements FontPeer
public GtkFontPeer (String name, int style)
{
+ super(name, style, 12 /* kludge */);
+
if (bundle != null)
Xname = bundle.getString (name.toLowerCase () + "." + style);
else
@@ -91,4 +98,104 @@ public class GtkFontPeer implements FontPeer
{
return Xname;
}
+
+
+ /* remaining methods are for static compatibility with the newer
+ ClasspathFontPeer superclass; none of these methods ever existed or
+ worked on the older FontPeer interface, but we need to pretend to
+ support them anyways. */
+
+ public boolean canDisplay (Font font, char c)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getSubFamilyName (Font font, Locale locale)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getPostScriptName (Font font)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public int getNumGlyphs (Font font)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public int getMissingGlyphCode (Font font)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public byte getBaselineFor (Font font, char c)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getGlyphName (Font font, int glyphIndex)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public GlyphVector createGlyphVector (Font font,
+ FontRenderContext frc,
+ CharacterIterator ci)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public GlyphVector createGlyphVector (Font font,
+ FontRenderContext ctx,
+ int[] glyphCodes)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public GlyphVector layoutGlyphVector (Font font,
+ FontRenderContext frc,
+ char[] chars, int start,
+ int limit, int flags)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public FontMetrics getFontMetrics (Font font)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasUniformLineMetrics (Font font)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public LineMetrics getLineMetrics (Font font,
+ CharacterIterator ci,
+ int begin, int limit,
+ FontRenderContext rc)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Rectangle2D getMaxCharBounds (Font font,
+ FontRenderContext rc)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Rectangle2D getStringBounds (Font font,
+ CharacterIterator ci,
+ int begin, int limit,
+ FontRenderContext frc)
+ {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
index ce5aa71e573..13d2fc77a25 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
@@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
+import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MenuBar;
@@ -109,8 +110,12 @@ public class GtkFramePeer extends GtkWindowPeer
public Graphics getGraphics ()
{
- GdkGraphics g = new GdkGraphics (this);
- g.translateNative (-insets.left, -insets.top);
+ Graphics g;
+ if (GtkToolkit.useGraphics2D ())
+ g = new GdkGraphics2D (this);
+ else
+ g = new GdkGraphics (this);
+ g.translate (-insets.left, -insets.top);
return g;
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
index 0a09f1f1970..b703540d56d 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java
@@ -42,6 +42,7 @@ import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
@@ -55,6 +56,7 @@ import java.util.Properties;
import gnu.java.awt.EmbeddedWindow;
import gnu.java.awt.EmbeddedWindowSupport;
import gnu.java.awt.peer.EmbeddedWindowPeer;
+import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.classpath.Configuration;
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
@@ -65,7 +67,15 @@ import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
this class. If getPeer() ever goes away, we can implement a hash table
that will keep up with every window's peer, but for now this is faster. */
-public class GtkToolkit extends Toolkit
+/**
+ * This class accesses a system property called
+ * <tt>gnu.java.awt.peer.gtk.Graphics</tt>. If the property is defined and
+ * equal to "Graphics2D", the cairo-based GdkGraphics2D will be used in
+ * drawing contexts. Any other value will cause the older GdkGraphics
+ * object to be used.
+ */
+
+public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
implements EmbeddedWindowSupport
{
GtkMainThread main;
@@ -73,6 +83,19 @@ public class GtkToolkit extends Toolkit
static EventQueue q = new EventQueue();
static Clipboard systemClipboard;
+ static boolean useGraphics2dSet;
+ static boolean useGraphics2d;
+
+ public static boolean useGraphics2D()
+ {
+ if (useGraphics2dSet)
+ return useGraphics2d;
+ useGraphics2d = System.getProperty("gnu.java.awt.peer.gtk.Graphics",
+ "Graphics").equals("Graphics2D");
+ useGraphics2dSet = true;
+ return useGraphics2d;
+ }
+
static
{
if (Configuration.INIT_LOAD_LIBRARY)
@@ -135,7 +158,10 @@ public class GtkToolkit extends Toolkit
public FontMetrics getFontMetrics (Font font)
{
- return new GdkFontMetrics (font);
+ if (useGraphics2D())
+ return new GdkClasspathFontPeerMetrics (font);
+ else
+ return new GdkFontMetrics (font);
}
public Image getImage (String filename)
@@ -322,6 +348,11 @@ public class GtkToolkit extends Toolkit
return new GtkEmbeddedWindowPeer (w);
}
+ /**
+ * @deprecated part of the older "logical font" system in earlier AWT
+ * implementations. Our newer Font class uses getClasspathFontPeer.
+ */
+
protected FontPeer getFontPeer (String name, int style)
{
try {
@@ -332,6 +363,38 @@ public class GtkToolkit extends Toolkit
}
}
+ /**
+ * Newer method to produce a peer for a Font object, even though Sun's
+ * design claims Font should now be peerless, we do not agree with this
+ * model, hence "ClasspathFontPeer".
+ */
+
+ public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
+ {
+ if (useGraphics2D())
+ return new GdkClasspathFontPeer (name, attrs);
+ else
+ {
+ int style = Font.PLAIN;
+
+ if (attrs.containsKey (TextAttribute.WEIGHT))
+ {
+ Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
+ if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
+ style += Font.BOLD;
+ }
+
+ if (attrs.containsKey (TextAttribute.POSTURE))
+ {
+ Float posture = (Float) attrs.get (TextAttribute.POSTURE);
+ if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
+ style += Font.ITALIC;
+ }
+
+ return (ClasspathFontPeer) this.getFontPeer (name, style);
+ }
+ }
+
protected EventQueue getSystemEventQueueImpl()
{
return q;
@@ -350,4 +413,18 @@ public class GtkToolkit extends Toolkit
{
throw new Error("not implemented");
}
+
+ // ClasspathToolkit methods
+
+ public GraphicsEnvironment getLocalGraphicsEnvironment()
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+ public Font createFont(int format, java.io.InputStream stream)
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+
} // class GtkToolkit
OpenPOWER on IntegriCloud