diff options
Diffstat (limited to 'libjava/gnu/java/awt/peer/gtk/GtkToolkit.java')
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkToolkit.java | 97 |
1 files changed, 70 insertions, 27 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java index def22e9874e..58987ee2a22 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java @@ -1,5 +1,5 @@ /* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers - Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,14 +44,12 @@ import gnu.java.awt.EmbeddedWindowSupport; import gnu.java.awt.peer.ClasspathFontPeer; import gnu.java.awt.peer.ClasspathTextLayoutPeer; import gnu.java.awt.peer.EmbeddedWindowPeer; -import gnu.java.awt.peer.gtk.GdkPixbufDecoder; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.font.FontRenderContext; -import java.awt.font.TextAttribute; import java.awt.im.InputMethodHighlight; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; @@ -59,16 +57,19 @@ import java.awt.image.ImageConsumer; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; import java.awt.peer.*; +import java.io.InputStream; import java.net.URL; import java.text.AttributedString; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.MissingResourceException; import java.util.Properties; +import javax.imageio.spi.IIORegistry; + /* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer(). This merits comment. We are basically calling Sun's bluff on this one. We think Sun has deprecated it simply to discourage its use as it is @@ -86,9 +87,8 @@ import java.util.Properties; public class GtkToolkit extends gnu.java.awt.ClasspathToolkit implements EmbeddedWindowSupport { - GtkMainThread main; Hashtable containers = new Hashtable(); - static EventQueue q = new EventQueue(); + static EventQueue q; static Clipboard systemClipboard; static boolean useGraphics2dSet; static boolean useGraphics2d; @@ -103,21 +103,34 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit return useGraphics2d; } + static native void gtkInit(int portableNativeSync); + static { if (Configuration.INIT_LOAD_LIBRARY) System.loadLibrary("gtkpeer"); + + int portableNativeSync; + String portNatSyncProp = + System.getProperty("gnu.classpath.awt.gtk.portable.native.sync"); + + if (portNatSyncProp == null) + portableNativeSync = -1; // unset + else if (Boolean.valueOf(portNatSyncProp).booleanValue()) + portableNativeSync = 1; // true + else + portableNativeSync = 0; // false + + gtkInit(portableNativeSync); } public GtkToolkit () { - main = new GtkMainThread (); systemClipboard = new GtkClipboard (); - GtkGenericPeer.enableQueue (q); } - - native public void beep (); - native private void getScreenSizeDimensions (int[] xy); + + public native void beep(); + private native void getScreenSizeDimensions(int[] xy); public int checkImage (Image image, int width, int height, ImageObserver observer) @@ -313,7 +326,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit "SansSerif" }); } - private class LRUCache extends java.util.LinkedHashMap + private class LRUCache extends LinkedHashMap { int max_entries; public LRUCache(int max) @@ -333,15 +346,18 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit public FontMetrics getFontMetrics (Font font) { - if (metricsCache.containsKey(font)) - return (FontMetrics) metricsCache.get(font); - else + synchronized (metricsCache) + { + if (metricsCache.containsKey(font)) + return (FontMetrics) metricsCache.get(font); + } + + FontMetrics m = new GdkFontMetrics (font); + synchronized (metricsCache) { - FontMetrics m; - m = new GdkFontMetrics (font); metricsCache.put(font, m); - return m; - } + } + return m; } public Image getImage (String filename) @@ -373,9 +389,10 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit return null; } - native public int getScreenResolution(); + public native int getScreenResolution(); - public Dimension getScreenSize () { + public Dimension getScreenSize () + { int dim[] = new int[2]; getScreenSizeDimensions(dim); return new Dimension(dim[0], dim[1]); @@ -414,7 +431,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit return false; } - native public void sync (); + public native void sync(); protected void setComponentState (Component c, GtkComponentPeer cp) { @@ -594,6 +611,14 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit protected EventQueue getSystemEventQueueImpl() { + synchronized (GtkToolkit.class) + { + if (q == null) + { + q = new EventQueue(); + GtkGenericPeer.enableQueue (q); + } + } return q; } @@ -609,19 +634,37 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit throw new Error("not implemented"); } + public Rectangle getBounds() + { + int[] dims = new int[2]; + getScreenSizeDimensions(dims); + return new Rectangle(0, 0, dims[0], dims[1]); + } + // ClasspathToolkit methods public GraphicsEnvironment getLocalGraphicsEnvironment() { - GraphicsEnvironment ge; - ge = new GdkGraphicsEnvironment (); - return ge; + return new GdkGraphicsEnvironment(this); + } + + public Font createFont(int format, InputStream stream) + { + throw new UnsupportedOperationException(); + } + + public RobotPeer createRobot (GraphicsDevice screen) throws AWTException + { + return new GdkRobotPeer (screen); } - public Font createFont(int format, java.io.InputStream stream) + public void registerImageIOSpis(IIORegistry reg) { - throw new java.lang.UnsupportedOperationException (); + GdkPixbufDecoder.registerSpis(reg); } + public native boolean nativeQueueEmpty(); + public native void wakeNativeQueue(); + public native void iterateNativeQueue(EventQueue locked, boolean block); } // class GtkToolkit |