diff options
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/java/awt/peer/GLightweightPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkButtonPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkCanvasPeer.java | 3 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkCheckboxPeer.java | 29 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkChoicePeer.java | 6 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkComponentPeer.java | 47 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkContainerPeer.java | 8 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFileDialogPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFontPeer.java | 111 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFramePeer.java | 9 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkListPeer.java | 43 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkPanelPeer.java | 3 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkScrollPanePeer.java | 31 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkScrollbarPeer.java | 3 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkTextComponentPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkToolkit.java | 83 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkWindowPeer.java | 3 |
17 files changed, 342 insertions, 45 deletions
diff --git a/gnu/java/awt/peer/GLightweightPeer.java b/gnu/java/awt/peer/GLightweightPeer.java index 5c0ea498e..dfd9e1e26 100644 --- a/gnu/java/awt/peer/GLightweightPeer.java +++ b/gnu/java/awt/peer/GLightweightPeer.java @@ -239,7 +239,7 @@ public class GLightweightPeer public void setBackground(Color color) {} - public void setBounds(int x, int y, int width, int height) { } + public void setBounds(int x, int y, int width, int height) {} public void setCursor(Cursor cursor) {} diff --git a/gnu/java/awt/peer/gtk/GtkButtonPeer.java b/gnu/java/awt/peer/gtk/GtkButtonPeer.java index 0801f9c6e..9a832265b 100644 --- a/gnu/java/awt/peer/gtk/GtkButtonPeer.java +++ b/gnu/java/awt/peer/gtk/GtkButtonPeer.java @@ -50,6 +50,8 @@ public class GtkButtonPeer extends GtkComponentPeer implements ButtonPeer { native void create (); + public native void connectJObject (); + public native void connectSignals (); native void gtkSetFont(String name, int style, int size); native void gtkWidgetSetForeground (int red, int green, int blue); diff --git a/gnu/java/awt/peer/gtk/GtkCanvasPeer.java b/gnu/java/awt/peer/gtk/GtkCanvasPeer.java index d5378dc77..1a0c4c968 100644 --- a/gnu/java/awt/peer/gtk/GtkCanvasPeer.java +++ b/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/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java b/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java index 67469c931..fba8c8ff8 100644 --- a/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java +++ b/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java @@ -1,5 +1,5 @@ /* GtkCheckboxPeer.java -- Implements CheckboxPeer with GTK - Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -48,10 +48,13 @@ public class GtkCheckboxPeer extends GtkComponentPeer { // Group from last time it was set. public GtkCheckboxGroupPeer old_group; + // The current state of the GTK checkbox. + private boolean currentState; - public native void nativeCreate (GtkCheckboxGroupPeer group); + public native void nativeCreate (GtkCheckboxGroupPeer group, + boolean state); public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group); - public native void connectHooks (); + public native void connectSignals (); public GtkCheckboxPeer (Checkbox c) { @@ -66,12 +69,14 @@ public class GtkCheckboxPeer extends GtkComponentPeer { CheckboxGroup g = ((Checkbox) awtComponent).getCheckboxGroup (); old_group = GtkCheckboxGroupPeer.getCheckboxGroupPeer (g); - nativeCreate (old_group); + currentState = ((Checkbox)awtComponent).getState(); + nativeCreate (old_group, currentState); } public void setState (boolean state) { - set ("active", state); + if (currentState != state) + set ("active", state); } public void setLabel (String label) @@ -103,7 +108,19 @@ public class GtkCheckboxPeer extends GtkComponentPeer // need information that we have. public void postItemEvent (Object item, int stateChange) { - super.postItemEvent (awtComponent, stateChange); + Checkbox currentCheckBox = ((Checkbox)awtComponent); + // A firing of the event is only desired if the state has changed due to a + // button press. The currentCheckBox's state must be different from the + // one that the stateChange is changing to. + // stateChange = 1 if it goes from false -> true + // stateChange = 2 if it goes from true -> false + if (( !currentCheckBox.getState() && stateChange == 1) + || (currentCheckBox.getState() && stateChange == 2)) + { + super.postItemEvent (awtComponent, stateChange); + currentState = !currentCheckBox.getState(); + currentCheckBox.setState(currentState); + } } public void dispose () diff --git a/gnu/java/awt/peer/gtk/GtkChoicePeer.java b/gnu/java/awt/peer/gtk/GtkChoicePeer.java index c4398e504..7e5579b3b 100644 --- a/gnu/java/awt/peer/gtk/GtkChoicePeer.java +++ b/gnu/java/awt/peer/gtk/GtkChoicePeer.java @@ -84,10 +84,10 @@ public class GtkChoicePeer extends GtkComponentPeer } */ - protected void postItemEvent (Object item, int stateChange) + protected void choicePostItemEvent (String label, int stateChange) { if (stateChange == ItemEvent.SELECTED) - ((Choice) awtComponent).select ((String) item); - super.postItemEvent (item, stateChange); + ((Choice) awtComponent).select (label); + super.postItemEvent (label, stateChange); } } diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java index 80feebdca..0a712a059 100644 --- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/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; @@ -83,8 +84,9 @@ public class GtkComponentPeer extends GtkGenericPeer native int[] gtkWidgetGetForeground (); native int[] gtkWidgetGetBackground (); native void gtkWidgetSetVisible (boolean b); - native void gtkWidgetGetDimensions(int[] dim); - native void gtkWidgetGetLocationOnScreen(int[] point); + native void gtkWidgetGetDimensions (int[] dim); + native void gtkWidgetGetPreferredDimensions (int[] dim); + native void gtkWidgetGetLocationOnScreen (int[] point); native void gtkWidgetSetCursor (int type); native void gtkWidgetSetBackground (int red, int green, int blue); native void gtkWidgetSetForeground (int red, int green, int blue); @@ -99,7 +101,8 @@ public class GtkComponentPeer extends GtkGenericPeer insets = new Insets (0, 0, 0, 0); } - native void connectHooks (); + native void connectJObject (); + native void connectSignals (); protected GtkComponentPeer (Component awtComponent) { @@ -114,7 +117,8 @@ public class GtkComponentPeer extends GtkGenericPeer getArgs (awtComponent, args); args.setArgs (this); - connectHooks (); + connectJObject (); + connectSignals (); if (awtComponent.getForeground () != null) setForeground (awtComponent.getForeground ()); @@ -146,7 +150,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); } @@ -184,18 +197,12 @@ public class GtkComponentPeer extends GtkGenericPeer public Dimension getMinimumSize () { - int dim[]=new int[2]; - gtkWidgetGetDimensions (dim); - Dimension d = new Dimension (dim[0],dim[1]); - return (d); + return minimumSize (); } public Dimension getPreferredSize () { - int dim[]=new int[2]; - gtkWidgetGetDimensions (dim); - Dimension d = new Dimension (dim[0],dim[1]); - return (d); + return preferredSize (); } public Toolkit getToolkit () @@ -214,7 +221,11 @@ public class GtkComponentPeer extends GtkGenericPeer public Dimension minimumSize () { - return getMinimumSize(); + int dim[] = new int[2]; + + gtkWidgetGetPreferredDimensions (dim); + + return new Dimension (dim[0], dim[1]); } public void paint (Graphics g) @@ -222,9 +233,13 @@ public class GtkComponentPeer extends GtkGenericPeer awtComponent.paint (g); } - public Dimension preferredSize() + public Dimension preferredSize () { - return getPreferredSize(); + int dim[] = new int[2]; + + gtkWidgetGetPreferredDimensions (dim); + + return new Dimension (dim[0], dim[1]); } public boolean prepareImage (Image image, int width, int height, diff --git a/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/gnu/java/awt/peer/gtk/GtkContainerPeer.java index 5225ccc5f..e51b7f098 100644 --- a/gnu/java/awt/peer/gtk/GtkContainerPeer.java +++ b/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); } @@ -107,6 +110,11 @@ public class GtkContainerPeer extends GtkComponentPeer try { Graphics g = getGraphics (); + + // Some peers like GtkFileDialogPeer are repainted by Gtk itself + if (g == null) + break; + g.setClip (((PaintEvent)event).getUpdateRect()); if (id == PaintEvent.PAINT) diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java index 64e73c68a..07422ace7 100644 --- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java +++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java @@ -58,7 +58,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer } public native void setFile (String file); - public native void connectHooks (); + public native void connectJObject (); public void setFilenameFilter (FilenameFilter filter) { diff --git a/gnu/java/awt/peer/gtk/GtkFontPeer.java b/gnu/java/awt/peer/gtk/GtkFontPeer.java index d3130a905..8c1ec8fed 100644 --- a/gnu/java/awt/peer/gtk/GtkFontPeer.java +++ b/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/gnu/java/awt/peer/gtk/GtkFramePeer.java b/gnu/java/awt/peer/gtk/GtkFramePeer.java index ce5aa71e5..13d2fc77a 100644 --- a/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/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/gnu/java/awt/peer/gtk/GtkListPeer.java b/gnu/java/awt/peer/gtk/GtkListPeer.java index 2ba183b09..ac2c36149 100644 --- a/gnu/java/awt/peer/gtk/GtkListPeer.java +++ b/gnu/java/awt/peer/gtk/GtkListPeer.java @@ -38,8 +38,11 @@ exception statement from your version. */ package gnu.java.awt.peer.gtk; +import java.awt.AWTEvent; import java.awt.Dimension; import java.awt.List; +import java.awt.event.MouseEvent; +import java.awt.event.KeyEvent; import java.awt.peer.ListPeer; public class GtkListPeer extends GtkComponentPeer @@ -48,7 +51,8 @@ public class GtkListPeer extends GtkComponentPeer // native void create (ComponentPeer parent, String [] items, boolean mode); native void create (); - native void connectHooks (); + native void connectJObject (); + native void connectSignals (); native void getSize (int rows, int dims[]); @@ -121,6 +125,43 @@ public class GtkListPeer extends GtkComponentPeer setMultipleMode (b); } + public void handleEvent (AWTEvent e) + { + if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()) + { + /* Only generate the ActionEvent on the second click of + a multiple click */ + MouseEvent me = (MouseEvent) e; + if (!me.isConsumed () + && (me.getModifiers () & MouseEvent.BUTTON1_MASK) != 0 + && me.getClickCount() == 2) + { + String selectedItem = ((List)awtComponent).getSelectedItem (); + + /* Double-click only generates an Action event + if something is selected */ + if (selectedItem != null) + postActionEvent (((List)awtComponent).getSelectedItem (), + me.getModifiers ()); + } + } + + if (e.getID () == KeyEvent.KEY_PRESSED) + { + KeyEvent ke = (KeyEvent) e; + if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_ENTER) + { + String selectedItem = ((List)awtComponent).getSelectedItem (); + + /* Enter only generates an Action event if something is selected */ + if (selectedItem != null) + postActionEvent (selectedItem, ke.getModifiers ()); + } + } + + super.handleEvent (e); + } + protected void postItemEvent (int item, int stateChange) { postItemEvent (new Integer (item), stateChange); diff --git a/gnu/java/awt/peer/gtk/GtkPanelPeer.java b/gnu/java/awt/peer/gtk/GtkPanelPeer.java index cf7a9e1ba..4f7799493 100644 --- a/gnu/java/awt/peer/gtk/GtkPanelPeer.java +++ b/gnu/java/awt/peer/gtk/GtkPanelPeer.java @@ -45,7 +45,8 @@ public class GtkPanelPeer extends GtkContainerPeer implements PanelPeer { native void create (); - native void connectHooks (); + native void connectJObject (); + native void connectSignals (); public GtkPanelPeer (Panel p) { diff --git a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java index cd2c112c2..e4f5e8f31 100644 --- a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java +++ b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java @@ -46,15 +46,17 @@ import java.awt.peer.ScrollPanePeer; public class GtkScrollPanePeer extends GtkContainerPeer implements ScrollPanePeer { - native void create (); + native void create (int width, int height); + + void create () + { + create (awtComponent.getWidth (), awtComponent.getHeight ()); + } - native void gtkScrolledWindowNew(ComponentPeer parent, - int policy, int w, int h, int[] dims); native void gtkScrolledWindowSetScrollPosition(int x, int y); native void gtkScrolledWindowSetHScrollIncrement (int u); native void gtkScrolledWindowSetVScrollIncrement (int u); - native void gtkScrolledWindowSetSize(int w, int h); - + public GtkScrollPanePeer (ScrollPane sp) { super (sp); @@ -63,7 +65,24 @@ public class GtkScrollPanePeer extends GtkContainerPeer } native void setPolicy (int policy); - native public void childResized (int width, int height); + public void childResized (int width, int height) + { + int dim[] = new int[2]; + + gtkWidgetGetDimensions (dim); + + // If the child is in this range, GTK adds both scrollbars, but + // the AWT doesn't. So set the peer's scroll policy to + // GTK_POLICY_NEVER. + if ((width > dim[0] - getVScrollbarWidth () + && width <= dim[0]) + && (height > dim[1] - getHScrollbarHeight () + && height <= dim[1])) + setPolicy (ScrollPane.SCROLLBARS_NEVER); + else + setPolicy (((ScrollPane) awtComponent).getScrollbarDisplayPolicy ()); + } + native public int getHScrollbarHeight (); native public int getVScrollbarWidth (); native public void setScrollPosition (int x, int y); diff --git a/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java b/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java index d13e34edf..0e1b65137 100644 --- a/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java +++ b/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java @@ -60,7 +60,8 @@ public class GtkScrollbarPeer extends GtkComponentPeer int min, int max, int stepIncr, int pageIncr, int visibleAmount); - native void connectHooks (); + native void connectJObject (); + native void connectSignals (); public GtkScrollbarPeer (Scrollbar s) { diff --git a/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java b/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java index b3199d87c..8bc4bdf3e 100644 --- a/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java +++ b/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java @@ -56,7 +56,7 @@ public class GtkTextComponentPeer extends GtkComponentPeer setText (tc.getText ()); } - public native void connectHooks (); + public native void connectSignals (); public native int getCaretPosition (); public native void setCaretPosition (int pos); diff --git a/gnu/java/awt/peer/gtk/GtkToolkit.java b/gnu/java/awt/peer/gtk/GtkToolkit.java index ec934bd71..07445075c 100644 --- a/gnu/java/awt/peer/gtk/GtkToolkit.java +++ b/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; @@ -52,6 +53,8 @@ import java.util.Hashtable; import java.util.Map; import java.util.MissingResourceException; import java.util.Properties; +import gnu.java.awt.peer.ClasspathFontPeer; +import gnu.java.awt.peer.ClasspathFontPeer; import gnu.classpath.Configuration; import gnu.java.awt.peer.gtk.GdkPixbufDecoder; @@ -62,14 +65,35 @@ 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 { GtkMainThread main; Hashtable containers = new Hashtable(); static EventQueue q = new EventQueue(); static Clipboard systemClipboard; - static + 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) System.loadLibrary("gtkpeer"); @@ -131,7 +155,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) @@ -313,6 +340,10 @@ public class GtkToolkit extends Toolkit return new GtkWindowPeer (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 { @@ -323,6 +354,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; @@ -341,4 +404,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 diff --git a/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/gnu/java/awt/peer/gtk/GtkWindowPeer.java index 821afa929..4a2d50805 100644 --- a/gnu/java/awt/peer/gtk/GtkWindowPeer.java +++ b/gnu/java/awt/peer/gtk/GtkWindowPeer.java @@ -93,7 +93,8 @@ public class GtkWindowPeer extends GtkContainerPeer create (GDK_WINDOW_TYPE_HINT_NORMAL, false); } - native void connectHooks (); + native void connectJObject (); + native void connectSignals (); public GtkWindowPeer (Window window) { |