diff options
Diffstat (limited to 'libjava/gnu/java/awt/peer')
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkCanvasPeer.java | 3 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java | 12 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java | 3 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java | 111 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java | 9 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkToolkit.java | 81 |
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 |

