configure.in: Add --enable-gtk-cairo check.
2003-12-16 Graydon Hoare <graydon@redhat.com> * configure.in: Add --enable-gtk-cairo check. * configure: Regenerate. * Makefile.am: Conditionally link against cairo. * Makefile.in: Regenerate. * acinclude.m4: Include PKG_CHECK_MODULES. * aclocal.m4: Regenerate. * gnu/java/awt/peer/gtk/GtkToolkit.java (useGraphics2D): New method. (getFontMetrics, getClasspathFontPeer): * gnu/java/awt/peer/gtk/GtkCanvasPeer.java (getGraphics): * gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): * gnu/java/awt/peer/gtk/GtkContainerPeer.java (getGraphics): * gnu/java/awt/peer/gtk/GtkFramePeer.java (getGraphics): Switch behavior depending on GtkToolkit.useGraphics2D(). * gnu/java/awt/peer/gtk/GtkFontPeer.java: Extend ClasspathFontPeer. * java/awt/Font.java: Switch to peer model. * jni/gtk-peer/gtkcairopeer.h: Definitions of cairo stuff. * jni/gtk-peer/gdkfont.h: Include gtkcairopeer.h. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Include gtkcairopeer.h. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c: Un-include gtkpeer.h. From-SVN: r75260
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -92,6 +92,9 @@ public class GtkContainerPeer extends GtkComponentPeer
|
||||
|
||||
public Graphics getGraphics ()
|
||||
{
|
||||
if (GtkToolkit.useGraphics2D ())
|
||||
return new GdkGraphics2D (this);
|
||||
else
|
||||
return new GdkGraphics (this);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user