aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r--libjava/gnu/java/awt/ClasspathToolkit.java17
-rw-r--r--libjava/gnu/java/awt/EmbeddedWindow.java1
-rw-r--r--libjava/gnu/java/awt/color/ClutProfileConverter.java1
-rw-r--r--libjava/gnu/java/awt/image/ImageDecoder.java42
-rw-r--r--libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java7
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java5
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java15
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java48
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java243
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphics.java41
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java1626
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java138
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java28
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java524
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java94
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java (renamed from libjava/gnu/java/awt/peer/gtk/GtkArgList.java)47
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java15
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java1
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java18
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java5
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkClipboard.java8
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java22
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java4
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java13
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java5
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java11
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java8
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java6
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMainThread.java111
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java4
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java10
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java6
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java9
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java10
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java5
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkToolkit.java97
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java64
-rw-r--r--libjava/gnu/java/beans/DummyAppletContext.java200
-rw-r--r--libjava/gnu/java/beans/DummyAppletStub.java (renamed from libjava/gnu/java/beans/EmptyBeanInfo.java)109
-rw-r--r--libjava/gnu/java/beans/IntrospectionIncubator.java3
-rw-r--r--libjava/gnu/java/beans/info/ComponentBeanInfo.java75
-rw-r--r--libjava/gnu/java/io/Base64InputStream.java28
-rw-r--r--libjava/gnu/java/lang/MainThread.java5
-rw-r--r--libjava/gnu/java/locale/LocaleInformation_en.java2
-rw-r--r--libjava/gnu/java/net/CRLFInputStream.java205
-rw-r--r--libjava/gnu/java/net/CRLFOutputStream.java183
-rw-r--r--libjava/gnu/java/net/GetLocalHostAction.java (renamed from libjava/gnu/java/awt/peer/gtk/GtkArg.java)46
-rw-r--r--libjava/gnu/java/net/PlainSocketImpl.java14
-rw-r--r--libjava/gnu/java/net/natPlainSocketImplPosix.cc5
-rw-r--r--libjava/gnu/java/net/natPlainSocketImplWin32.cc5
-rw-r--r--libjava/gnu/java/net/protocol/http/Cookie.java1
-rw-r--r--libjava/gnu/java/net/protocol/http/HTTPConnection.java2
-rw-r--r--libjava/gnu/java/net/protocol/http/HTTPDateFormat.java12
-rw-r--r--libjava/gnu/java/net/protocol/http/Request.java1
-rw-r--r--libjava/gnu/java/nio/ChannelReader.java211
-rw-r--r--libjava/gnu/java/nio/PipeImpl.java7
-rw-r--r--libjava/gnu/java/nio/SelectorImpl.java24
-rw-r--r--libjava/gnu/java/nio/channels/FileChannelImpl.java103
-rw-r--r--libjava/gnu/java/nio/charset/UTF_8.java4
-rw-r--r--libjava/gnu/java/rmi/dgc/DGCImpl.java1
-rw-r--r--libjava/gnu/java/rmi/registry/RegistryImpl.java5
-rw-r--r--libjava/gnu/java/rmi/rmic/RMIC.java4
-rw-r--r--libjava/gnu/java/rmi/server/ConnectionRunnerPool.java4
-rw-r--r--libjava/gnu/java/rmi/server/UnicastConnectionManager.java1
-rw-r--r--libjava/gnu/java/security/PolicyFile.java16
-rw-r--r--libjava/gnu/java/security/der/DERReader.java46
-rw-r--r--libjava/gnu/java/security/der/DERWriter.java3
-rw-r--r--libjava/gnu/java/security/provider/EncodedKeyFactory.java14
-rw-r--r--libjava/gnu/java/security/provider/Gnu.java3
-rw-r--r--libjava/gnu/java/security/provider/GnuDHPublicKey.java1
-rw-r--r--libjava/gnu/java/security/provider/GnuDSAPrivateKey.java73
-rw-r--r--libjava/gnu/java/security/provider/GnuDSAPublicKey.java63
-rw-r--r--libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java37
-rw-r--r--libjava/gnu/java/security/x509/X500DistinguishedName.java1
-rw-r--r--libjava/gnu/java/security/x509/X509CRL.java1
-rw-r--r--libjava/gnu/java/security/x509/X509CRLEntry.java1
-rw-r--r--libjava/gnu/java/security/x509/X509Certificate.java5
-rw-r--r--libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java1
-rw-r--r--libjava/gnu/java/security/x509/ext/CertificatePolicies.java1
-rw-r--r--libjava/gnu/java/security/x509/ext/PolicyConstraint.java2
-rw-r--r--libjava/gnu/java/text/FormatCharacterIterator.java6
84 files changed, 3205 insertions, 1644 deletions
diff --git a/libjava/gnu/java/awt/ClasspathToolkit.java b/libjava/gnu/java/awt/ClasspathToolkit.java
index de97c4a0edf..72302e11c30 100644
--- a/libjava/gnu/java/awt/ClasspathToolkit.java
+++ b/libjava/gnu/java/awt/ClasspathToolkit.java
@@ -41,16 +41,20 @@ package gnu.java.awt;
import gnu.java.awt.peer.ClasspathFontPeer;
import gnu.java.awt.peer.ClasspathTextLayoutPeer;
-import java.awt.Image;
+import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.DisplayMode;
+import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
+import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
+import java.awt.Image;
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.image.ColorModel;
import java.awt.image.ImageProducer;
+import java.awt.peer.RobotPeer;
import java.io.File;
import java.io.InputStream;
import java.net.MalformedURLException;
@@ -90,7 +94,7 @@ public abstract class ClasspathToolkit
* #getImage(java.net.URL)}. For images that were loaded via a path
* to an image file, the map contains a key with a file URL.
*/
- private Map imageCache;
+ private HashMap imageCache;
/**
@@ -169,7 +173,6 @@ public abstract class ClasspathToolkit
* this font peer should have, such as size, weight, family name, or
* transformation.
*/
-
public abstract ClasspathFontPeer getClasspathFontPeer (String name, Map attrs);
public abstract ClasspathTextLayoutPeer
@@ -184,7 +187,6 @@ public abstract class ClasspathToolkit
* implement {@link java.awt.font.OpenType} or
* {@link java.awt.font.MultipleMaster}.
*/
-
public Font getFont (String name, Map attrs)
{
return new Font (name, attrs);
@@ -350,6 +352,9 @@ public abstract class ClasspathToolkit
return null;
}
+ public abstract RobotPeer createRobot (GraphicsDevice screen)
+ throws AWTException;
+
/**
* Used to register ImageIO SPIs provided by the toolkit.
*/
@@ -357,4 +362,8 @@ public abstract class ClasspathToolkit
public void registerImageIOSpis(IIORegistry reg)
{
}
+
+ public abstract boolean nativeQueueEmpty();
+ public abstract void wakeNativeQueue();
+ public abstract void iterateNativeQueue(EventQueue locked, boolean block);
}
diff --git a/libjava/gnu/java/awt/EmbeddedWindow.java b/libjava/gnu/java/awt/EmbeddedWindow.java
index 08bc02755ea..c3cfac48b19 100644
--- a/libjava/gnu/java/awt/EmbeddedWindow.java
+++ b/libjava/gnu/java/awt/EmbeddedWindow.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt;
-import gnu.classpath.Configuration;
import gnu.java.awt.peer.EmbeddedWindowPeer;
import gnu.java.security.action.SetAccessibleAction;
diff --git a/libjava/gnu/java/awt/color/ClutProfileConverter.java b/libjava/gnu/java/awt/color/ClutProfileConverter.java
index d33a6887eec..5b06f48eed8 100644
--- a/libjava/gnu/java/awt/color/ClutProfileConverter.java
+++ b/libjava/gnu/java/awt/color/ClutProfileConverter.java
@@ -38,7 +38,6 @@
package gnu.java.awt.color;
-import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
diff --git a/libjava/gnu/java/awt/image/ImageDecoder.java b/libjava/gnu/java/awt/image/ImageDecoder.java
index 233dfb1b28d..d279d567467 100644
--- a/libjava/gnu/java/awt/image/ImageDecoder.java
+++ b/libjava/gnu/java/awt/image/ImageDecoder.java
@@ -74,6 +74,11 @@ public abstract class ImageDecoder implements ImageProducer
this.url = url;
}
+ public ImageDecoder (InputStream is)
+ {
+ this.input = is;
+ }
+
public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
data = imagedata;
@@ -99,7 +104,7 @@ public abstract class ImageDecoder implements ImageProducer
public void startProduction (ImageConsumer ic)
{
if (!isConsumer(ic))
- addConsumer (ic);
+ addConsumer(ic);
Vector list = (Vector) consumers.clone ();
try
@@ -108,17 +113,30 @@ public abstract class ImageDecoder implements ImageProducer
// ImageDecoder constructors so that exceptions cause
// imageComplete to be called with an appropriate error
// status.
- if (url != null)
- input = url.openStream();
- else
- {
- if (filename != null)
- input = new FileInputStream (filename);
- else
- input = new ByteArrayInputStream (data, offset, length);
- }
-
- produce (list, input);
+ if (input == null)
+ {
+ try
+ {
+ if (url != null)
+ input = url.openStream();
+ else
+ {
+ if (filename != null)
+ input = new FileInputStream (filename);
+ else
+ input = new ByteArrayInputStream (data, offset, length);
+ }
+ produce (list, input);
+ }
+ finally
+ {
+ input = null;
+ }
+ }
+ else
+ {
+ produce (list, input);
+ }
}
catch (Exception e)
{
diff --git a/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java b/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
index 143412caf99..07b4b3eb403 100644
--- a/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
+++ b/libjava/gnu/java/awt/peer/ClasspathTextLayoutPeer.java
@@ -38,19 +38,12 @@ exception statement from your version. */
package gnu.java.awt.peer;
-import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
-import java.text.CharacterIterator;
-import java.text.AttributedCharacterIterator;
-import java.text.AttributedString;
-import java.util.Map;
-import java.awt.font.TextAttribute;
-
/**
* @author Graydon Hoare
diff --git a/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java b/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
index a4cb35a4fff..753c7cd46f1 100644
--- a/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
+++ b/libjava/gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java
@@ -3,7 +3,7 @@
--portable-native-sync option.
This is used by gthread-jni.c
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,10 +40,11 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.awt.peer.gtk;
+
import java.lang.ref.WeakReference;
-import java.util.Set;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Set;
/** Implements pthread_create(), under glib's gthread abstraction, for use
with GNU Classpath's --portable-native-sync option. This is used in
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java b/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
index 3cd2f9a1cd2..e871587a4a9 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkFontMetrics.java
@@ -63,8 +63,6 @@ public class GdkFontMetrics extends FontMetrics
static final int TEXT_METRICS_X_ADVANCE = 4;
static final int TEXT_METRICS_Y_ADVANCE = 5;
- static native void getPeerFontMetrics(GdkFontPeer peer, double [] metrics);
- static native void getPeerTextMetrics(GdkFontPeer peer, String str, double [] metrics);
public GdkFontMetrics (Font font)
{
@@ -77,12 +75,7 @@ public class GdkFontMetrics extends FontMetrics
font_metrics = new int[5];
double [] hires = new double[5];
-
- if (GtkToolkit.useGraphics2D ())
- GdkGraphics2D.getPeerFontMetrics(peer, hires);
- else
- getPeerFontMetrics (peer, hires);
-
+ peer.getFontMetrics (hires);
for (int i = 0; i < 5; ++i)
font_metrics[i] = (int) hires[i];
}
@@ -90,10 +83,7 @@ public class GdkFontMetrics extends FontMetrics
public int stringWidth (String str)
{
double [] hires = new double[6];
- if (GtkToolkit.useGraphics2D())
- GdkGraphics2D.getPeerTextMetrics(peer, str, hires);
- else
- getPeerTextMetrics(peer, str, hires);
+ peer.getTextMetrics(str, hires);
return (int) hires [TEXT_METRICS_WIDTH];
}
@@ -115,7 +105,6 @@ public class GdkFontMetrics extends FontMetrics
public int getLeading ()
{
return 1;
-// return metrics[ASCENT] + metrics[DESCENT];
}
public int getAscent ()
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java b/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
index ee051451026..d130c117560 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkFontPeer.java
@@ -1,5 +1,5 @@
/* GdkFontPeer.java -- Implements FontPeer with GTK+
- Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,24 +37,25 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.peer.FontPeer;
-import java.awt.*;
-import java.awt.geom.*;
-import java.awt.font.*;
+
+import gnu.classpath.Configuration;
+import gnu.java.awt.peer.ClasspathFontPeer;
+
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.font.LineMetrics;
+import java.awt.geom.Rectangle2D;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.MissingResourceException;
-import java.text.CharacterIterator;
-import java.text.AttributedCharacterIterator;
-import java.text.StringCharacterIterator;
-import gnu.classpath.Configuration;
-import gnu.java.awt.peer.ClasspathFontPeer;
public class GdkFontPeer extends ClasspathFontPeer
{
-
- native static void initStaticState ();
+ static native void initStaticState();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
private static ResourceBundle bundle;
@@ -81,6 +82,9 @@ public class GdkFontPeer extends ClasspathFontPeer
private native void dispose ();
private native void setFont (String family, int style, int size, boolean useGraphics2D);
+ native void getFontMetrics(double [] metrics);
+ native void getTextMetrics(String str, double [] metrics);
+
protected void finalize ()
{
if (GtkToolkit.useGraphics2D ())
@@ -158,26 +162,33 @@ public class GdkFontPeer extends ClasspathFontPeer
public boolean canDisplay (Font font, char c)
{
- throw new UnsupportedOperationException ();
+ // FIXME: inquire with pango
+ return true;
}
public int canDisplayUpTo (Font font, CharacterIterator i, int start, int limit)
{
- throw new UnsupportedOperationException ();
+ // FIXME: inquire with pango
+ return -1;
}
+
+ private native GdkGlyphVector getGlyphVector(String txt,
+ Font f,
+ FontRenderContext ctx);
public GlyphVector createGlyphVector (Font font,
FontRenderContext ctx,
CharacterIterator i)
{
- return new GdkGlyphVector(font, this, ctx, buildString (i));
+ return getGlyphVector(buildString (i), font, ctx);
}
public GlyphVector createGlyphVector (Font font,
FontRenderContext ctx,
int[] glyphCodes)
{
- return new GdkGlyphVector (font, this, ctx, glyphCodes);
+ return null;
+ // return new GdkGlyphVector (font, this, ctx, glyphCodes);
}
public byte getBaselineFor (Font font, char c)
@@ -259,7 +270,8 @@ public class GdkFontPeer extends ClasspathFontPeer
public Rectangle2D getStringBounds (Font font, CharacterIterator ci,
int begin, int limit, FontRenderContext frc)
{
- throw new UnsupportedOperationException ();
+ GdkGlyphVector gv = getGlyphVector(buildString (ci, begin, limit), font, frc);
+ return gv.getVisualBounds();
}
public boolean hasUniformLineMetrics (Font font)
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java b/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
index c37de5274ac..29d38b5e3f4 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGlyphVector.java
@@ -1,5 +1,5 @@
/* GdkGlyphVector.java -- Glyph vector object
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,15 +38,13 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import gnu.classpath.Configuration;
-
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphJustificationInfo;
import java.awt.font.GlyphMetrics;
import java.awt.font.GlyphVector;
-import java.awt.font.GlyphJustificationInfo;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
@@ -54,36 +52,57 @@ import java.awt.geom.Rectangle2D;
public class GdkGlyphVector extends GlyphVector
{
- static
+ /* We use a simple representation for glyph vectors here. Glyph i
+ * consumes 8 doubles:
+ *
+ * logical x: extents[ 10*i ]
+ * logical y: extents[ 10*i + 1 ]
+ * logical width: extents[ 10*i + 2 ]
+ * logical height: extents[ 10*i + 3 ]
+ *
+ * visual x: extents[ 10*i + 4 ]
+ * visual y: extents[ 10*i + 5 ]
+ * visual width: extents[ 10*i + 6 ]
+ * visual height: extents[ 10*i + 7 ]
+ *
+ * origin pos x: extents[ 10*i + 8 ]
+ * origin pos y: extents[ 10*i + 9 ]
+ *
+ * as well as one int, code[i], representing the glyph code in the font.
+ */
+
+ double [] extents;
+ int [] codes;
+
+ Font font;
+ FontRenderContext fontRenderContext;
+
+ Rectangle2D allLogical;
+ Rectangle2D allVisual;
+
+ public GdkGlyphVector(double[] extents, int[] codes, Font font, FontRenderContext frc)
{
- if (Configuration.INIT_LOAD_LIBRARY)
+ this.extents = extents;
+ this.codes = codes;
+ this.font = font;
+ this.fontRenderContext = frc;
+
+ allLogical = new Rectangle2D.Double();
+ allVisual = new Rectangle2D.Double();
+
+ for (int i = 0; i < codes.length; ++i)
{
- System.loadLibrary("gtkpeer");
+ allLogical.add (new Rectangle2D.Double(extents[10*i ] + extents[10*i + 8],
+ extents[10*i + 1] + extents[10*i + 9],
+ extents[10*i + 2],
+ extents[10*i + 3]));
+
+ allVisual.add (new Rectangle2D.Double(extents[10*i + 4] + extents[10*i + 8],
+ extents[10*i + 5] + extents[10*i + 9],
+ extents[10*i + 6],
+ extents[10*i + 7]));
}
-
- if (GtkToolkit.useGraphics2D ())
- initStaticState ();
}
- native static void initStaticState ();
- private final int native_state = GtkGenericPeer.getUniqueInteger ();
-
- private Font font;
- private FontRenderContext ctx;
-
- private native void initState (GdkFontPeer peer, FontRenderContext ctx);
- private native void setChars (String s);
- private native void setGlyphCodes (int codes[]);
- private native void dispose ();
- private native int glyphCode (int idx);
- private native int numGlyphs ();
- private native int glyphCharIndex (int idx);
- private native double[] allLogicalExtents ();
- private native double[] allInkExtents ();
- private native double[] glyphLogicalExtents (int idx);
- private native double[] glyphInkExtents (int idx);
- private native boolean glyphIsHorizontal (int idx);
- private native boolean isEqual (GdkGlyphVector ggv);
-
/*
geometric notes:
@@ -108,26 +127,14 @@ public class GdkGlyphVector extends GlyphVector
*/
-
- public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, String s)
- {
- font = f;
- ctx = c;
- initState (peer, ctx);
- setChars (s);
- }
-
- public GdkGlyphVector (Font f, GdkFontPeer peer, FontRenderContext c, int codes[])
+ public double[] getExtents()
{
- font = f;
- ctx = c;
- initState (peer, ctx);
- setGlyphCodes (codes);
+ return extents;
}
- protected void finalize ()
+ public int[] getCodes()
{
- dispose ();
+ return codes;
}
public Font getFont ()
@@ -137,12 +144,15 @@ public class GdkGlyphVector extends GlyphVector
public FontRenderContext getFontRenderContext ()
{
- return ctx;
+ return fontRenderContext;
}
public int getGlyphCharIndex (int glyphIndex)
{
- return glyphCharIndex (glyphIndex);
+ // FIXME: currently pango does not provide glyph-by-glyph
+ // reverse mapping information, so we assume a broken 1:1
+ // glyph model here. This is plainly wrong.
+ return glyphIndex;
}
public int[] getGlyphCharIndices (int beginGlyphIndex,
@@ -154,50 +164,44 @@ public class GdkGlyphVector extends GlyphVector
ix = new int[numEntries];
for (int i = 0; i < numEntries; i++)
- ix[i] = glyphCharIndex (beginGlyphIndex + i);
+ ix[i] = getGlyphCharIndex (beginGlyphIndex + i);
return ix;
}
public int getGlyphCode (int glyphIndex)
{
- return glyphCode (glyphIndex);
+ return codes[glyphIndex];
}
public int[] getGlyphCodes (int beginGlyphIndex, int numEntries,
int[] codeReturn)
{
- int ix[] = codeReturn;
- if (ix == null)
- ix = new int[numEntries];
+ if (codeReturn == null)
+ codeReturn = new int[numEntries];
- for (int i = 0; i < numEntries; i++)
- ix[i] = glyphCode (beginGlyphIndex + i);
- return ix;
+ System.arraycopy(codes, beginGlyphIndex, codeReturn, 0, numEntries);
+ return codeReturn;
}
- public Shape getGlyphLogicalBounds (int glyphIndex)
+ public Shape getGlyphLogicalBounds (int i)
{
- double extents[] = glyphLogicalExtents (glyphIndex);
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return new Rectangle2D.Double (extents[8*i], extents[8*i + 1],
+ extents[8*i + 2], extents[8*i + 3]);
}
- public GlyphMetrics getGlyphMetrics (int glyphIndex)
+ public GlyphMetrics getGlyphMetrics (int i)
{
- double extents[] = glyphLogicalExtents (glyphIndex);
- Rectangle2D log_bounds = new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
-
- extents = glyphInkExtents (glyphIndex);
- Rectangle2D ink_bounds = new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
-
- boolean is_horizontal = glyphIsHorizontal (glyphIndex);
-
- return new GlyphMetrics (is_horizontal,
- (float)(log_bounds.getWidth() + log_bounds.getX()),
- (float)(log_bounds.getHeight() + log_bounds.getY()),
- ink_bounds, GlyphMetrics.STANDARD);
+ // FIXME: pango does not yield vertical layout information at the
+ // moment.
+
+ boolean is_horizontal = true;
+ double advanceX = extents[8*i + 2]; // "logical width" == advanceX
+ double advanceY = 0;
+
+ return new GlyphMetrics (is_horizontal,
+ (float) advanceX, (float) advanceY,
+ (Rectangle2D) getGlyphVisualBounds(i),
+ GlyphMetrics.STANDARD);
}
public Shape getGlyphOutline (int glyphIndex)
@@ -210,20 +214,18 @@ public class GdkGlyphVector extends GlyphVector
throw new UnsupportedOperationException ();
}
- public Rectangle getGlyphPixelBounds (int glyphIndex,
+ public Rectangle getGlyphPixelBounds (int i,
FontRenderContext renderFRC,
float x, float y)
{
- double extents[] = glyphInkExtents(glyphIndex);
- return new Rectangle ((int)x, (int)y, (int)extents[2], (int)extents[3]);
+ return new Rectangle((int) x, (int) y,
+ (int) extents[8*i + 6], (int) extents[8*i + 7]);
}
- public Point2D getGlyphPosition (int glyphIndex)
+ public Point2D getGlyphPosition (int i)
{
- float[] ret = new float[2 * (glyphIndex + 1)];
- getGlyphPositions (0, glyphIndex + 1, ret);
- return new Point2D.Float (ret[2 * glyphIndex],
- ret[2 * glyphIndex + 1]);
+ return new Point2D.Double (extents[10*i + 8],
+ extents[10*i + 9]);
}
public float[] getGlyphPositions (int beginGlyphIndex,
@@ -234,35 +236,25 @@ public class GdkGlyphVector extends GlyphVector
if (fx == null)
fx = new float[numEntries * 2];
-
- float x = 0.0f;
- float y = 0.0f;
for (int i = 0; i < numEntries; ++i)
{
- boolean is_horizontal = glyphIsHorizontal (beginGlyphIndex + i);
- double log_extents[] = glyphLogicalExtents (beginGlyphIndex + i);
- fx[2*i] = x + (float)log_extents[0]; // x offset
- fx[2*i + 1] = y + (float)log_extents[1]; // y offset
- if (is_horizontal)
- x += (float)log_extents[2]; // x advance ("logical width") in pango-ese
- else
- y += (float)log_extents[3]; // y advance ("logical height") in pango-ese
+ fx[2*i ] = (float) extents[10*i + 8];
+ fx[2*i + 1] = (float) extents[10*i + 9];
}
return fx;
}
public AffineTransform getGlyphTransform (int glyphIndex)
{
- // glyphs don't have independent transforms in these simple glyph
+ // Glyphs don't have independent transforms in these simple glyph
// vectors; docs specify null is an ok return here.
return null;
}
- public Shape getGlyphVisualBounds (int glyphIndex)
+ public Shape getGlyphVisualBounds (int i)
{
- double extents[] = glyphInkExtents (glyphIndex);
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return new Rectangle2D.Double(extents[8*i + 4], extents[8*i + 5],
+ extents[8*i + 6], extents[8*i + 7]);
}
public int getLayoutFlags ()
@@ -272,14 +264,12 @@ public class GdkGlyphVector extends GlyphVector
public Rectangle2D getLogicalBounds ()
{
- double extents[] = allLogicalExtents ();
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return allLogical;
}
public int getNumGlyphs ()
{
- return numGlyphs ();
+ return codes.length;
}
public Shape getOutline ()
@@ -290,26 +280,28 @@ public class GdkGlyphVector extends GlyphVector
public Rectangle getPixelBounds (FontRenderContext renderFRC,
float x, float y)
{
- double extents[] = allInkExtents();
- return new Rectangle ((int)x, (int)y,
- (int)extents[2], (int)extents[3]);
+ return new Rectangle((int)x,
+ (int)y,
+ (int) allVisual.getWidth(),
+ (int) allVisual.getHeight());
}
public Rectangle2D getVisualBounds ()
{
- double extents[] = allInkExtents();
- return new Rectangle2D.Double (extents[0], extents[1],
- extents[2], extents[3]);
+ return allVisual;
}
public void performDefaultLayout ()
{
}
- public void setGlyphPosition (int glyphIndex, Point2D newPos)
+ public void setGlyphPosition (int i, Point2D newPos)
{
- // should we be ok twiddling pango's structure here?
- throw new UnsupportedOperationException ();
+ extents[8*i ] = newPos.getX();
+ extents[8*i + 1] = newPos.getY();
+
+ extents[8*i + 4] = newPos.getX();
+ extents[8*i + 5] = newPos.getY();
}
public void setGlyphTransform (int glyphIndex,
@@ -327,8 +319,31 @@ public class GdkGlyphVector extends GlyphVector
if (! (gv instanceof GdkGlyphVector))
return false;
- GdkGlyphVector ggv = (GdkGlyphVector)gv;
- return isEqual(ggv);
+ GdkGlyphVector ggv = (GdkGlyphVector) gv;
+
+ if ((ggv.codes.length != this.codes.length)
+ || (ggv.extents.length != this.extents.length))
+ return false;
+
+ if ((ggv.font == null && this.font != null)
+ || (ggv.font != null && this.font == null)
+ || (!ggv.font.equals(this.font)))
+ return false;
+
+ if ((ggv.fontRenderContext == null && this.fontRenderContext != null)
+ || (ggv.fontRenderContext != null && this.fontRenderContext == null)
+ || (!ggv.fontRenderContext.equals(this.fontRenderContext)))
+ return false;
+
+ for (int i = 0; i < ggv.codes.length; ++i)
+ if (ggv.codes[i] != this.codes[i])
+ return false;
+
+ for (int i = 0; i < ggv.extents.length; ++i)
+ if (ggv.extents[i] != this.extents[i])
+ return false;
+
+ return true;
}
public GlyphJustificationInfo getGlyphJustificationInfo(int idx)
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
index 5aacf5296c6..7361b291c94 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
@@ -1,5 +1,5 @@
/* GdkGraphics.java
- Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -108,7 +108,7 @@ public class GdkGraphics extends Graphics
native void connectSignals (GtkComponentPeer component);
- public native void clearRect (int x, int y, int width, int height);
+ public native void clearRect(int x, int y, int width, int height);
public void clipRect (int x, int y, int width, int height)
{
@@ -119,15 +119,15 @@ public class GdkGraphics extends Graphics
setClipRectangle (clip.x, clip.y, clip.width, clip.height);
}
- native public void copyArea (int x, int y, int width, int height,
- int dx, int dy);
+ public native void copyArea(int x, int y, int width, int height,
+ int dx, int dy);
public Graphics create ()
{
return new GdkGraphics (this);
}
- native public void dispose ();
+ public native void dispose();
native void copyPixmap (Graphics g, int x, int y, int width, int height);
native void copyAndScalePixmap (Graphics g, boolean flip_x, boolean flip_y,
@@ -316,22 +316,22 @@ public class GdkGraphics extends Graphics
SystemColor.window, observer);
}
- native public void drawLine (int x1, int y1, int x2, int y2);
+ public native void drawLine(int x1, int y1, int x2, int y2);
- native public void drawArc (int x, int y, int width, int height,
- int startAngle, int arcAngle);
- native public void fillArc (int x, int y, int width, int height,
- int startAngle, int arcAngle);
- native public void drawOval(int x, int y, int width, int height);
- native public void fillOval(int x, int y, int width, int height);
+ public native void drawArc(int x, int y, int width, int height,
+ int startAngle, int arcAngle);
+ public native void fillArc(int x, int y, int width, int height,
+ int startAngle, int arcAngle);
+ public native void drawOval(int x, int y, int width, int height);
+ public native void fillOval(int x, int y, int width, int height);
- native public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);
- native public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
+ public native void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);
+ public native void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
- native public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);
+ public native void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);
- native public void drawRect(int x, int y, int width, int height);
- native public void fillRect (int x, int y, int width, int height);
+ public native void drawRect(int x, int y, int width, int height);
+ public native void fillRect(int x, int y, int width, int height);
GdkFontPeer getFontPeer()
{
@@ -426,7 +426,8 @@ public class GdkGraphics extends Graphics
public void setClip (int x, int y, int width, int height)
{
- if (component != null && ! component.isRealized ())
+ if ((component != null && ! component.isRealized ())
+ || clip == null)
return;
clip.x = x;
@@ -447,7 +448,7 @@ public class GdkGraphics extends Graphics
setClip (clip.getBounds ());
}
- native private void setFGColor (int red, int green, int blue);
+ private native void setFGColor(int red, int green, int blue);
public void setColor (Color c)
{
@@ -489,7 +490,7 @@ public class GdkGraphics extends Graphics
color.getBlue () ^ xorColor.getBlue ());
}
- native public void translateNative (int x, int y);
+ public native void translateNative(int x, int y);
public void translate (int x, int y)
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
index 82de03d5aec..513c75c094a 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphics2D.java
@@ -1,5 +1,5 @@
-/* GdkGraphics2D.java
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* GdkGraphics2D.java --
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,7 +40,6 @@ package gnu.java.awt.peer.gtk;
import gnu.classpath.Configuration;
import gnu.java.awt.ClasspathToolkit;
-import gnu.java.awt.peer.ClasspathFontPeer;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
@@ -60,17 +59,15 @@ import java.awt.Shape;
import java.awt.Stroke;
import java.awt.TexturePaint;
import java.awt.Toolkit;
-import java.awt.color.ColorSpace;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
-import java.awt.font.GlyphJustificationInfo;
+import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
-import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
@@ -78,16 +75,17 @@ import java.awt.image.ColorModel;
import java.awt.image.CropImageFilter;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
+import java.awt.image.DirectColorModel;
import java.awt.image.FilteredImageSource;
-import java.awt.image.ImageConsumer;
import java.awt.image.ImageObserver;
import java.awt.image.ImagingOpException;
-import java.awt.image.SampleModel;
+import java.awt.image.MultiPixelPackedSampleModel;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
-import java.awt.image.renderable.RenderableImage;
import java.awt.image.renderable.RenderContext;
+import java.awt.image.renderable.RenderableImage;
import java.text.AttributedCharacterIterator;
import java.util.HashMap;
import java.util.Map;
@@ -95,7 +93,6 @@ import java.util.Stack;
public class GdkGraphics2D extends Graphics2D
{
-
//////////////////////////////////////
////// State Management Methods //////
//////////////////////////////////////
@@ -103,14 +100,14 @@ public class GdkGraphics2D extends Graphics2D
static
{
if (Configuration.INIT_LOAD_LIBRARY)
- {
- System.loadLibrary("gtkpeer");
- }
+ System.loadLibrary("gtkpeer");
- if (GtkToolkit.useGraphics2D ())
- initStaticState ();
+ if (GtkToolkit.useGraphics2D())
+ initStaticState();
}
- native static void initStaticState ();
+
+ static native void initStaticState();
+
private final int native_state = GtkGenericPeer.getUniqueInteger();
private Paint paint;
@@ -120,247 +117,256 @@ public class GdkGraphics2D extends Graphics2D
private Shape clip;
private AffineTransform transform;
private GtkComponentPeer component;
- private Font font;
+ private Font font;
private RenderingHints hints;
private BufferedImage bimage;
-
+ private boolean pixelConversionRequired;
+ private int[] pixelBuffer;
private Composite comp;
-
private Stack stateStack;
-
- native private void initState (GtkComponentPeer component);
- native private void initState (int width, int height);
- native private void copyState (GdkGraphics2D g);
- native public void dispose ();
- native private int[] getImagePixels();
- native private void cairoSurfaceSetFilter(int filter);
- native void connectSignals (GtkComponentPeer component);
- public void finalize ()
+ private native void initState(GtkComponentPeer component);
+ private native void initState(int width, int height);
+ private native void initState(int[] pixes, int width, int height);
+ private native void copyState(GdkGraphics2D g);
+ public native void dispose();
+ private native void cairoSurfaceSetFilter(int filter);
+ native void connectSignals(GtkComponentPeer component);
+
+ public void finalize()
{
dispose();
}
- public Graphics create ()
+ public Graphics create()
{
- return new GdkGraphics2D (this);
+ return new GdkGraphics2D(this);
}
- public Graphics create (int x, int y, int width, int height)
+ public Graphics create(int x, int y, int width, int height)
{
- return new GdkGraphics2D (width, height);
+ return new GdkGraphics2D(width, height);
}
- GdkGraphics2D (GdkGraphics2D g)
+ GdkGraphics2D(GdkGraphics2D g)
{
paint = g.paint;
stroke = g.stroke;
- setRenderingHints (g.hints);
+ setRenderingHints(g.hints);
if (g.fg.getAlpha() != -1)
- fg = new Color (g.fg.getRed (), g.fg.getGreen (),
- g.fg.getBlue (), g.fg.getAlpha ());
- else
- fg = new Color (g.fg.getRGB ());
+ fg = new Color(g.fg.getRed(), g.fg.getGreen(), g.fg.getBlue(),
+ g.fg.getAlpha());
+ else
+ fg = new Color(g.fg.getRGB());
if (g.bg.getAlpha() != -1)
- bg = new Color(g.bg.getRed (), g.bg.getGreen (),
- g.bg.getBlue (), g.bg.getAlpha ());
+ bg = new Color(g.bg.getRed(), g.bg.getGreen(), g.bg.getBlue(),
+ g.bg.getAlpha());
else
- bg = new Color (g.bg.getRGB ());
+ bg = new Color(g.bg.getRGB());
if (g.clip == null)
clip = null;
else
- clip = new Rectangle (g.getClipBounds ());
+ clip = new Rectangle(g.getClipBounds());
if (g.transform == null)
- transform = new AffineTransform ();
+ transform = new AffineTransform();
else
- transform = new AffineTransform (g.transform);
+ transform = new AffineTransform(g.transform);
font = g.font;
component = g.component;
- copyState (g);
-
- setColor (fg);
- setBackground (bg);
- setPaint (paint);
- setStroke (stroke);
- setTransform (transform);
- setClip (clip);
+ copyState(g);
+
+ setColor(fg);
+ setBackground(bg);
+ setPaint(paint);
+ setStroke(stroke);
+ setTransform(transform);
+ setClip(clip);
stateStack = new Stack();
}
- GdkGraphics2D (int width, int height)
+ GdkGraphics2D(int width, int height)
{
- initState (width, height);
+ initState(width, height);
setColor(Color.black);
- setBackground (Color.black);
- setPaint (getColor());
- setFont (new Font("SansSerif", Font.PLAIN, 12));
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setBackground(Color.black);
+ setPaint(getColor());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
stateStack = new Stack();
}
- GdkGraphics2D (GtkComponentPeer component)
+ GdkGraphics2D(GtkComponentPeer component)
{
this.component = component;
-
- setFont (new Font("SansSerif", Font.PLAIN, 12));
-
- if (component.isRealized ())
- initComponentGraphics2D ();
+
+ if (component.isRealized())
+ initComponentGraphics2D();
else
- connectSignals (component);
+ connectSignals(component);
}
- void initComponentGraphics2D ()
+ void initComponentGraphics2D()
{
- initState (component);
+ initState(component);
- setColor (component.awtComponent.getForeground ());
- setBackground (component.awtComponent.getBackground ());
- setPaint (getColor());
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setColor(component.awtComponent.getForeground());
+ setBackground(component.awtComponent.getBackground());
+ setPaint(getColor());
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
- stateStack = new Stack ();
+ stateStack = new Stack();
}
- GdkGraphics2D (BufferedImage bimage)
+ GdkGraphics2D(BufferedImage bimage)
{
-
- this.bimage = bimage;
- initState (bimage.getWidth(), bimage.getHeight());
+ this.bimage = bimage;
+ this.pixelBuffer = findSimpleIntegerArray(bimage.getColorModel(),
+ bimage.getRaster());
+ if (this.pixelBuffer == null)
+ {
+ this.pixelBuffer = new int[bimage.getRaster().getWidth() * bimage.getRaster()
+ .getHeight()];
+ this.pixelConversionRequired = true;
+ }
+ else
+ {
+ this.pixelConversionRequired = false;
+ }
+
+ initState(this.pixelBuffer, bimage.getWidth(), bimage.getHeight());
setColor(Color.black);
- setBackground (Color.black);
- setPaint (getColor());
- setFont (new Font("SansSerif", Font.PLAIN, 12));
- setTransform (new AffineTransform ());
- setStroke (new BasicStroke ());
- setRenderingHints (getDefaultHints());
+ setBackground(Color.black);
+ setPaint(getColor());
+ setFont(new Font("SansSerif", Font.PLAIN, 12));
+ setTransform(new AffineTransform());
+ setStroke(new BasicStroke());
+ setRenderingHints(getDefaultHints());
stateStack = new Stack();
-
+
// draw current buffered image to the pixmap associated
- // with it.
-
- drawImage (bimage, new AffineTransform (1,0,0,1,0,0), bg, null);
+ // with it, if the image is not equal to our paint buffer.
+ if (pixelConversionRequired)
+ drawImage(bimage, new AffineTransform(1, 0, 0, 1, 0, 0), bg, null);
}
-
////////////////////////////////////
////// Native Drawing Methods //////
////////////////////////////////////
// GDK drawing methods
- private native void gdkDrawDrawable (GdkGraphics2D other, int x, int y);
+ private native void gdkDrawDrawable(GdkGraphics2D other, int x, int y);
// drawing utility methods
- private native void drawPixels (int pixels[], int w, int h, int stride, double i2u[]);
- private native void setTexturePixels (int pixels[], int w, int h, int stride);
- private native void setGradient (double x1, double y1,
- double x2, double y2,
- int r1, int g1, int b1, int a1,
- int r2, int g2, int b2, int a2,
- boolean cyclic);
+ private native void drawPixels(int[] pixels, int w, int h, int stride,
+ double[] i2u);
+ private native void setTexturePixels(int[] pixels, int w, int h, int stride);
+ private native void setGradient(double x1, double y1, double x2, double y2,
+ int r1, int g1, int b1, int a1, int r2,
+ int g2, int b2, int a2, boolean cyclic);
// simple passthroughs to cairo
- private native void cairoSave ();
- private native void cairoRestore ();
- private native void cairoSetMatrix (double m[]);
- private native void cairoSetOperator (int cairoOperator);
- private native void cairoSetRGBColor (double red, double green, double blue);
- private native void cairoSetAlpha (double alpha);
- private native void cairoSetFillRule (int cairoFillRule);
- private native void cairoSetLineWidth (double width);
- private native void cairoSetLineCap (int cairoLineCap);
- private native void cairoSetLineJoin (int cairoLineJoin);
- private native void cairoSetDash (double dashes[], int ndash, double offset);
- private native void cairoSetMiterLimit (double limit);
- private native void cairoNewPath ();
- private native void cairoMoveTo (double x, double y);
- private native void cairoLineTo (double x, double y);
- private native void cairoCurveTo (double x1, double y1,
- double x2, double y2,
- double x3, double y3);
- private native void cairoRelMoveTo (double dx, double dy);
- private native void cairoRelLineTo (double dx, double dy);
- private native void cairoRelCurveTo (double dx1, double dy1,
- double dx2, double dy2,
- double dx3, double dy3);
- private native void cairoRectangle (double x, double y,
- double width, double height);
- private native void cairoClosePath ();
- private native void cairoStroke ();
- private native void cairoFill ();
- private native void cairoClip ();
-
+ private native void cairoSave();
+ private native void cairoRestore();
+ private native void cairoSetMatrix(double[] m);
+ private native void cairoSetOperator(int cairoOperator);
+ private native void cairoSetRGBColor(double red, double green, double blue);
+ private native void cairoSetAlpha(double alpha);
+ private native void cairoSetFillRule(int cairoFillRule);
+ private native void cairoSetLineWidth(double width);
+ private native void cairoSetLineCap(int cairoLineCap);
+ private native void cairoSetLineJoin(int cairoLineJoin);
+ private native void cairoSetDash(double[] dashes, int ndash, double offset);
+
+ private native void cairoSetMiterLimit(double limit);
+ private native void cairoNewPath();
+ private native void cairoMoveTo(double x, double y);
+ private native void cairoLineTo(double x, double y);
+ private native void cairoCurveTo(double x1, double y1, double x2, double y2,
+ double x3, double y3);
+ private native void cairoRelMoveTo(double dx, double dy);
+ private native void cairoRelLineTo(double dx, double dy);
+ private native void cairoRelCurveTo(double dx1, double dy1, double dx2,
+ double dy2, double dx3, double dy3);
+ private native void cairoRectangle(double x, double y, double width,
+ double height);
+ private native void cairoClosePath();
+ private native void cairoStroke();
+ private native void cairoFill();
+ private native void cairoClip();
/////////////////////////////////////////////
////// General Drawing Support Methods //////
/////////////////////////////////////////////
- private class DrawState
- {
- private Paint paint;
- private Stroke stroke;
- private Color fg;
- private Color bg;
- private Shape clip;
- private AffineTransform transform;
- private Font font;
- private Composite comp;
- DrawState (GdkGraphics2D g)
- {
- this.paint = g.paint;
- this.stroke = g.stroke;
- this.fg = g.fg;
- this.bg = g.bg;
- this.clip = g.clip;
- if (g.transform != null)
- this.transform = (AffineTransform) g.transform.clone();
- this.font = g.font;
- this.comp = g.comp;
- }
- public void restore(GdkGraphics2D g)
- {
- g.paint = this.paint;
- g.stroke = this.stroke;
- g.fg = this.fg;
- g.bg = this.bg;
- g.clip = this.clip;
- g.transform = this.transform;
- g.font = this.font;
- g.comp = this.comp;
- }
- }
-
- private void stateSave ()
+ private class DrawState
+ {
+ private Paint paint;
+ private Stroke stroke;
+ private Color fg;
+ private Color bg;
+ private Shape clip;
+ private AffineTransform transform;
+ private Font font;
+ private Composite comp;
+
+ DrawState(GdkGraphics2D g)
{
- stateStack.push (new DrawState (this));
- cairoSave ();
+ this.paint = g.paint;
+ this.stroke = g.stroke;
+ this.fg = g.fg;
+ this.bg = g.bg;
+ this.clip = g.clip;
+ if (g.transform != null)
+ this.transform = (AffineTransform) g.transform.clone();
+ this.font = g.font;
+ this.comp = g.comp;
}
- private void stateRestore ()
+ public void restore(GdkGraphics2D g)
{
- ((DrawState)(stateStack.pop ())).restore (this);
- cairoRestore ();
+ g.paint = this.paint;
+ g.stroke = this.stroke;
+ g.fg = this.fg;
+ g.bg = this.bg;
+ g.clip = this.clip;
+ g.transform = this.transform;
+ g.font = this.font;
+ g.comp = this.comp;
}
+ }
+
+ private void stateSave()
+ {
+ stateStack.push(new DrawState(this));
+ cairoSave();
+ }
+
+ private void stateRestore()
+ {
+ ((DrawState) (stateStack.pop())).restore(this);
+ cairoRestore();
+ }
// Some operations (drawing rather than filling) require that their
// coords be shifted to land on 0.5-pixel boundaries, in order to land on
// "middle of pixel" coordinates and light up complete pixels.
-
private boolean shiftDrawCalls = false;
- private final double shifted(double coord, boolean doShift)
+
+ private double shifted(double coord, boolean doShift)
{
if (doShift)
return Math.floor(coord) + 0.5;
@@ -368,410 +374,381 @@ public class GdkGraphics2D extends Graphics2D
return coord;
}
- private final void walkPath(PathIterator p, boolean doShift)
+ private void walkPath(PathIterator p, boolean doShift)
{
double x = 0;
double y = 0;
- double coords[] = new double[6];
+ double[] coords = new double[6];
- cairoSetFillRule (p.getWindingRule ());
- for ( ; ! p.isDone (); p.next())
+ cairoSetFillRule(p.getWindingRule());
+ for (; ! p.isDone(); p.next())
{
- int seg = p.currentSegment (coords);
- switch(seg)
- {
-
- case PathIterator.SEG_MOVETO:
- x = shifted(coords[0], doShift);
- y = shifted(coords[1], doShift);
- cairoMoveTo (x, y);
- break;
-
- case PathIterator.SEG_LINETO:
- x = shifted(coords[0], doShift);
- y = shifted(coords[1], doShift);
- cairoLineTo (x, y);
- break;
-
- case PathIterator.SEG_QUADTO:
-
- // splitting a quadratic bezier into a cubic:
- // see: http://pfaedit.sourceforge.net/bezier.html
-
- double x1 = x + (2.0/3.0) * (shifted(coords[0], doShift) - x);
- double y1 = y + (2.0/3.0) * (shifted(coords[1], doShift) - y);
-
- double x2 = x1 + (1.0/3.0) * (shifted(coords[2], doShift) - x);
- double y2 = y1 + (1.0/3.0) * (shifted(coords[3], doShift) - y);
-
- x = shifted(coords[2], doShift);
- y = shifted(coords[3], doShift);
- cairoCurveTo (x1, y1,
- x2, y2,
- x, y);
- break;
-
- case PathIterator.SEG_CUBICTO:
- x = shifted(coords[4], doShift);
- y = shifted(coords[5], doShift);
- cairoCurveTo (shifted(coords[0], doShift), shifted(coords[1], doShift),
- shifted(coords[2], doShift), shifted(coords[3], doShift),
- x, y);
- break;
-
- case PathIterator.SEG_CLOSE:
- cairoClosePath ();
- break;
- }
- }
- }
-
-
- private final Map getDefaultHints()
- {
- HashMap defaultHints = new HashMap ();
-
- defaultHints.put (RenderingHints.KEY_TEXT_ANTIALIASING,
- RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
-
- defaultHints.put (RenderingHints.KEY_STROKE_CONTROL,
- RenderingHints.VALUE_STROKE_DEFAULT);
-
- defaultHints.put (RenderingHints.KEY_FRACTIONALMETRICS,
- RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
-
- defaultHints.put (RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_OFF);
-
- defaultHints.put (RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_DEFAULT);
-
- return defaultHints;
-
+ int seg = p.currentSegment(coords);
+ switch (seg)
+ {
+ case PathIterator.SEG_MOVETO:
+ x = shifted(coords[0], doShift);
+ y = shifted(coords[1], doShift);
+ cairoMoveTo(x, y);
+ break;
+ case PathIterator.SEG_LINETO:
+ x = shifted(coords[0], doShift);
+ y = shifted(coords[1], doShift);
+ cairoLineTo(x, y);
+ break;
+ case PathIterator.SEG_QUADTO:
+ // splitting a quadratic bezier into a cubic:
+ // see: http://pfaedit.sourceforge.net/bezier.html
+ double x1 = x + (2.0 / 3.0) * (shifted(coords[0], doShift) - x);
+ double y1 = y + (2.0 / 3.0) * (shifted(coords[1], doShift) - y);
+
+ double x2 = x1 + (1.0 / 3.0) * (shifted(coords[2], doShift) - x);
+ double y2 = y1 + (1.0 / 3.0) * (shifted(coords[3], doShift) - y);
+
+ x = shifted(coords[2], doShift);
+ y = shifted(coords[3], doShift);
+ cairoCurveTo(x1, y1, x2, y2, x, y);
+ break;
+ case PathIterator.SEG_CUBICTO:
+ x = shifted(coords[4], doShift);
+ y = shifted(coords[5], doShift);
+ cairoCurveTo(shifted(coords[0], doShift),
+ shifted(coords[1], doShift),
+ shifted(coords[2], doShift),
+ shifted(coords[3], doShift), x, y);
+ break;
+ case PathIterator.SEG_CLOSE:
+ cairoClosePath();
+ break;
+ }
+ }
}
- private final void updateBufferedImage()
+ private Map getDefaultHints()
{
- int[] pixels = getImagePixels();
- updateImagePixels(pixels);
- }
+ HashMap defaultHints = new HashMap();
-
- private final boolean isBufferedImageGraphics ()
- {
- return bimage != null;
+ defaultHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
+ RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
+
+ defaultHints.put(RenderingHints.KEY_STROKE_CONTROL,
+ RenderingHints.VALUE_STROKE_DEFAULT);
+
+ defaultHints.put(RenderingHints.KEY_FRACTIONALMETRICS,
+ RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
+
+ defaultHints.put(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_OFF);
+
+ defaultHints.put(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_DEFAULT);
+
+ return defaultHints;
}
-
- private final void updateImagePixels (int[] pixels)
+
+ public static int[] findSimpleIntegerArray (ColorModel cm, Raster raster)
{
+ if (cm == null || raster == null)
+ return null;
- // This function can only be used if
- // this graphics object is used to draw into
- // buffered image
-
- if (! isBufferedImageGraphics ())
- return;
+ if (! cm.getColorSpace().isCS_sRGB())
+ return null;
- WritableRaster raster = bimage.getRaster();
- DataBuffer db = raster.getDataBuffer ();
+ if (! (cm instanceof DirectColorModel))
+ return null;
- // update pixels in the bufferedImage
+ DirectColorModel dcm = (DirectColorModel) cm;
- if (raster.getSampleModel ().getDataType () == DataBuffer.TYPE_INT
- && db instanceof DataBufferInt
- && db.getNumBanks () == 1)
- {
+ if (dcm.getRedMask() != 0x00FF0000 || dcm.getGreenMask() != 0x0000FF00
+ || dcm.getBlueMask() != 0x000000FF)
+ return null;
- // single bank, ARGB-ints buffer in sRGB space
- DataBufferInt dbi = (DataBufferInt) raster.getDataBuffer ();
+ if (! (raster instanceof WritableRaster))
+ return null;
- for (int i=0; i < pixels.length; i++)
- dbi.setElem(i, pixels[i]);
-
- }
- else
- {
- bimage.getRaster().setPixels (0, 0, raster.getWidth (),
- raster.getHeight (), pixels);
- }
- }
+ if (raster.getSampleModel().getDataType() != DataBuffer.TYPE_INT)
+ return null;
+
+ if (! (raster.getDataBuffer() instanceof DataBufferInt))
+ return null;
+ DataBufferInt db = (DataBufferInt) raster.getDataBuffer();
- private final boolean drawImage(Image img,
- AffineTransform xform,
- Color bgcolor,
- ImageObserver obs)
+ if (db.getNumBanks() != 1)
+ return null;
+
+ // Finally, we have determined that this is a single bank, [A]RGB-int
+ // buffer in sRGB space. It's worth checking all this, because it means
+ // that cairo can paint directly into the data buffer, which is very
+ // fast compared to all the normal copying and converting.
+
+ return db.getData();
+ }
+
+ private void updateBufferedImage()
{
+ if (bimage != null && pixelConversionRequired)
+ {
+ int height = bimage.getHeight();
+ int width = bimage.getWidth();
+ for (int y = 0; y < height; ++y)
+ for (int x = 0; x < width; ++x)
+ bimage.setRGB(x, y, pixelBuffer[y*width+height]);
+ }
+ }
+ private boolean drawImage(Image img, AffineTransform xform,
+ Color bgcolor, ImageObserver obs)
+ {
if (img == null)
return false;
- if (img instanceof GtkOffScreenImage &&
- img.getGraphics () instanceof GdkGraphics2D &&
- (xform == null
- || xform.getType () == AffineTransform.TYPE_IDENTITY
- || xform.getType () == AffineTransform.TYPE_TRANSLATION)
- )
+ if (img instanceof GtkOffScreenImage
+ && img.getGraphics() instanceof GdkGraphics2D
+ && (xform == null || xform.getType() == AffineTransform.TYPE_IDENTITY
+ || xform.getType() == AffineTransform.TYPE_TRANSLATION))
{
- // we are being asked to flush a double buffer from Gdk
- GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics ();
- gdkDrawDrawable (g2, (int)xform.getTranslateX(), (int)xform.getTranslateY());
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
-
- return true;
+ // we are being asked to flush a double buffer from Gdk
+ GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics();
+ gdkDrawDrawable(g2, (int) xform.getTranslateX(),
+ (int) xform.getTranslateY());
+
+ updateBufferedImage();
+
+ return true;
}
else
- {
-
- // In this case, xform is an AffineTransform that transforms bounding
- // box of the specified image from image space to user space. However
- // when we pass this transform to cairo, cairo will use this transform
- // to map "user coordinates" to "pixel" coordinates, which is the
- // other way around. Therefore to get the "user -> pixel" transform
- // that cairo wants from "image -> user" transform that we currently
- // have, we will need to invert the transformation matrix.
-
- AffineTransform invertedXform = new AffineTransform();
-
- try
- {
- invertedXform = xform.createInverse();
- if (img instanceof BufferedImage)
- {
- // draw an image which has actually been loaded
- // into memory fully
-
- BufferedImage b = (BufferedImage) img;
- return drawRaster (b.getColorModel (),
- b.getData (),
- invertedXform,
- bgcolor);
- }
- else
- {
- return this.drawImage(GdkPixbufDecoder.createBufferedImage(img.getSource()),
- xform, bgcolor,obs);
- }
- }
- catch (NoninvertibleTransformException e)
- {
- throw new ImagingOpException("Unable to invert transform "
- + xform.toString());
- }
+ {
+ // In this case, xform is an AffineTransform that transforms bounding
+ // box of the specified image from image space to user space. However
+ // when we pass this transform to cairo, cairo will use this transform
+ // to map "user coordinates" to "pixel" coordinates, which is the
+ // other way around. Therefore to get the "user -> pixel" transform
+ // that cairo wants from "image -> user" transform that we currently
+ // have, we will need to invert the transformation matrix.
+ AffineTransform invertedXform = new AffineTransform();
+
+ try
+ {
+ invertedXform = xform.createInverse();
+ if (img instanceof BufferedImage)
+ {
+ // draw an image which has actually been loaded
+ // into memory fully
+ BufferedImage b = (BufferedImage) img;
+ return drawRaster(b.getColorModel(), b.getData(),
+ invertedXform, bgcolor);
+ }
+ else
+ return this.drawImage(GdkPixbufDecoder.createBufferedImage(img
+ .getSource()),
+ xform, bgcolor, obs);
+ }
+ catch (NoninvertibleTransformException e)
+ {
+ throw new ImagingOpException("Unable to invert transform "
+ + xform.toString());
+ }
}
}
-
//////////////////////////////////////////////////
////// Implementation of Graphics2D Methods //////
//////////////////////////////////////////////////
- public void draw (Shape s)
+ public void draw(Shape s)
{
-
- if (stroke != null &&
- !(stroke instanceof BasicStroke))
+ if (stroke != null && ! (stroke instanceof BasicStroke))
{
- fill (stroke.createStrokedShape (s));
- return;
+ fill(stroke.createStrokedShape(s));
+ return;
}
- cairoNewPath ();
-
+ cairoNewPath();
+
if (s instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (shifted(r.getX (), shiftDrawCalls),
- shifted(r.getY (), shiftDrawCalls),
- r.getWidth (), r.getHeight ());
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(shifted(r.getX(), shiftDrawCalls),
+ shifted(r.getY(), shiftDrawCalls), r.getWidth(),
+ r.getHeight());
}
- else
- walkPath (s.getPathIterator (null), shiftDrawCalls);
- cairoStroke ();
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ walkPath(s.getPathIterator(null), shiftDrawCalls);
+ cairoStroke();
+
+ updateBufferedImage();
}
- public void fill (Shape s)
+ public void fill(Shape s)
{
- cairoNewPath ();
+ cairoNewPath();
if (s instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
- else
- walkPath (s.getPathIterator (null), false);
- cairoFill ();
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ walkPath(s.getPathIterator(null), false);
+ cairoFill();
+
+ updateBufferedImage();
}
- public void clip (Shape s)
+ public void clip(Shape s)
{
- // update it
+ // update it
+ if (clip == null || s == null)
+ clip = s;
+ else if (s instanceof Rectangle2D && clip instanceof Rectangle2D)
+ {
+ Rectangle2D r = (Rectangle2D) s;
+ Rectangle2D curr = (Rectangle2D) clip;
+ clip = curr.createIntersection(r);
+ }
+ else
+ throw new UnsupportedOperationException();
- if (clip == null || s == null)
- clip = s;
- else if (s instanceof Rectangle2D
- && clip instanceof Rectangle2D)
+ // draw it
+ if (clip != null)
+ {
+ cairoNewPath();
+ if (clip instanceof Rectangle2D)
{
- Rectangle2D r = (Rectangle2D)s;
- Rectangle2D curr = (Rectangle2D)clip;
- clip = curr.createIntersection (r);
+ Rectangle2D r = (Rectangle2D) clip;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
- else
- throw new UnsupportedOperationException ();
+ else
+ walkPath(clip.getPathIterator(null), false);
- // draw it
- if (clip != null)
- {
- cairoNewPath ();
- if (clip instanceof Rectangle2D)
- {
- Rectangle2D r = (Rectangle2D)clip;
- cairoRectangle (r.getX (), r.getY (),
- r.getWidth (), r.getHeight ());
- }
- else
- walkPath (clip.getPathIterator (null), false);
- // cairoClosePath ();
- cairoClip ();
- }
+ // cairoClosePath ();
+ cairoClip();
+ }
}
- public Paint getPaint ()
+ public Paint getPaint()
{
return paint;
}
- public AffineTransform getTransform ()
+ public AffineTransform getTransform()
{
- return (AffineTransform) transform.clone ();
+ return (AffineTransform) transform.clone();
}
- public void setPaint (Paint p)
+ public void setPaint(Paint p)
{
if (paint == null)
- return;
-
+ return;
+
paint = p;
if (paint instanceof Color)
{
- setColor ((Color) paint);
+ setColor((Color) paint);
}
else if (paint instanceof TexturePaint)
{
- TexturePaint tp = (TexturePaint) paint;
- BufferedImage img = tp.getImage ();
-
- // map the image to the anchor rectangle
+ TexturePaint tp = (TexturePaint) paint;
+ BufferedImage img = tp.getImage();
- int width = (int) tp.getAnchorRect ().getWidth ();
- int height = (int) tp.getAnchorRect ().getHeight ();
-
- double scaleX = width / (double) img.getWidth ();
- double scaleY = width / (double) img.getHeight ();
-
- AffineTransform at = new AffineTransform (scaleX, 0, 0, scaleY, 0, 0);
- AffineTransformOp op = new AffineTransformOp (at, getRenderingHints());
- BufferedImage texture = op.filter(img, null);
- int pixels[] = texture.getRGB (0, 0, width, height, null, 0, width);
- setTexturePixels (pixels, width, height, width);
+ // map the image to the anchor rectangle
+ int width = (int) tp.getAnchorRect().getWidth();
+ int height = (int) tp.getAnchorRect().getHeight();
+
+ double scaleX = width / (double) img.getWidth();
+ double scaleY = width / (double) img.getHeight();
+ AffineTransform at = new AffineTransform(scaleX, 0, 0, scaleY, 0, 0);
+ AffineTransformOp op = new AffineTransformOp(at, getRenderingHints());
+ BufferedImage texture = op.filter(img, null);
+ int[] pixels = texture.getRGB(0, 0, width, height, null, 0, width);
+ setTexturePixels(pixels, width, height, width);
}
else if (paint instanceof GradientPaint)
{
- GradientPaint gp = (GradientPaint) paint;
- Point2D p1 = gp.getPoint1 ();
- Point2D p2 = gp.getPoint2 ();
- Color c1 = gp.getColor1 ();
- Color c2 = gp.getColor2 ();
- setGradient (p1.getX (), p1.getY (),
- p2.getX (), p2.getY (),
- c1.getRed (), c1.getGreen (),
- c1.getBlue (), c1.getAlpha (),
- c2.getRed (), c2.getGreen (),
- c2.getBlue (), c2.getAlpha (),
- gp.isCyclic ());
+ GradientPaint gp = (GradientPaint) paint;
+ Point2D p1 = gp.getPoint1();
+ Point2D p2 = gp.getPoint2();
+ Color c1 = gp.getColor1();
+ Color c2 = gp.getColor2();
+ setGradient(p1.getX(), p1.getY(), p2.getX(), p2.getY(), c1.getRed(),
+ c1.getGreen(), c1.getBlue(), c1.getAlpha(), c2.getRed(),
+ c2.getGreen(), c2.getBlue(), c2.getAlpha(), gp.isCyclic());
}
else
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void setTransform (AffineTransform tx)
+ public void setTransform(AffineTransform tx)
{
transform = tx;
if (transform != null)
{
- double m[] = new double[6];
- transform.getMatrix (m);
- cairoSetMatrix (m);
+ double[] m = new double[6];
+ transform.getMatrix(m);
+ cairoSetMatrix(m);
}
}
- public void transform (AffineTransform tx)
+ public void transform(AffineTransform tx)
{
if (transform == null)
- transform = new AffineTransform (tx);
+ transform = new AffineTransform(tx);
else
- transform.concatenate (tx);
- setTransform (transform);
+ transform.concatenate(tx);
+ setTransform(transform);
if (clip != null)
{
- // FIXME: this should actuall try to transform the shape
- // rather than degrade to bounds.
- Rectangle2D r = clip.getBounds2D();
- double[] coords = new double[] { r.getX(), r.getY(),
- r.getX() + r.getWidth(),
- r.getY() + r.getHeight() };
- try
- {
- tx.createInverse().transform(coords, 0, coords, 0, 2);
- r.setRect(coords[0], coords[1],
- coords[2] - coords[0],
- coords[3] - coords[1]);
- clip = r;
- }
- catch (java.awt.geom.NoninvertibleTransformException e)
- {
- }
+ // FIXME: this should actuall try to transform the shape
+ // rather than degrade to bounds.
+ Rectangle2D r = clip.getBounds2D();
+ double[] coords = new double[]
+ {
+ r.getX(), r.getY(), r.getX() + r.getWidth(),
+ r.getY() + r.getHeight()
+ };
+ try
+ {
+ tx.createInverse().transform(coords, 0, coords, 0, 2);
+ r.setRect(coords[0], coords[1], coords[2] - coords[0],
+ coords[3] - coords[1]);
+ clip = r;
+ }
+ catch (java.awt.geom.NoninvertibleTransformException e)
+ {
+ }
}
}
public void rotate(double theta)
{
- transform (AffineTransform.getRotateInstance (theta));
+ transform(AffineTransform.getRotateInstance(theta));
}
public void rotate(double theta, double x, double y)
{
- transform (AffineTransform.getRotateInstance (theta, x, y));
+ transform(AffineTransform.getRotateInstance(theta, x, y));
}
public void scale(double sx, double sy)
{
- transform (AffineTransform.getScaleInstance (sx, sy));
+ transform(AffineTransform.getScaleInstance(sx, sy));
}
- public void translate (double tx, double ty)
+ public void translate(double tx, double ty)
{
- transform (AffineTransform.getTranslateInstance (tx, ty));
+ transform(AffineTransform.getTranslateInstance(tx, ty));
}
- public void translate (int x, int y)
+ public void translate(int x, int y)
{
- translate ((double) x, (double) y);
+ translate((double) x, (double) y);
}
public void shear(double shearX, double shearY)
{
- transform (AffineTransform.getShearInstance (shearX, shearY));
+ transform(AffineTransform.getShearInstance(shearX, shearY));
}
public Stroke getStroke()
@@ -779,173 +756,165 @@ public class GdkGraphics2D extends Graphics2D
return stroke;
}
- public void setStroke (Stroke st)
+ public void setStroke(Stroke st)
{
stroke = st;
if (stroke instanceof BasicStroke)
{
- BasicStroke bs = (BasicStroke) stroke;
- cairoSetLineCap (bs.getEndCap());
- cairoSetLineWidth (bs.getLineWidth());
- cairoSetLineJoin (bs.getLineJoin());
- cairoSetMiterLimit (bs.getMiterLimit());
- float dashes[] = bs.getDashArray();
- if (dashes != null)
- {
- double double_dashes[] = new double[dashes.length];
- for (int i = 0; i < dashes.length; i++)
- double_dashes[i] = dashes[i];
- cairoSetDash (double_dashes, double_dashes.length,
- (double) bs.getDashPhase ());
- }
+ BasicStroke bs = (BasicStroke) stroke;
+ cairoSetLineCap(bs.getEndCap());
+ cairoSetLineWidth(bs.getLineWidth());
+ cairoSetLineJoin(bs.getLineJoin());
+ cairoSetMiterLimit(bs.getMiterLimit());
+ float[] dashes = bs.getDashArray();
+ if (dashes != null)
+ {
+ double[] double_dashes = new double[dashes.length];
+ for (int i = 0; i < dashes.length; i++)
+ double_dashes[i] = dashes[i];
+ cairoSetDash(double_dashes, double_dashes.length,
+ (double) bs.getDashPhase());
+ }
}
}
-
////////////////////////////////////////////////
////// Implementation of Graphics Methods //////
////////////////////////////////////////////////
- public void setPaintMode ()
- {
- setComposite (java.awt.AlphaComposite.SrcOver);
+ public void setPaintMode()
+ {
+ setComposite(java.awt.AlphaComposite.SrcOver);
}
- public void setXORMode (Color c)
- {
- setComposite (new gnu.java.awt.BitwiseXORComposite(c));
+ public void setXORMode(Color c)
+ {
+ setComposite(new gnu.java.awt.BitwiseXORComposite(c));
}
- public void setColor (Color c)
+ public void setColor(Color c)
{
if (c == null)
c = Color.BLACK;
-
+
fg = c;
paint = c;
- cairoSetRGBColor (fg.getRed() / 255.0,
- fg.getGreen() / 255.0,
- fg.getBlue() / 255.0);
- cairoSetAlpha ((fg.getAlpha() & 255) / 255.0);
+ cairoSetRGBColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
+ fg.getBlue() / 255.0);
+ cairoSetAlpha((fg.getAlpha() & 255) / 255.0);
}
- public Color getColor ()
+ public Color getColor()
{
return fg;
}
- public void clipRect (int x, int y, int width, int height)
+ public void clipRect(int x, int y, int width, int height)
{
- clip (new Rectangle (x, y, width, height));
+ clip(new Rectangle(x, y, width, height));
}
- public Shape getClip ()
+ public Shape getClip()
{
- return getClipInDevSpace ();
+ return clip.getBounds2D(); //getClipInDevSpace();
}
- public Rectangle getClipBounds ()
+ public Rectangle getClipBounds()
{
if (clip == null)
return null;
else
- return clip.getBounds ();
+ return clip.getBounds();
}
- protected Rectangle2D getClipInDevSpace ()
+ protected Rectangle2D getClipInDevSpace()
{
- Rectangle2D uclip = clip.getBounds2D ();
+ Rectangle2D uclip = clip.getBounds2D();
if (transform == null)
return uclip;
else
{
- Point2D pos = transform.transform (new Point2D.Double(uclip.getX (),
- uclip.getY ()),
- (Point2D)null);
- Point2D extent = transform.deltaTransform (new Point2D.Double(uclip.getWidth (),
- uclip.getHeight ()),
- (Point2D)null);
- return new Rectangle2D.Double (pos.getX (), pos.getY (),
- extent.getX (), extent.getY ());
+ Point2D pos = transform.transform(new Point2D.Double(uclip.getX(),
+ uclip.getY()),
+ (Point2D) null);
+ Point2D extent = transform.deltaTransform(new Point2D.Double(uclip
+ .getWidth(),
+ uclip
+ .getHeight()),
+ (Point2D) null);
+ return new Rectangle2D.Double(pos.getX(), pos.getY(), extent.getX(),
+ extent.getY());
}
}
- public void setClip (int x, int y, int width, int height)
+ public void setClip(int x, int y, int width, int height)
{
- setClip(new Rectangle2D.Double ((double)x, (double)y,
- (double)width, (double)height));
+ setClip(new Rectangle2D.Double((double) x, (double) y, (double) width,
+ (double) height));
}
-
- public void setClip (Shape s)
+
+ public void setClip(Shape s)
{
clip = s;
if (s != null)
{
- cairoNewPath ();
- if (s instanceof Rectangle2D)
- {
- Rectangle2D r = (Rectangle2D)s;
- cairoRectangle (r.getX (), r.getY (),
- r.getWidth (), r.getHeight ());
- }
- else
- walkPath (s.getPathIterator (null), false);
- // cairoClosePath ();
- cairoClip ();
+ cairoNewPath();
+ if (s instanceof Rectangle2D)
+ {
+ Rectangle2D r = (Rectangle2D) s;
+ cairoRectangle(r.getX(), r.getY(), r.getWidth(), r.getHeight());
+ }
+ else
+ walkPath(s.getPathIterator(null), false);
+
+ // cairoClosePath ();
+ cairoClip();
}
}
-
+
private static BasicStroke draw3DRectStroke = new BasicStroke();
- public void draw3DRect(int x, int y, int width,
- int height, boolean raised)
+ public void draw3DRect(int x, int y, int width, int height, boolean raised)
{
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.draw3DRect(x, y, width, height, raised);
- setStroke(tmp);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ setStroke(tmp);
+ updateBufferedImage();
}
- public void fill3DRect(int x, int y, int width,
- int height, boolean raised)
+ public void fill3DRect(int x, int y, int width, int height, boolean raised)
{
Stroke tmp = stroke;
setStroke(draw3DRectStroke);
super.fill3DRect(x, y, width, height, raised);
- setStroke(tmp);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ setStroke(tmp);
+ updateBufferedImage();
}
-
- public void drawRect (int x, int y, int width, int height)
+ public void drawRect(int x, int y, int width, int height)
{
- draw(new Rectangle (x, y, width, height));
+ draw(new Rectangle(x, y, width, height));
}
- public void fillRect (int x, int y, int width, int height)
+ public void fillRect(int x, int y, int width, int height)
{
- cairoNewPath ();
- cairoRectangle (x, y, width, height);
- cairoFill ();
+ cairoNewPath();
+ cairoRectangle(x, y, width, height);
+ cairoFill();
}
- public void clearRect (int x, int y, int width, int height)
+ public void clearRect(int x, int y, int width, int height)
{
- cairoSetRGBColor (bg.getRed() / 255.0,
- bg.getGreen() / 255.0,
- bg.getBlue() / 255.0);
- cairoSetAlpha (1.0);
- cairoNewPath ();
- cairoRectangle (x, y, width, height);
- cairoFill ();
- setColor (fg);
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ cairoSetRGBColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
+ bg.getBlue() / 255.0);
+ cairoSetAlpha(1.0);
+ cairoNewPath();
+ cairoRectangle(x, y, width, height);
+ cairoFill();
+ setColor(fg);
+ updateBufferedImage();
}
public void setBackground(Color c)
@@ -958,181 +927,172 @@ public class GdkGraphics2D extends Graphics2D
return bg;
}
- private final void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
- boolean close, boolean fill)
- {
+ private void doPolygon(int[] xPoints, int[] yPoints, int nPoints,
+ boolean close, boolean fill)
+ {
if (nPoints < 1)
return;
- GeneralPath gp = new GeneralPath (PathIterator.WIND_EVEN_ODD);
- gp.moveTo ((float)xPoints[0], (float)yPoints[0]);
+ GeneralPath gp = new GeneralPath(PathIterator.WIND_EVEN_ODD);
+ gp.moveTo((float) xPoints[0], (float) yPoints[0]);
for (int i = 1; i < nPoints; i++)
- gp.lineTo ((float)xPoints[i], (float)yPoints[i]);
-
+ gp.lineTo((float) xPoints[i], (float) yPoints[i]);
+
if (close)
- gp.closePath ();
+ gp.closePath();
Shape sh = gp;
- if (fill == false &&
- stroke != null &&
- !(stroke instanceof BasicStroke))
+ if (fill == false && stroke != null && ! (stroke instanceof BasicStroke))
{
- sh = stroke.createStrokedShape (gp);
- fill = true;
+ sh = stroke.createStrokedShape(gp);
+ fill = true;
}
-
- if (fill)
- fill (sh);
- else
- draw (sh);
+
+ if (fill)
+ fill(sh);
+ else
+ draw(sh);
}
- public void drawLine (int x1, int y1, int x2, int y2)
+ public void drawLine(int x1, int y1, int x2, int y2)
{
- int xp[] = new int[2];
- int yp[] = new int[2];
+ int[] xp = new int[2];
+ int[] yp = new int[2];
xp[0] = x1;
xp[1] = x2;
yp[0] = y1;
yp[1] = y2;
-
- doPolygon (xp, yp, 2, false, false);
+
+ doPolygon(xp, yp, 2, false, false);
}
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
{
- doPolygon (xPoints, yPoints, nPoints, true, true);
+ doPolygon(xPoints, yPoints, nPoints, true, true);
}
-
+
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
- {
- doPolygon (xPoints, yPoints, nPoints, true, false);
+ {
+ doPolygon(xPoints, yPoints, nPoints, true, false);
}
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
{
- doPolygon (xPoints, yPoints, nPoints, false, false);
+ doPolygon(xPoints, yPoints, nPoints, false, false);
}
- private final boolean drawRaster (ColorModel cm, Raster r,
- AffineTransform imageToUser,
- Color bgcolor)
+ private boolean drawRaster(ColorModel cm, Raster r,
+ AffineTransform imageToUser, Color bgcolor)
{
if (r == null)
return false;
- SampleModel sm = r.getSampleModel ();
- DataBuffer db = r.getDataBuffer ();
+ SampleModel sm = r.getSampleModel();
+ DataBuffer db = r.getDataBuffer();
if (db == null || sm == null)
return false;
if (cm == null)
- cm = ColorModel.getRGBdefault ();
+ cm = ColorModel.getRGBdefault();
double[] i2u = new double[6];
if (imageToUser != null)
imageToUser.getMatrix(i2u);
else
{
- i2u[0] = 1; i2u[1] = 0;
- i2u[2] = 0; i2u[3] = 1;
- i2u[4] = 0; i2u[5] = 0;
+ i2u[0] = 1;
+ i2u[1] = 0;
+ i2u[2] = 0;
+ i2u[3] = 1;
+ i2u[4] = 0;
+ i2u[5] = 0;
}
- int pixels[] = null;
+ int[] pixels = findSimpleIntegerArray(cm, r);
- if (sm.getDataType () == DataBuffer.TYPE_INT &&
- db instanceof DataBufferInt &&
- db.getNumBanks () == 1)
+ if (pixels == null)
{
- // single bank, ARGB-ints buffer in sRGB space
- DataBufferInt dbi = (DataBufferInt)db;
- pixels = dbi.getData ();
+ // FIXME: I don't think this code will work correctly with a non-RGB
+ // MultiPixelPackedSampleModel. Although this entire method should
+ // probably be rewritten to better utilize Cairo's different supported
+ // data formats.
+ if (sm instanceof MultiPixelPackedSampleModel)
+ {
+ pixels = r.getPixels(0, 0, r.getWidth(), r.getHeight(), pixels);
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] = cm.getRGB(pixels[i]);
+ }
+ else
+ {
+ pixels = new int[r.getWidth() * r.getHeight()];
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] = cm.getRGB(db.getElem(i));
+ }
}
- else
- pixels = r.getPixels (0, 0, r.getWidth (), r.getHeight (), pixels);
-
- ColorSpace cs = cm.getColorSpace ();
- if (cs != null &&
- cs.getType () != ColorSpace.CS_sRGB)
+
+ // Change all transparent pixels in the image to the specified bgcolor,
+ // or (if there's no alpha) fill in an alpha channel so that it paints
+ // correctly.
+ if (cm.hasAlpha())
{
- int pixels2[] = new int[pixels.length];
- for (int i = 0; i < pixels2.length; i++)
- pixels2[i] = cm.getRGB (pixels[i]);
- pixels = pixels2;
+ if (bgcolor != null && cm.hasAlpha())
+ for (int i = 0; i < pixels.length; i++)
+ {
+ if (cm.getAlpha(pixels[i]) == 0)
+ pixels[i] = bgcolor.getRGB();
+ }
}
-
- // change all transparent pixels in the image to the
- // specified bgcolor
-
- if (bgcolor != null)
- {
- for (int i = 0; i < pixels.length; i++)
- {
- if (cm.getAlpha (pixels[i]) == 0)
- pixels[i] = bgcolor.getRGB ();
- }
- }
-
- drawPixels (pixels, r.getWidth (), r.getHeight (), r.getWidth (), i2u);
-
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ else
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] |= 0xFF000000;
+
+ drawPixels(pixels, r.getWidth(), r.getHeight(), r.getWidth(), i2u);
+
+ updateBufferedImage();
return true;
}
- public void drawRenderedImage(RenderedImage image,
- AffineTransform xform)
+ public void drawRenderedImage(RenderedImage image, AffineTransform xform)
{
- drawRaster (image.getColorModel(), image.getData(), xform, bg);
+ drawRaster(image.getColorModel(), image.getData(), xform, bg);
}
-
- public void drawRenderableImage(RenderableImage image,
- AffineTransform xform)
+
+ public void drawRenderableImage(RenderableImage image, AffineTransform xform)
{
- drawRenderedImage (image.createRendering (new RenderContext (xform)), xform);
+ drawRenderedImage(image.createRendering(new RenderContext(xform)), xform);
}
-
- public boolean drawImage(Image img,
- AffineTransform xform,
- ImageObserver obs)
+
+ public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs)
{
- return drawImage(img, xform, bg, obs);
+ return drawImage(img, xform, bg, obs);
}
- public void drawImage(BufferedImage image,
- BufferedImageOp op,
- int x,
- int y)
+ public void drawImage(BufferedImage image, BufferedImageOp op, int x, int y)
{
Image filtered = op.filter(image, null);
- drawImage(filtered, new AffineTransform(1f,0f,0f,1f,x,y), bg, null);
+ drawImage(filtered, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg, null);
}
- public boolean drawImage (Image img, int x, int y,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, ImageObserver observer)
{
- return drawImage(img, new AffineTransform(1f,0f,0f,1f,x,y), bg, observer);
+ return drawImage(img, new AffineTransform(1f, 0f, 0f, 1f, x, y), bg,
+ observer);
}
-
///////////////////////////////////////////////
////// Unimplemented Stubs and Overloads //////
///////////////////////////////////////////////
-
-
- public boolean hit(Rectangle rect, Shape text,
- boolean onStroke)
+ public boolean hit(Rectangle rect, Shape text, boolean onStroke)
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
public GraphicsConfiguration getDeviceConfiguration()
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
public void setComposite(Composite comp)
@@ -1141,87 +1101,81 @@ public class GdkGraphics2D extends Graphics2D
if (comp instanceof AlphaComposite)
{
- AlphaComposite a = (AlphaComposite) comp;
- cairoSetOperator(a.getRule());
- Color c = getColor();
- setColor(new Color(c.getRed(),
- c.getGreen(),
- c.getBlue(),
- (int) (a.getAlpha() * ((float) c.getAlpha()))));
+ AlphaComposite a = (AlphaComposite) comp;
+ cairoSetOperator(a.getRule());
+ Color c = getColor();
+ setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(),
+ (int) (a.getAlpha() * ((float) c.getAlpha()))));
}
else
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void setRenderingHint(RenderingHints.Key hintKey,
- Object hintValue)
+ public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
{
- hints.put (hintKey, hintValue);
-
+ hints.put(hintKey, hintValue);
+
if (hintKey.equals(RenderingHints.KEY_INTERPOLATION)
- || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION))
+ || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION))
{
-
- if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
- cairoSurfaceSetFilter(0);
-
- else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- cairoSurfaceSetFilter(1);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
- cairoSurfaceSetFilter(2);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
- cairoSurfaceSetFilter(3);
-
- else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
- cairoSurfaceSetFilter(4);
-
+ if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ cairoSurfaceSetFilter(0);
+
+ else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ cairoSurfaceSetFilter(1);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ cairoSurfaceSetFilter(2);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ cairoSurfaceSetFilter(3);
+
+ else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ cairoSurfaceSetFilter(4);
}
- shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
- || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
-
+ shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+ || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
}
public Object getRenderingHint(RenderingHints.Key hintKey)
{
- return hints.get (hintKey);
+ return hints.get(hintKey);
}
-
+
public void setRenderingHints(Map hints)
{
- this.hints = new RenderingHints (getDefaultHints ());
- this.hints.add (new RenderingHints (hints));
-
- if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+ this.hints = new RenderingHints(getDefaultHints());
+ this.hints.add(new RenderingHints(hints));
+
+ if (hints.containsKey(RenderingHints.KEY_INTERPOLATION))
+ {
+ if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
+ cairoSurfaceSetFilter(0);
+
+ else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
+ cairoSurfaceSetFilter(1);
+ }
+
+ if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
{
- if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
- cairoSurfaceSetFilter(0);
-
- else if(hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- cairoSurfaceSetFilter(1);
+ if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
+ cairoSurfaceSetFilter(2);
+
+ else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
+ cairoSurfaceSetFilter(3);
+
+ else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
+ cairoSurfaceSetFilter(4);
}
-
- if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION))
- {
- if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED))
- cairoSurfaceSetFilter(2);
-
- else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY))
- cairoSurfaceSetFilter(3);
-
- else if(hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT))
- cairoSurfaceSetFilter(4);
- }
-
- shiftDrawCalls = hints.containsValue (RenderingHints.VALUE_STROKE_NORMALIZE)
- || hints.containsValue (RenderingHints.VALUE_STROKE_DEFAULT);
+
+ shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE)
+ || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT);
}
public void addRenderingHints(Map hints)
{
- this.hints.add (new RenderingHints (hints));
+ this.hints.add(new RenderingHints(hints));
}
public RenderingHints getRenderingHints()
@@ -1237,70 +1191,62 @@ public class GdkGraphics2D extends Graphics2D
return comp;
}
- public FontRenderContext getFontRenderContext ()
+ public FontRenderContext getFontRenderContext()
{
- return new FontRenderContext (transform, true, true);
+ return new FontRenderContext(transform, true, true);
}
- public void copyArea (int x, int y, int width, int height, int dx, int dy)
+ public void copyArea(int x, int y, int width, int height, int dx, int dy)
{
- throw new java.lang.UnsupportedOperationException ();
+ throw new java.lang.UnsupportedOperationException();
}
- public void drawArc (int x, int y, int width, int height,
- int startAngle, int arcAngle)
+ public void drawArc(int x, int y, int width, int height, int startAngle,
+ int arcAngle)
{
- draw (new Arc2D.Double((double)x, (double)y,
- (double)width, (double)height,
- (double)startAngle, (double)arcAngle,
- Arc2D.OPEN));
+ draw(new Arc2D.Double((double) x, (double) y, (double) width,
+ (double) height, (double) startAngle,
+ (double) arcAngle, Arc2D.OPEN));
}
- public boolean drawImage (Image img, int x, int y, Color bgcolor,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, Color bgcolor,
+ ImageObserver observer)
{
- return drawImage (img, x, y, img.getWidth (observer),
- img.getHeight (observer), bgcolor, observer);
+ return drawImage(img, x, y, img.getWidth(observer),
+ img.getHeight(observer), bgcolor, observer);
}
- public boolean drawImage (Image img, int x, int y, int width, int height,
- Color bgcolor, ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, int width, int height,
+ Color bgcolor, ImageObserver observer)
{
-
- double scaleX = width / (double) img.getWidth (observer);
- double scaleY = height / (double) img.getHeight (observer);
-
- return drawImage (img,
- new AffineTransform(scaleX, 0f, 0f, scaleY, x, y),
- bgcolor,
- observer);
+ double scaleX = width / (double) img.getWidth(observer);
+ double scaleY = height / (double) img.getHeight(observer);
+ return drawImage(img, new AffineTransform(scaleX, 0f, 0f, scaleY, x, y),
+ bgcolor, observer);
}
- public boolean drawImage (Image img, int x, int y, int width, int height,
- ImageObserver observer)
+ public boolean drawImage(Image img, int x, int y, int width, int height,
+ ImageObserver observer)
{
-
- return drawImage (img, x, y, width, height, bg, observer);
-
+ return drawImage(img, x, y, width, height, bg, observer);
}
- public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
- int sx1, int sy1, int sx2, int sy2,
- Color bgcolor, ImageObserver observer)
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2, Color bgcolor,
+ ImageObserver observer)
{
-
if (img == null)
return false;
- Image subImage;
-
+ Image subImage;
+
int sourceWidth = sx2 - sx1;
- int sourceHeight = sy2 - sy1;
-
+ int sourceHeight = sy2 - sy1;
+
int destWidth = dx2 - dx1;
int destHeight = dy2 - dy1;
-
+
double scaleX = destWidth / (double) sourceWidth;
double scaleY = destHeight / (double) sourceHeight;
@@ -1309,48 +1255,42 @@ public class GdkGraphics2D extends Graphics2D
if (img instanceof BufferedImage)
{
-
- BufferedImage b = (BufferedImage) img;
- subImage = b.getSubimage(sx1,sy1,sx2,sy2);
- }
- else
+ BufferedImage b = (BufferedImage) img;
+ subImage = b.getSubimage(sx1, sy1, sx2, sy2);
+ }
+ else
{
-
- // FIXME: This code currently doesn't work. Null Pointer
- // exception is thrown in this case. This happens
- // because img.getSource() always returns null, since source gets
- // never initialized when it is created with the help of
- // createImage(int width, int height).
-
- CropImageFilter filter = new CropImageFilter(sx1,sx2,sx2,sy2);
- FilteredImageSource src = new FilteredImageSource(img.getSource(),
- filter);
-
- subImage = Toolkit.getDefaultToolkit().createImage(src);
+ // FIXME: This code currently doesn't work. Null Pointer
+ // exception is thrown in this case. This happens
+ // because img.getSource() always returns null, since source gets
+ // never initialized when it is created with the help of
+ // createImage(int width, int height).
+ CropImageFilter filter = new CropImageFilter(sx1, sx2, sx2, sy2);
+ FilteredImageSource src = new FilteredImageSource(img.getSource(),
+ filter);
+
+ subImage = Toolkit.getDefaultToolkit().createImage(src);
}
- return drawImage(subImage, new AffineTransform(scaleX, 0, 0,
- scaleY, dx1, dy1),
- bgcolor,
- observer);
+ return drawImage(subImage,
+ new AffineTransform(scaleX, 0, 0, scaleY, dx1, dy1),
+ bgcolor, observer);
}
- public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
- int sx1, int sy1, int sx2, int sy2,
- ImageObserver observer)
+ public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2,
+ ImageObserver observer)
{
-
- return drawImage (img, dx1, dy1, dx2, dy2,
- sx1, sy1, sx2, sy2, bg, observer);
+ return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bg, observer);
}
public void drawOval(int x, int y, int width, int height)
{
- drawArc (x, y, width, height, 0, 360);
+ drawArc(x, y, width, height, 0, 360);
}
- public void drawRoundRect(int x, int y, int width, int height,
- int arcWidth, int arcHeight)
+ public void drawRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
{
if (arcWidth > width)
arcWidth = width;
@@ -1360,93 +1300,89 @@ public class GdkGraphics2D extends Graphics2D
int xx = x + width - arcWidth;
int yy = y + height - arcHeight;
- drawArc (x, y, arcWidth, arcHeight, 90, 90);
- drawArc (xx, y, arcWidth, arcHeight, 0, 90);
- drawArc (xx, yy, arcWidth, arcHeight, 270, 90);
- drawArc (x, yy, arcWidth, arcHeight, 180, 90);
+ drawArc(x, y, arcWidth, arcHeight, 90, 90);
+ drawArc(xx, y, arcWidth, arcHeight, 0, 90);
+ drawArc(xx, yy, arcWidth, arcHeight, 270, 90);
+ drawArc(x, yy, arcWidth, arcHeight, 180, 90);
int y1 = y + arcHeight / 2;
int y2 = y + height - arcHeight / 2;
- drawLine (x, y1, x, y2);
- drawLine (x + width, y1, x + width, y2);
+ drawLine(x, y1, x, y2);
+ drawLine(x + width, y1, x + width, y2);
int x1 = x + arcWidth / 2;
int x2 = x + width - arcWidth / 2;
- drawLine (x1, y, x2, y);
- drawLine (x1, y + height, x2, y + height);
+ drawLine(x1, y, x2, y);
+ drawLine(x1, y + height, x2, y + height);
}
// these are the most accelerated painting paths
- native void cairoDrawGdkGlyphVector (GdkFontPeer f, GdkGlyphVector gv, float x, float y);
- native void cairoDrawGdkTextLayout (GdkFontPeer f, GdkTextLayout gl, float x, float y);
- native void cairoDrawString (GdkFontPeer f, String str, float x, float y);
+ native void cairoDrawGlyphVector(GdkFontPeer font,
+ float x, float y, int n,
+ int[] codes, float[] positions);
- GdkFontPeer getFontPeer()
- {
- return (GdkFontPeer) getFont().getPeer();
- }
+ native void cairoDrawGdkTextLayout(GdkTextLayout gl,
+ float x, float y);
- public void drawGdkGlyphVector(GdkGlyphVector gv, float x, float y)
+ GdkFontPeer getFontPeer()
{
- cairoDrawGdkGlyphVector(getFontPeer(), gv, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ return (GdkFontPeer) getFont().getPeer();
}
public void drawGdkTextLayout(GdkTextLayout gl, float x, float y)
{
- cairoDrawGdkTextLayout(getFontPeer(), gl, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ cairoDrawGdkTextLayout (gl, x, y);
+ updateBufferedImage ();
}
- public void drawString (String str, float x, float y)
+ public void drawString(String str, float x, float y)
{
- cairoDrawString(getFontPeer(), str, x, y);
- if (isBufferedImageGraphics ())
- updateBufferedImage();
+ drawGlyphVector(getFont().createGlyphVector(null, str), x, y);
+ updateBufferedImage ();
}
- public void drawString (String str, int x, int y)
+ public void drawString(String str, int x, int y)
{
- drawString (str, (float)x, (float)y);
+ drawString (str, (float) x, (float) y);
}
- public void drawString (AttributedCharacterIterator ci, int x, int y)
+ public void drawString(AttributedCharacterIterator ci, int x, int y)
{
- drawString (ci, (float)x, (float)y);
+ drawString (ci, (float) x, (float) y);
}
- public void drawGlyphVector (GlyphVector gv, float x, float y)
+ public void drawGlyphVector(GlyphVector gv, float x, float y)
{
- if (gv instanceof GdkGlyphVector)
- drawGdkGlyphVector((GdkGlyphVector)gv, x, y);
- else
- throw new java.lang.UnsupportedOperationException ();
+ int n = gv.getNumGlyphs ();
+ int[] codes = gv.getGlyphCodes (0, n, null);
+ float[] positions = gv.getGlyphPositions (0, n, null);
+
+ setFont (gv.getFont ());
+ cairoDrawGlyphVector (getFontPeer(), x, y, n, codes, positions);
+ updateBufferedImage ();
}
- public void drawString (AttributedCharacterIterator ci, float x, float y)
+ public void drawString(AttributedCharacterIterator ci, float x, float y)
{
- GlyphVector gv = font.createGlyphVector (getFontRenderContext(), ci);
- drawGlyphVector (gv, x, y);
+ GlyphVector gv = getFont().createGlyphVector(getFontRenderContext(), ci);
+ drawGlyphVector(gv, x, y);
}
- public void fillArc (int x, int y, int width, int height,
- int startAngle, int arcAngle)
+ public void fillArc(int x, int y, int width, int height, int startAngle,
+ int arcAngle)
{
- fill (new Arc2D.Double((double)x, (double)y,
- (double)width, (double)height,
- (double)startAngle, (double)arcAngle,
- Arc2D.OPEN));
+ fill(new Arc2D.Double((double) x, (double) y, (double) width,
+ (double) height, (double) startAngle,
+ (double) arcAngle, Arc2D.OPEN));
}
public void fillOval(int x, int y, int width, int height)
{
- fillArc (x, y, width, height, 0, 360);
+ fillArc(x, y, width, height, 0, 360);
}
- public void fillRoundRect (int x, int y, int width, int height,
- int arcWidth, int arcHeight)
+ public void fillRoundRect(int x, int y, int width, int height, int arcWidth,
+ int arcHeight)
{
if (arcWidth > width)
arcWidth = width;
@@ -1456,17 +1392,19 @@ public class GdkGraphics2D extends Graphics2D
int xx = x + width - arcWidth;
int yy = y + height - arcHeight;
- fillArc (x, y, arcWidth, arcHeight, 90, 90);
- fillArc (xx, y, arcWidth, arcHeight, 0, 90);
- fillArc (xx, yy, arcWidth, arcHeight, 270, 90);
- fillArc (x, yy, arcWidth, arcHeight, 180, 90);
+ fillArc(x, y, arcWidth, arcHeight, 90, 90);
+ fillArc(xx, y, arcWidth, arcHeight, 0, 90);
+ fillArc(xx, yy, arcWidth, arcHeight, 270, 90);
+ fillArc(x, yy, arcWidth, arcHeight, 180, 90);
- fillRect (x, y + arcHeight / 2, width, height - arcHeight + 1);
- fillRect (x + arcWidth / 2, y, width - arcWidth + 1, height);
+ fillRect(x, y + arcHeight / 2, width, height - arcHeight + 1);
+ fillRect(x + arcWidth / 2, y, width - arcWidth + 1, height);
}
- public Font getFont ()
+ public Font getFont()
{
+ if (font == null)
+ return new Font("SansSerif", Font.PLAIN, 12);
return font;
}
@@ -1475,38 +1413,34 @@ public class GdkGraphics2D extends Graphics2D
// GtkFontMetrics into the drawing kit and ask cairo ourselves.
static native void releasePeerGraphicsResource(GdkFontPeer f);
- static native void getPeerTextMetrics (GdkFontPeer f, String str, double [] metrics);
- static native void getPeerFontMetrics (GdkFontPeer f, double [] metrics);
- public FontMetrics getFontMetrics ()
+ public FontMetrics getFontMetrics()
{
- // the reason we go via the toolkit here is to try to get
- // a cached object. the toolkit keeps such a cache.
- return Toolkit.getDefaultToolkit ().getFontMetrics (font);
+ return getFontMetrics(getFont());
}
- public FontMetrics getFontMetrics (Font f)
+ public FontMetrics getFontMetrics(Font f)
{
// the reason we go via the toolkit here is to try to get
// a cached object. the toolkit keeps such a cache.
- return Toolkit.getDefaultToolkit ().getFontMetrics (f);
+ return Toolkit.getDefaultToolkit().getFontMetrics(f);
}
- public void setFont (Font f)
+ public void setFont(Font f)
{
if (f.getPeer() instanceof GdkFontPeer)
font = f;
else
font =
- ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
- .getFont (f.getName(), f.getAttributes ());
+ ((ClasspathToolkit)(Toolkit.getDefaultToolkit()))
+ .getFont(f.getName(), f.getAttributes());
}
-
+
public String toString()
{
- return getClass ().getName () +
- "[font=" + font.toString () +
- ",color=" + fg.toString () + "]";
+ return (getClass().getName()
+ + "[font=" + getFont().toString()
+ + ",color=" + fg.toString()
+ + "]");
}
-
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
new file mode 100644
index 00000000000..c485db228ba
--- /dev/null
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsConfiguration.java
@@ -0,0 +1,138 @@
+/* GdkGraphicsConfiguration.java -- describes characteristics of graphics
+ Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.peer.gtk;
+
+import java.awt.BufferCapabilities;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.ImageCapabilities;
+import java.awt.Rectangle;
+
+import java.awt.geom.AffineTransform;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.VolatileImage;
+
+public class GdkGraphicsConfiguration
+ extends GraphicsConfiguration
+{
+ GdkScreenGraphicsDevice gdkScreenGraphicsDevice;
+ ColorModel cm;
+ Rectangle bounds;
+
+ public GtkToolkit getToolkit()
+ {
+ return gdkScreenGraphicsDevice.getToolkit();
+ }
+
+ public GdkGraphicsConfiguration(GdkScreenGraphicsDevice dev)
+ {
+ this.gdkScreenGraphicsDevice = dev;
+ cm = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).getColorModel();
+ bounds = getToolkit().getBounds();
+ }
+
+ public GraphicsDevice getDevice()
+ {
+ return gdkScreenGraphicsDevice;
+ }
+
+ public BufferedImage createCompatibleImage(int w, int h)
+ {
+ return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+ }
+
+ public BufferedImage createCompatibleImage(int w, int h,
+ int transparency)
+ {
+ return createCompatibleImage(w, h);
+ }
+
+ public VolatileImage createCompatibleVolatileImage(int w, int h)
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+ public VolatileImage createCompatibleVolatileImage(int w, int h,
+ ImageCapabilities caps)
+ throws java.awt.AWTException
+ {
+ throw new java.lang.UnsupportedOperationException ();
+ }
+
+ public ColorModel getColorModel()
+ {
+ return cm;
+ }
+
+ public ColorModel getColorModel(int transparency)
+ {
+ return getColorModel();
+ }
+
+ public AffineTransform getDefaultTransform()
+ {
+ // FIXME: extract the GDK DPI information here.
+ return new AffineTransform();
+ }
+
+ public AffineTransform getNormalizingTransform()
+ {
+ // FIXME: extract the GDK DPI information here.
+ return new AffineTransform();
+ }
+
+ public Rectangle getBounds()
+ {
+ return bounds;
+ }
+
+ public BufferCapabilities getBufferCapabilities()
+ {
+ return new BufferCapabilities(getImageCapabilities(),
+ getImageCapabilities(),
+ BufferCapabilities.FlipContents.UNDEFINED);
+ }
+
+ public ImageCapabilities getImageCapabilities()
+ {
+ return new ImageCapabilities(false);
+ }
+
+}
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
index 45e0c21c0f2..3f7b87f45cc 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
@@ -1,5 +1,5 @@
/* GdkGraphicsEnvironment.java -- information about the graphics environment
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -42,34 +42,46 @@ import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
-import java.awt.Rectangle;
-import java.awt.Shape;
+import java.awt.HeadlessException;
import java.awt.image.BufferedImage;
import java.util.Locale;
public class GdkGraphicsEnvironment extends GraphicsEnvironment
{
- public GdkGraphicsEnvironment ()
+ GtkToolkit gtkToolkit;
+
+ public GtkToolkit getToolkit()
+ {
+ return gtkToolkit;
+ }
+
+ public GdkGraphicsEnvironment (GtkToolkit tk)
{
super();
+ gtkToolkit = tk;
}
public GraphicsDevice[] getScreenDevices ()
{
- throw new java.lang.UnsupportedOperationException ();
+ // FIXME: Support multiple screens, since GDK can.
+ return new GraphicsDevice[] { new GdkScreenGraphicsDevice (this) };
}
public GraphicsDevice getDefaultScreenDevice ()
{
- throw new java.lang.UnsupportedOperationException ();
+ if (GraphicsEnvironment.isHeadless ())
+ throw new HeadlessException ();
+
+ return new GdkScreenGraphicsDevice (this);
}
public Graphics2D createGraphics (BufferedImage image)
{
return new GdkGraphics2D (image);
}
- native private int nativeGetNumFontFamilies ();
- native private void nativeGetFontFamilies (String[] family_names);
+
+ private native int nativeGetNumFontFamilies();
+ private native void nativeGetFontFamilies(String[] family_names);
public Font[] getAllFonts ()
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
index a7b93e5b9ad..ee6c38f3c3a 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
@@ -1,5 +1,5 @@
/* GdkPixbufDecoder.java -- Image data decoding object
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,14 +45,31 @@ import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.io.DataOutput;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Locale;
import java.util.Vector;
+import javax.imageio.IIOImage;
+import javax.imageio.ImageReadParam;
+import javax.imageio.ImageReader;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.spi.IIORegistry;
+import javax.imageio.spi.ImageReaderSpi;
+import javax.imageio.spi.ImageWriterSpi;
+import javax.imageio.stream.ImageInputStream;
+import javax.imageio.stream.ImageOutputStream;
+
public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
{
static
@@ -63,22 +80,30 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
}
initStaticState ();
}
- native static void initStaticState ();
+
+ static native void initStaticState();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
+ private boolean initialized = false;
// the current set of ImageConsumers for this decoder
Vector curr;
// interface to GdkPixbuf
native void initState ();
- native void pumpBytes (byte bytes[], int len);
+ native void pumpBytes (byte[] bytes, int len);
native void finish ();
+ static native void streamImage(int[] bytes, String format, int width, int height, boolean hasAlpha, DataOutput sink);
// gdk-pixbuf provids data in RGBA format
static final ColorModel cm = new DirectColorModel (32, 0xff000000,
0x00ff0000,
0x0000ff00,
0x000000ff);
+ public GdkPixbufDecoder (InputStream in)
+ {
+ super (in);
+ }
+
public GdkPixbufDecoder (String filename)
{
super (filename);
@@ -150,24 +175,349 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
curr = null;
}
- // remaining helper class and static method is a convenience for the Gtk
- // peers, for loading a BufferedImage in off a disk file. one would think
- // this ought to be fairly straightforward, but it does not appear
- // anywhere else I can find.
+ public void finalize()
+ {
+ finish();
+ }
+
+
+ public static class ImageFormatSpec
+ {
+ public String name;
+ public boolean writable = false;
+ public ArrayList mimeTypes = new ArrayList();
+ public ArrayList extensions = new ArrayList();
+
+ public ImageFormatSpec(String name, boolean writable)
+ {
+ this.name = name;
+ this.writable = writable;
+ }
+
+ public synchronized void addMimeType(String m)
+ {
+ mimeTypes.add(m);
+ }
+
+ public synchronized void addExtension(String e)
+ {
+ extensions.add(e);
+ }
+ }
+
+ static ArrayList imageFormatSpecs;
+
+ public static ImageFormatSpec registerFormat(String name, boolean writable)
+ {
+ ImageFormatSpec ifs = new ImageFormatSpec(name, writable);
+ synchronized(GdkPixbufDecoder.class)
+ {
+ if (imageFormatSpecs == null)
+ imageFormatSpecs = new ArrayList();
+ imageFormatSpecs.add(ifs);
+ }
+ return ifs;
+ }
+
+ static String[] getFormatNames(boolean writable)
+ {
+ ArrayList names = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ names.add(ifs.name);
+
+ /*
+ * In order to make the filtering code work, we need to register
+ * this type under every "format name" likely to be used as a synonym.
+ * This generally means "all the extensions people might use".
+ */
+
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ names.add((String) j.next());
+ }
+ }
+ Object[] objs = names.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+ static String[] getFormatExtensions(boolean writable)
+ {
+ ArrayList extensions = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ extensions.add((String) j.next());
+ }
+ }
+ Object[] objs = extensions.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+ static String[] getFormatMimeTypes(boolean writable)
+ {
+ ArrayList mimeTypes = new ArrayList();
+ synchronized (imageFormatSpecs)
+ {
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+ if (writable && !ifs.writable)
+ continue;
+ Iterator j = ifs.mimeTypes.iterator();
+ while (j.hasNext())
+ mimeTypes.add((String) j.next());
+ }
+ }
+ Object[] objs = mimeTypes.toArray();
+ String[] strings = new String[objs.length];
+ for (int i = 0; i < objs.length; ++i)
+ strings[i] = (String) objs[i];
+ return strings;
+ }
+
+
+ static String findFormatName(Object ext, boolean needWritable)
+ {
+ if (ext == null)
+ throw new IllegalArgumentException("extension is null");
+
+ if (!(ext instanceof String))
+ throw new IllegalArgumentException("extension is not a string");
+
+ String str = (String) ext;
+
+ Iterator i = imageFormatSpecs.iterator();
+ while (i.hasNext())
+ {
+ ImageFormatSpec ifs = (ImageFormatSpec) i.next();
+
+ if (needWritable && !ifs.writable)
+ continue;
+
+ if (ifs.name.equals(str))
+ return str;
+
+ Iterator j = ifs.extensions.iterator();
+ while (j.hasNext())
+ {
+ String extension = (String)j.next();
+ if (extension.equals(str))
+ return ifs.name;
+ }
+
+ j = ifs.mimeTypes.iterator();
+ while (j.hasNext())
+ {
+ String mimeType = (String)j.next();
+ if (mimeType.equals(str))
+ return ifs.name;
+ }
+ }
+ throw new IllegalArgumentException("unknown extension '" + str + "'");
+ }
+
+ private static GdkPixbufReaderSpi readerSpi;
+ private static GdkPixbufWriterSpi writerSpi;
+
+ public static synchronized GdkPixbufReaderSpi getReaderSpi()
+ {
+ if (readerSpi == null)
+ readerSpi = new GdkPixbufReaderSpi();
+ return readerSpi;
+ }
+
+ public static synchronized GdkPixbufWriterSpi getWriterSpi()
+ {
+ if (writerSpi == null)
+ writerSpi = new GdkPixbufWriterSpi();
+ return writerSpi;
+ }
+
+ public static void registerSpis(IIORegistry reg)
+ {
+ reg.registerServiceProvider(getReaderSpi(), ImageReaderSpi.class);
+ reg.registerServiceProvider(getWriterSpi(), ImageWriterSpi.class);
+ }
- private static class BufferedImageBuilder implements ImageConsumer
+ public static class GdkPixbufWriterSpi extends ImageWriterSpi
{
+ public GdkPixbufWriterSpi()
+ {
+ super("GdkPixbuf", "2.x",
+ GdkPixbufDecoder.getFormatNames(true),
+ GdkPixbufDecoder.getFormatExtensions(true),
+ GdkPixbufDecoder.getFormatMimeTypes(true),
+ "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriter",
+ new Class[] { ImageOutputStream.class },
+ new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReaderSpi" },
+ false, null, null, null, null,
+ false, null, null, null, null);
+ }
+
+ public boolean canEncodeImage(ImageTypeSpecifier ts)
+ {
+ return true;
+ }
+
+ public ImageWriter createWriterInstance(Object ext)
+ {
+ return new GdkPixbufWriter(this, ext);
+ }
+
+ public String getDescription(java.util.Locale loc)
+ {
+ return "GdkPixbuf Writer SPI";
+ }
+
+ }
+
+ public static class GdkPixbufReaderSpi extends ImageReaderSpi
+ {
+ public GdkPixbufReaderSpi()
+ {
+ super("GdkPixbuf", "2.x",
+ GdkPixbufDecoder.getFormatNames(false),
+ GdkPixbufDecoder.getFormatExtensions(false),
+ GdkPixbufDecoder.getFormatMimeTypes(false),
+ "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufReader",
+ new Class[] { ImageInputStream.class },
+ new String[] { "gnu.java.awt.peer.gtk.GdkPixbufDecoder$GdkPixbufWriterSpi" },
+ false, null, null, null, null,
+ false, null, null, null, null);
+ }
+
+ public boolean canDecodeInput(Object obj)
+ {
+ return true;
+ }
+
+ public ImageReader createReaderInstance(Object ext)
+ {
+ return new GdkPixbufReader(this, ext);
+ }
+
+ public String getDescription(Locale loc)
+ {
+ return "GdkPixbuf Reader SPI";
+ }
+ }
+
+ private static class GdkPixbufWriter
+ extends ImageWriter
+ {
+ String ext;
+ public GdkPixbufWriter(GdkPixbufWriterSpi ownerSpi, Object ext)
+ {
+ super(ownerSpi);
+ this.ext = findFormatName(ext, true);
+ }
+
+ public IIOMetadata convertImageMetadata (IIOMetadata inData,
+ ImageTypeSpecifier imageType,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata convertStreamMetadata (IIOMetadata inData,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata getDefaultImageMetadata (ImageTypeSpecifier imageType,
+ ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public IIOMetadata getDefaultStreamMetadata (ImageWriteParam param)
+ {
+ return null;
+ }
+
+ public void write (IIOMetadata streamMetadata, IIOImage i, ImageWriteParam param)
+ throws IOException
+ {
+ RenderedImage image = i.getRenderedImage();
+ Raster ras = image.getData();
+ int width = ras.getWidth();
+ int height = ras.getHeight();
+ ColorModel model = image.getColorModel();
+ int[] pixels = GdkGraphics2D.findSimpleIntegerArray (image.getColorModel(), ras);
+
+ if (pixels == null)
+ {
+ BufferedImage img = new BufferedImage(width, height,
+ (model != null && model.hasAlpha() ?
+ BufferedImage.TYPE_INT_ARGB
+ : BufferedImage.TYPE_INT_RGB));
+ int[] pix = new int[4];
+ for (int y = 0; y < height; ++y)
+ for (int x = 0; x < width; ++x)
+ img.setRGB(x, y, model.getRGB(ras.getPixel(x, y, pix)));
+ pixels = GdkGraphics2D.findSimpleIntegerArray (img.getColorModel(),
+ img.getRaster());
+ model = img.getColorModel();
+ }
+
+ processImageStarted(1);
+ streamImage(pixels, this.ext, width, height, model.hasAlpha(),
+ (DataOutput) this.getOutput());
+ processImageComplete();
+ }
+ }
+
+ private static class GdkPixbufReader
+ extends ImageReader
+ implements ImageConsumer
+ {
+ // ImageConsumer parts
+ GdkPixbufDecoder dec;
BufferedImage bufferedImage;
ColorModel defaultModel;
+ int width;
+ int height;
+ String ext;
+
+ public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext)
+ {
+ super(ownerSpi);
+ this.ext = findFormatName(ext, false);
+ }
- public BufferedImage getBufferedImage()
+ public GdkPixbufReader(GdkPixbufReaderSpi ownerSpi, Object ext, GdkPixbufDecoder d)
{
- return bufferedImage;
+ this(ownerSpi, ext);
+ dec = d;
}
- public void setDimensions(int width, int height)
+ public void setDimensions(int w, int h)
{
- bufferedImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB);
+ processImageStarted(1);
+ width = w;
+ height = h;
}
public void setProperties(Hashtable props) {}
@@ -189,65 +539,137 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
ColorModel model, int[] pixels,
int offset, int scansize)
{
- if (bufferedImage != null)
+ if (model == null)
+ model = defaultModel;
+
+ if (bufferedImage == null)
{
+ bufferedImage = new BufferedImage (width, height, (model != null && model.hasAlpha() ?
+ BufferedImage.TYPE_INT_ARGB
+ : BufferedImage.TYPE_INT_RGB));
+ }
- if (model == null)
- model = defaultModel;
-
- int pixels2[];
- if (model != null)
- {
- pixels2 = new int[pixels.length];
- for (int yy = 0; yy < h; yy++)
- for (int xx = 0; xx < w; xx++)
- {
- int i = yy * scansize + xx;
- pixels2[i] = model.getRGB (pixels[i]);
- }
- }
- else
- pixels2 = pixels;
-
- bufferedImage.setRGB (x, y, w, h, pixels2, offset, scansize);
+ int pixels2[];
+ if (model != null)
+ {
+ pixels2 = new int[pixels.length];
+ for (int yy = 0; yy < h; yy++)
+ for (int xx = 0; xx < w; xx++)
+ {
+ int i = yy * scansize + xx;
+ pixels2[i] = model.getRGB (pixels[i]);
+ }
}
+ else
+ pixels2 = pixels;
+
+ bufferedImage.setRGB (x, y, w, h, pixels2, offset, scansize);
+ processImageProgress(y / (height == 0 ? 1 : height));
+ }
+
+ public void imageComplete(int status)
+ {
+ processImageComplete();
+ }
+
+ public BufferedImage getBufferedImage()
+ {
+ if (bufferedImage == null && dec != null)
+ dec.startProduction (this);
+ return bufferedImage;
+ }
+
+ // ImageReader parts
+
+ public int getNumImages(boolean allowSearch)
+ throws IOException
+ {
+ return 1;
+ }
+
+ public IIOMetadata getImageMetadata(int i)
+ {
+ return null;
+ }
+
+ public IIOMetadata getStreamMetadata()
+ throws IOException
+ {
+ return null;
}
- public void imageComplete(int status) {}
+ public Iterator getImageTypes(int imageIndex)
+ throws IOException
+ {
+ BufferedImage img = getBufferedImage();
+ Vector vec = new Vector();
+ vec.add(new ImageTypeSpecifier(img));
+ return vec.iterator();
+ }
+
+ public int getHeight(int imageIndex)
+ throws IOException
+ {
+ return getBufferedImage().getHeight();
+ }
+
+ public int getWidth(int imageIndex)
+ throws IOException
+ {
+ return getBufferedImage().getWidth();
+ }
+
+ public void setInput(Object input,
+ boolean seekForwardOnly,
+ boolean ignoreMetadata)
+ {
+ super.setInput(input, seekForwardOnly, ignoreMetadata);
+ dec = new GdkPixbufDecoder((InputStream) getInput());
+ }
+
+ public BufferedImage read(int imageIndex, ImageReadParam param)
+ throws IOException
+ {
+ return getBufferedImage ();
+ }
}
+ // remaining helper class and static method is a convenience for the Gtk
+ // peers, for loading a BufferedImage in off a disk file without going
+ // through the whole imageio system.
+
public static BufferedImage createBufferedImage (String filename)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (filename);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (filename));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (URL u)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (u);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (u));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (byte[] imagedata, int imageoffset,
int imagelength)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- GdkPixbufDecoder dec = new GdkPixbufDecoder (imagedata, imageoffset, imagelength);
- dec.startProduction (bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(),
+ "png", // reader auto-detects, doesn't matter
+ new GdkPixbufDecoder (imagedata,
+ imageoffset,
+ imagelength));
+ return r.getBufferedImage ();
}
public static BufferedImage createBufferedImage (ImageProducer producer)
{
- BufferedImageBuilder bb = new BufferedImageBuilder ();
- producer.startProduction(bb);
- return bb.getBufferedImage ();
+ GdkPixbufReader r = new GdkPixbufReader (getReaderSpi(), "png" /* ignored */, null);
+ producer.startProduction(r);
+ return r.getBufferedImage ();
}
-
-
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java b/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
new file mode 100644
index 00000000000..054e7332293
--- /dev/null
+++ b/libjava/gnu/java/awt/peer/gtk/GdkRobotPeer.java
@@ -0,0 +1,94 @@
+/* GdkRobot.java -- an XTest implementation of RobotPeer
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.awt.peer.gtk;
+
+import java.awt.AWTException;
+import java.awt.GraphicsDevice;
+import java.awt.Rectangle;
+import java.awt.image.ColorModel;
+import java.awt.image.DirectColorModel;
+import java.awt.peer.RobotPeer;
+
+/**
+ * Implements the RobotPeer interface using the XTest extension.
+ *
+ * @author Thomas Fitzsimmons
+ */
+public class GdkRobotPeer implements RobotPeer
+{
+ // gdk-pixbuf provides data in RGBA format
+ static final ColorModel cm = new DirectColorModel (32, 0xff000000,
+ 0x00ff0000,
+ 0x0000ff00,
+ 0x000000ff);
+
+ public GdkRobotPeer (GraphicsDevice screen) throws AWTException
+ {
+ // FIXME: make use of screen parameter when GraphicsDevice is
+ // implemented.
+ if (!initXTest ())
+ throw new AWTException ("XTest extension not supported");
+ }
+
+ native boolean initXTest ();
+
+ // RobotPeer methods
+ public native void mouseMove (int x, int y);
+ public native void mousePress (int buttons);
+ public native void mouseRelease (int buttons);
+ public native void mouseWheel (int wheelAmt);
+ public native void keyPress (int keycode);
+ public native void keyRelease (int keycode);
+ native int[] nativeGetRGBPixels (int x, int y, int width, int height);
+
+ public int getRGBPixel (int x, int y)
+ {
+ return cm.getRGB (nativeGetRGBPixels (x, y, 1, 1)[0]);
+ }
+
+ public int[] getRGBPixels (Rectangle r)
+ {
+ int[] gdk_pixels = nativeGetRGBPixels (r.x, r.y, r.width, r.height);
+ int[] pixels = new int[r.width * r.height];
+
+ for (int i = 0; i < r.width * r.height; i++)
+ pixels[i] = cm.getRGB (gdk_pixels[i]);
+
+ return pixels;
+ }
+}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkArgList.java b/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
index 28cea93db4a..bd7b46ab8b9 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkArgList.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java
@@ -1,5 +1,5 @@
-/* GtkArgList.java
- Copyright (C) 1999 Free Software Foundation, Inc.
+/* GdkScreenGraphicsDevice.java -- information about a screen device
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,39 +37,46 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.util.Vector;
-public class GtkArgList extends Vector
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+
+public class GdkScreenGraphicsDevice extends GraphicsDevice
{
- void add (GtkArg arg)
+ GdkGraphicsEnvironment env;
+
+ public GtkToolkit getToolkit()
{
- addElement (arg);
+ return env.getToolkit();
}
- void add (String name, boolean value)
- {
- addElement (new GtkArg (name, Boolean.valueOf(value)));
+ public GdkScreenGraphicsDevice (GdkGraphicsEnvironment e)
+ {
+ super ();
+ env = e;
}
-
- void add (String name, int value)
+
+ public int getType ()
{
- addElement (new GtkArg (name, new Integer (value)));
+ return GraphicsDevice.TYPE_RASTER_SCREEN;
}
- void add (String name, float value)
+ public String getIDstring ()
{
- addElement (new GtkArg (name, new Float (value)));
+ // FIXME: query X for this string
+ return "default GDK device ID string";
}
- void add (String name, Object value)
+ public GraphicsConfiguration[] getConfigurations ()
{
- addElement (new GtkArg (name, value));
+ // FIXME: query X for the list of possible configurations
+ return new GraphicsConfiguration [] { new GdkGraphicsConfiguration(this) };
}
- synchronized void setArgs (GtkComponentPeer cp)
+ public GraphicsConfiguration getDefaultConfiguration ()
{
- for (int i = 0; i < elementCount; i++)
- cp.set ((GtkArg)elementData[i]);
+
+ // FIXME: query X for default configuration
+ return new GdkGraphicsConfiguration(this);
}
}
-
diff --git a/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java b/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
index 26cfc16f0da..1a456d12a3c 100644
--- a/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
+++ b/libjava/gnu/java/awt/peer/gtk/GdkTextLayout.java
@@ -1,5 +1,5 @@
/* GdkTextLayout.java
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,25 +38,24 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
+import gnu.classpath.Configuration;
+import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphMetrics;
import java.awt.font.GlyphVector;
+import java.awt.font.TextAttribute;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
-import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
-import java.util.Map;
-import java.awt.font.TextAttribute;
-
-import gnu.classpath.Configuration;
-import gnu.java.awt.peer.ClasspathTextLayoutPeer;
+import java.text.CharacterIterator;
/**
* This is an implementation of the text layout peer interface which
@@ -83,7 +82,7 @@ public class GdkTextLayout
private native void indexToPos(int idx, double[] pos);
private native void initState ();
private native void dispose ();
- native static void initStaticState ();
+ static native void initStaticState();
private final int native_state = GtkGenericPeer.getUniqueInteger ();
protected void finalize ()
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
index 9fba828b74b..1ef992f02df 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
@@ -41,7 +41,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Button;
import java.awt.Component;
-import java.awt.Font;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
index adb7008ca3f..83aa98981fd 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
@@ -1,5 +1,5 @@
/* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,8 +39,9 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.CheckboxMenuItem;
+import java.awt.ItemSelectable;
+import java.awt.event.ItemEvent;
import java.awt.peer.CheckboxMenuItemPeer;
-import java.awt.peer.MenuItemPeer;
public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
implements CheckboxMenuItemPeer
@@ -53,5 +54,16 @@ public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
setState (menu.getState ());
}
- native public void setState (boolean t);
+ public native void setState(boolean t);
+
+ protected void postMenuActionEvent ()
+ {
+ CheckboxMenuItem item = (CheckboxMenuItem)awtWidget;
+ q().postEvent (new ItemEvent ((ItemSelectable)awtWidget,
+ ItemEvent.ITEM_STATE_CHANGED,
+ item.getActionCommand(),
+ item.getState() ? ItemEvent.DESELECTED : ItemEvent.SELECTED));
+
+ super.postMenuActionEvent();
+ }
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
index a6fd1bac183..4af88f5332c 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
@@ -40,8 +40,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
-import java.awt.Component;
-import java.awt.Font;
import java.awt.peer.CheckboxPeer;
public class GtkCheckboxPeer extends GtkComponentPeer
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
index 05464143dcf..43e48328da3 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
@@ -1,5 +1,5 @@
/* GtkChoicePeer.java -- Implements ChoicePeer with GTK
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Choice;
import java.awt.event.ItemEvent;
import java.awt.peer.ChoicePeer;
@@ -73,7 +72,7 @@ public class GtkChoicePeer extends GtkComponentPeer
native void nativeRemove (int index);
native void nativeRemoveAll ();
- native public void select (int position);
+ public native void select (int position);
public void add (String item, int index)
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java b/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
index ecc4c5cf7a1..b9cc1613b78 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkClipboard.java
@@ -1,5 +1,5 @@
/* GtkClipboard.java
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,7 +52,7 @@ public class GtkClipboard extends Clipboard
/* the number of milliseconds that we'll wait around for the
owner of the GDK_SELECTION_PRIMARY selection to convert
the requested data */
- final static int SELECTION_RECEIVED_TIMEOUT = 5000;
+ static final int SELECTION_RECEIVED_TIMEOUT = 5000;
/* We currently only support transferring of text between applications */
static String selection;
@@ -165,6 +165,6 @@ public class GtkClipboard extends Clipboard
}
native void initNativeState();
- native static void requestStringConversion();
- native static void selectionGet();
+ static native void requestStringConversion();
+ static native void selectionGet();
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 31d59ce19b0..2625f56a008 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -1,5 +1,5 @@
/* GtkComponentPeer.java -- Implements ComponentPeer with GTK
- Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -47,14 +47,12 @@ import java.awt.Cursor;
import java.awt.Dimension;
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;
import java.awt.ItemSelectable;
-import java.awt.KeyboardFocusManager;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
@@ -83,7 +81,7 @@ public class GtkComponentPeer extends GtkGenericPeer
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
native boolean isEnabled ();
- native static boolean modalHasGrab ();
+ static native boolean modalHasGrab();
native int[] gtkWidgetGetForeground ();
native int[] gtkWidgetGetBackground ();
@@ -386,7 +384,7 @@ public class GtkComponentPeer extends GtkGenericPeer
if (x == 0 && y == 0 && width == 0 && height == 0)
return;
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
new Rectangle (x, y, width, height)));
}
@@ -508,14 +506,14 @@ public class GtkComponentPeer extends GtkGenericPeer
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
{
- q.postEvent(new MouseEvent(awtComponent, id, when, mods, x, y,
+ q().postEvent(new MouseEvent(awtComponent, id, when, mods, x, y,
clickCount, popupTrigger));
}
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
@@ -535,23 +533,23 @@ public class GtkComponentPeer extends GtkGenericPeer
{
synchronized (q)
{
- q.postEvent (keyEvent);
- q.postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
+ q().postEvent (keyEvent);
+ q().postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
KeyEvent.VK_UNDEFINED, keyChar, keyLocation));
}
}
else
- q.postEvent (keyEvent);
+ q().postEvent (keyEvent);
}
protected void postFocusEvent (int id, boolean temporary)
{
- q.postEvent (new FocusEvent (awtComponent, id, temporary));
+ q().postEvent (new FocusEvent (awtComponent, id, temporary));
}
protected void postItemEvent (Object item, int stateChange)
{
- q.postEvent (new ItemEvent ((ItemSelectable)awtComponent,
+ q().postEvent (new ItemEvent ((ItemSelectable)awtComponent,
ItemEvent.ITEM_STATE_CHANGED,
item, stateChange));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 7fddd56619f..61551835ec7 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -46,7 +45,6 @@ import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Window;
-import java.awt.event.PaintEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
index af22a2723ef..9bf234404d1 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
-import java.awt.Component;
import java.awt.Dialog;
import java.awt.Graphics;
import java.awt.Rectangle;
@@ -76,7 +74,7 @@ public class GtkDialogPeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index 19925568e87..4281b49cc65 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -1,5 +1,5 @@
/* GtkFileDialogPeer.java -- Implements FileDialogPeer with GTK
- Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,12 +38,10 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
import java.awt.Dialog;
import java.awt.FileDialog;
import java.awt.Graphics;
import java.awt.Window;
-import java.awt.event.WindowEvent;
import java.awt.peer.FileDialogPeer;
import java.io.File;
import java.io.FilenameFilter;
@@ -59,11 +57,12 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
native void create (GtkContainerPeer parent);
native void connectSignals ();
native void nativeSetFile (String file);
- native public String nativeGetDirectory();
- native public void nativeSetDirectory(String directory);
+ public native String nativeGetDirectory();
+ public native void nativeSetDirectory(String directory);
native void nativeSetFilenameFilter (FilenameFilter filter);
- public void create() {
+ public void create()
+ {
create((GtkContainerPeer) awtComponent.getParent().getPeer());
FileDialog fd = (FileDialog) awtComponent;
@@ -114,7 +113,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
// GtkFileChooser requires absolute filenames. If the given filename
// is not absolute, let's construct it based on current directory.
- currentFile = fileName;
+ currentFile = fileName;
if (fileName.indexOf(FS) == 0)
{
nativeSetFile (fileName);
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
index 605d738a199..e0f070368c5 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFontPeer.java
@@ -1,5 +1,5 @@
/* GtkFontPeer.java -- Implements FontPeer with GTK+
- Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,6 @@ import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
-import java.awt.peer.FontPeer;
import java.text.CharacterIterator;
import java.util.Locale;
import java.util.MissingResourceException;
@@ -68,7 +67,7 @@ public class GtkFontPeer extends ClasspathFontPeer
}
}
- final private String Xname;
+ private final String Xname;
public GtkFontPeer (String name, int style)
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
index c0c1437b656..b22a25e8869 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
@@ -38,11 +38,8 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Component;
-import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;
-import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MenuBar;
import java.awt.Rectangle;
@@ -165,7 +162,7 @@ public class GtkFramePeer extends GtkWindowPeer
setMenuBar (frame.getMenuBar ());
setTitle (frame.getTitle ());
- setResizable (frame.isResizable ());
+ gtkWindowSetResizable (frame.isResizable ());
setIconImage(frame.getIconImage());
}
@@ -237,9 +234,9 @@ public class GtkFramePeer extends GtkWindowPeer
frame_y,
frame_width,
frame_height);
- }
- awtComponent.validate();
+ awtComponent.validate();
+ }
}
protected void postMouseEvent(int id, long when, int mods, int x, int y,
@@ -253,7 +250,7 @@ public class GtkFramePeer extends GtkWindowPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
if (!isInRepaint)
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
index 657e830bf2e..f161526f647 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.EventQueue;
+import java.awt.Toolkit;
import java.awt.event.ActionEvent;
public class GtkGenericPeer
@@ -57,6 +58,11 @@ public class GtkGenericPeer
// Dispose of our native state.
public native void dispose ();
+ static EventQueue q ()
+ {
+ return Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+ }
+
protected GtkGenericPeer (Object awtWidget)
{
this.awtWidget = awtWidget;
@@ -70,7 +76,7 @@ public class GtkGenericPeer
protected void postActionEvent (String command, int mods)
{
- q.postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED,
+ q().postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED,
command, mods));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
index 25473d78ea2..02251632b1a 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java
@@ -1,5 +1,5 @@
/* GtkLabelPeer.java -- Implements LabelPeer with GTK
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Component;
-import java.awt.Font;
import java.awt.Label;
import java.awt.peer.LabelPeer;
@@ -50,7 +48,7 @@ public class GtkLabelPeer extends GtkComponentPeer
native void gtkWidgetModifyFont (String name, int style, int size);
native void nativeSetAlignment (float alignment);
- native public void setText (String text);
+ public native void setText(String text);
native void setNativeBounds (int x, int y, int width, int height);
void create ()
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java b/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
deleted file mode 100644
index 4cbe190731c..00000000000
--- a/libjava/gnu/java/awt/peer/gtk/GtkMainThread.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GtkMainThread.java -- Runs gtk_main()
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.awt.peer.gtk;
-
-public class GtkMainThread extends GtkGenericPeer implements Runnable
-{
- private static Thread mainThread = null;
- private static Object mainThreadLock = new Object();
-
- // Whether the gtk+ subsystem has been initialized.
- private boolean gtkInitCalled = false;
-
- /**
- * Call gtk_init. It is very important that this happen before any other
- * gtk calls.
- *
- * @param portableNativeSync 1 if the Java property
- * gnu.classpath.awt.gtk.portable.native.sync is set to "true". 0 if it is
- * set to "false". -1 if unset.
- */
- static native void gtkInit(int portableNativeSync);
- native void gtkMain();
-
- public GtkMainThread()
- {
- super (null);
- synchronized (mainThreadLock)
- {
- if (mainThread != null)
- throw new IllegalStateException();
- mainThread = new Thread(this, "GtkMain");
- }
-
- synchronized (this)
- {
- mainThread.start();
-
- while (!gtkInitCalled)
- {
- try
- {
- wait();
- }
- catch (InterruptedException e) { }
- }
- }
- }
-
- public void run()
- {
- /* Pass the value of the gnu.classpath.awt.gtk.portable.native.sync system
- * property to C. */
- 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
-
- synchronized (this)
- {
- gtkInit(portableNativeSync);
- gtkInitCalled = true;
- notifyAll();
- }
- gtkMain();
- }
-}
-
-
-
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
index 90ad0c01b59..4b547f56afb 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
@@ -1,5 +1,5 @@
/* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -76,5 +76,5 @@ public class GtkMenuBarPeer extends GtkMenuComponentPeer
// nativeSetHelpMenu((MenuPeer) menu.getPeer());
}
- native public void delMenu (int index);
+ public native void delMenu(int index);
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
index dd061ed37b8..cd7ca8ac79b 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
@@ -38,8 +38,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.Font;
-import java.awt.MenuComponent;
import java.awt.peer.MenuComponentPeer;
public class GtkMenuComponentPeer extends GtkGenericPeer
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
index 81da90df012..f85648ee89c 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
@@ -1,5 +1,5 @@
/* GtkMenuItemPeer.java -- Implements MenuItemPeer with GTK+
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,11 +40,9 @@ package gnu.java.awt.peer.gtk;
import java.awt.Font;
import java.awt.Menu;
-import java.awt.MenuComponent;
import java.awt.MenuBar;
+import java.awt.MenuComponent;
import java.awt.MenuItem;
-import java.awt.peer.MenuBarPeer;
-import java.awt.peer.MenuComponentPeer;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuPeer;
@@ -111,9 +109,9 @@ public class GtkMenuItemPeer extends GtkMenuComponentPeer
setEnabled (true);
}
- native public void setEnabled (boolean b);
+ public native void setEnabled(boolean b);
- native public void setLabel (String label);
+ public native void setLabel(String label);
protected void postMenuActionEvent ()
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
index dc170b1cf12..971a349d26e 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkMenuPeer.java
@@ -1,5 +1,5 @@
/* GtkMenuPeer.java -- Implements MenuPeer with GTK+
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,8 +43,8 @@ import java.awt.Menu;
import java.awt.MenuContainer;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
-import java.awt.peer.MenuPeer;
import java.awt.peer.MenuItemPeer;
+import java.awt.peer.MenuPeer;
public class GtkMenuPeer extends GtkMenuItemPeer
implements MenuPeer
@@ -99,5 +99,5 @@ public class GtkMenuPeer extends GtkMenuItemPeer
addItem (item, key, shiftModifier);
}
- native public void delItem (int index);
+ public native void delItem(int index);
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
index 233bed75a9b..ae337a0714f 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
@@ -1,5 +1,5 @@
/* GtkScrollPanePeer.java -- Implements ScrollPanePeer with GTK
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,7 +41,6 @@ package gnu.java.awt.peer.gtk;
import java.awt.Adjustable;
import java.awt.Dimension;
import java.awt.ScrollPane;
-import java.awt.peer.ComponentPeer;
import java.awt.peer.ScrollPanePeer;
public class GtkScrollPanePeer extends GtkContainerPeer
@@ -84,9 +83,9 @@ public class GtkScrollPanePeer extends GtkContainerPeer
setPolicy (((ScrollPane) awtComponent).getScrollbarDisplayPolicy ());
}
- native public int getHScrollbarHeight ();
- native public int getVScrollbarWidth ();
- native public void setScrollPosition (int x, int y);
+ public native int getHScrollbarHeight();
+ public native int getVScrollbarWidth();
+ public native void setScrollPosition(int x, int y);
public Dimension getPreferredSize ()
{
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
index ef4289633c4..065bab12e1d 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkScrollbarPeer.java
@@ -1,5 +1,5 @@
/* GtkScrollbarPeer.java -- Implements ScrollbarPeer with GTK+
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -67,13 +67,13 @@ public class GtkScrollbarPeer extends GtkComponentPeer
super (s);
}
- native public void setLineIncrement (int amount);
- native public void setPageIncrement (int amount);
- native public void setValues (int value, int visible, int min, int max);
+ public native void setLineIncrement(int amount);
+ public native void setPageIncrement(int amount);
+ public native void setValues(int value, int visible, int min, int max);
protected void postAdjustmentEvent (int type, int value)
{
- q.postEvent (new AdjustmentEvent ((Adjustable)awtComponent,
+ q().postEvent (new AdjustmentEvent ((Adjustable)awtComponent,
AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
type, value));
}
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
index 8893e36e838..3051ecfcfa8 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
@@ -38,11 +38,8 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
-import java.awt.AWTEvent;
-import java.awt.Component;
import java.awt.Rectangle;
import java.awt.TextComponent;
-import java.awt.event.KeyEvent;
import java.awt.event.TextEvent;
import java.awt.peer.TextComponentPeer;
@@ -85,6 +82,6 @@ public class GtkTextComponentPeer extends GtkComponentPeer
protected void postTextEvent ()
{
- q.postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
+ q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
}
}
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
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
index c61eecd5aa5..eabe59140a6 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
@@ -1,5 +1,5 @@
/* GtkWindowPeer.java -- Implements WindowPeer with GTK
- Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,7 +39,6 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Component;
-import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.WindowEvent;
@@ -48,14 +47,14 @@ import java.awt.peer.WindowPeer;
public class GtkWindowPeer extends GtkContainerPeer
implements WindowPeer
{
- static protected final int GDK_WINDOW_TYPE_HINT_NORMAL = 0;
- static protected final int GDK_WINDOW_TYPE_HINT_DIALOG = 1;
- static protected final int GDK_WINDOW_TYPE_HINT_MENU = 2;
- static protected final int GDK_WINDOW_TYPE_HINT_TOOLBAR = 3;
- static protected final int GDK_WINDOW_TYPE_HINT_SPLASHSCREEN = 4;
- static protected final int GDK_WINDOW_TYPE_HINT_UTILITY = 5;
- static protected final int GDK_WINDOW_TYPE_HINT_DOCK = 6;
- static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
+ protected static final int GDK_WINDOW_TYPE_HINT_NORMAL = 0;
+ protected static final int GDK_WINDOW_TYPE_HINT_DIALOG = 1;
+ protected static final int GDK_WINDOW_TYPE_HINT_MENU = 2;
+ protected static final int GDK_WINDOW_TYPE_HINT_TOOLBAR = 3;
+ protected static final int GDK_WINDOW_TYPE_HINT_SPLASHSCREEN = 4;
+ protected static final int GDK_WINDOW_TYPE_HINT_UTILITY = 5;
+ protected static final int GDK_WINDOW_TYPE_HINT_DOCK = 6;
+ protected static final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
private boolean hasBeenShown = false;
private int oldState = Frame.NORMAL;
@@ -64,30 +63,27 @@ public class GtkWindowPeer extends GtkContainerPeer
native void gtkWindowSetResizable (boolean resizable);
native void gtkWindowSetModal (boolean modal);
- native void create (int type, boolean decorated,
- int width, int height,
- GtkWindowPeer parent,
- int[] insets);
+ int getWidth ()
+ {
+ return awtComponent.getWidth();
+ }
+
+ int getHeight ()
+ {
+ return awtComponent.getHeight();
+ }
+
+ native void create (int type, boolean decorated, GtkWindowPeer parent);
void create (int type, boolean decorated)
{
GtkWindowPeer parent_peer = null;
Component parent = awtComponent.getParent();
- int[] insets = new int [] { 0, 0, 0, 0 };
if (parent != null)
parent_peer = (GtkWindowPeer) awtComponent.getParent().getPeer();
- create (type, decorated,
- awtComponent.getWidth(),
- awtComponent.getHeight(),
- parent_peer,
- insets);
-
- this.insets.top = insets [0];
- this.insets.left = insets [1];
- this.insets.bottom = insets [2];
- this.insets.right = insets [3];
+ create (type, decorated, parent_peer);
}
void create ()
@@ -113,8 +109,8 @@ public class GtkWindowPeer extends GtkContainerPeer
super (window);
}
- native public void toBack ();
- native public void toFront ();
+ public native void toBack();
+ public native void toFront();
native void nativeSetBounds (int x, int y, int width, int height);
@@ -166,10 +162,12 @@ public class GtkWindowPeer extends GtkContainerPeer
|| frame_y != awtComponent.getY()
|| frame_width != awtComponent.getWidth()
|| frame_height != awtComponent.getHeight())
- setBoundsCallback ((Window) awtComponent,
- frame_x, frame_y, frame_width, frame_height);
+ {
+ setBoundsCallback ((Window) awtComponent,
+ frame_x, frame_y, frame_width, frame_height);
- awtComponent.validate();
+ awtComponent.validate();
+ }
}
native void nativeSetVisible (boolean b);
@@ -192,7 +190,7 @@ public class GtkWindowPeer extends GtkContainerPeer
// Post a WINDOW_OPENED event the first time this window is shown.
if (!hasBeenShown)
{
- q.postEvent (new WindowEvent ((Window) awtComponent, id,
+ q().postEvent (new WindowEvent ((Window) awtComponent, id,
opposite));
hasBeenShown = true;
}
@@ -201,12 +199,12 @@ public class GtkWindowPeer extends GtkContainerPeer
{
if (oldState != newState)
{
- q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
+ q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite,
oldState, newState));
oldState = newState;
}
}
else
- q.postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
+ q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite));
}
}
diff --git a/libjava/gnu/java/beans/DummyAppletContext.java b/libjava/gnu/java/beans/DummyAppletContext.java
new file mode 100644
index 00000000000..e10a9074f77
--- /dev/null
+++ b/libjava/gnu/java/beans/DummyAppletContext.java
@@ -0,0 +1,200 @@
+/* gnu.java.beans.DummyAppletContext
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.beans;
+
+import java.applet.Applet;
+import java.applet.AppletContext;
+import java.applet.AudioClip;
+import java.awt.Image;
+import java.awt.Toolkit;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+
+/** A placeholder <code>AppletContext</code> implementation that does nothing.
+ *
+ * <p>This is the default implementation for GNU Classpath and is used for <code>Applet</code>
+ * beans being created with {@link java.beans.Beans.instantiate}.</p>
+ *
+ * <p>It has no functionality in order to allow it to be used without any dependencies
+ * (e.g. sound, network access, ...).</p>
+ *
+ * @author Robert Schuster
+ */
+class DummyAppletContext implements AppletContext
+{
+ private static final Enumeration EMPTY_ENUMERATION = Collections.enumeration(Collections.EMPTY_SET);
+ private static final AudioClip DUMMY_CLIP = new DummyAudioClip();
+
+ DummyAppletContext()
+ {
+ }
+
+ /** Implementation is VM neutral and returns a dummy {@link AudioClip} instance
+ * for every URL that returns a non-<code>null</code> object on
+ * <code>URL.openConnection()</code>.
+ *
+ * @see java.applet.AppletContext#getAudioClip(java.net.URL)
+ *
+ * FIXME: When Java Sound API (javax.sound) is included in Classpath or URL is able to handle
+ * sampled sound this should be adjusted.
+ */
+ public AudioClip getAudioClip(URL url)
+ {
+ try
+ {
+ return (url.openConnection() != null ? DUMMY_CLIP : null);
+ }
+ catch (IOException ioe)
+ {
+ return null;
+ }
+ }
+
+ /** Loads the <code>Image</code> instance by delegating to
+ * {@link java.awt.Toolkit.createImage(URL) }.
+ *
+ * @see java.applet.AppletContext#getImage(java.net.URL)
+ * @see java.awt.Toolkit#createImage(java.net.URL)
+ */
+ public Image getImage(URL url)
+ {
+ return Toolkit.getDefaultToolkit().createImage(url);
+ }
+
+ /** Returns <code>null</code> for every argument.
+ *
+ * @see java.applet.AppletContext#getApplet(java.lang.String)
+ */
+ public Applet getApplet(String name)
+ {
+ return null;
+ }
+
+ /** Returns always an empty <code>Enumeration</code>.
+ *
+ * @see java.applet.AppletContext#getApplets()
+ */
+ public Enumeration getApplets()
+ {
+ return EMPTY_ENUMERATION;
+ }
+
+ /** Does nothing.
+ *
+ * @see java.applet.AppletContext#showDocument(java.net.URL)
+ */
+ public void showDocument(URL url)
+ {
+ }
+
+ /** Does nothing.
+ *
+ * @see java.applet.AppletContext#showDocument(java.net.URL, java.lang.String)
+ */
+ public void showDocument(URL url, String target)
+ {
+ }
+
+ /** Does nothing.
+ *
+ * @see java.applet.AppletContext#showStatus(java.lang.String)
+ */
+ public void showStatus(String message)
+ {
+ }
+
+ /** Does nothing.
+ *
+ * @see java.applet.AppletContext#setStream(java.lang.String, java.io.InputStream)
+ */
+ public void setStream(String key, InputStream stream)
+ throws IOException
+ {
+ throw new IOException("Dummy implementation imposes zero InputStream associations.");
+ }
+
+ /** Returns <code>null</code> for every argument.
+ *
+ * @see java.applet.AppletContext#getStream(java.lang.String)
+ */
+ public InputStream getStream(String key)
+ {
+ return null;
+ }
+
+ /** Returns always an empty iterator.
+ *
+ * @see java.applet.AppletContext#getStreamKeys()
+ */
+ public Iterator getStreamKeys()
+ {
+ return Collections.EMPTY_SET.iterator();
+ }
+
+ /** Dummy <code>AudioClip</code> implementation that does nothing but
+ * preventing <code>NullPointerException</code>S being thrown in programs
+ * that expect a valid <code>AudioClip</code> instance to be returned by
+ * their Applet.
+ *
+ * @author Robert Schuster
+ */
+ static class DummyAudioClip implements AudioClip
+ {
+ public void play()
+ {
+ }
+
+ public void stop()
+ {
+ }
+
+ public void loop()
+ {
+ }
+
+ public String toString()
+ {
+ return "DummyAudioClip never plays anything - implement javax.sound and make us happy :)";
+ }
+ }
+}
diff --git a/libjava/gnu/java/beans/EmptyBeanInfo.java b/libjava/gnu/java/beans/DummyAppletStub.java
index 97cdf0a0eb5..ff99e98d9c1 100644
--- a/libjava/gnu/java/beans/EmptyBeanInfo.java
+++ b/libjava/gnu/java/beans/DummyAppletStub.java
@@ -1,5 +1,5 @@
-/* gnu.java.beans.EmptyBeanInfo
- Copyright (C) 1998 Free Software Foundation, Inc.
+/* gnu.java.beans.DummyAppletStub
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-
+
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
@@ -38,33 +38,78 @@ exception statement from your version. */
package gnu.java.beans;
-import java.beans.*;
-
-/**
- ** EmptyBeanInfo is a BeanInfo that discloses no
- ** information about the Bean and does not allow
- ** Introspection. The Introspector uses instances of this
- ** class to create empty BeanInfos, but it could also be
- ** used as a base class for BeanInfos that do not allow
- ** Introspection and provide only a little bit of
- ** information.<P>
- **
- ** @author John Keiser
- ** @version 1.1.0, 30 Jul 1998
- ** @see gnu.java.beans.ExplicitBeanInfo
- ** @see java.beans.BeanInfo
- **/
-
-public class EmptyBeanInfo extends ExplicitBeanInfo {
- /** Create a new EmptyBeanInfo. **/
- public EmptyBeanInfo(Class beanClass) {
- super(new BeanDescriptor(beanClass,null),
- new BeanInfo[0],
- new PropertyDescriptor[0],
- -1,
- new EventSetDescriptor[0],
- -1,
- new MethodDescriptor[0],
- null);
- }
+import java.applet.AppletContext;
+import java.applet.AppletStub;
+import java.net.URL;
+
+/** Placeholder implementation of <code>AppletStub</code> providing no functionality.
+ * <p>This class is used for <code>Applet</code> being created with
+ * {@link java.beans.Bean.instantiate}.</p>
+ *
+ * @author Robert Schuster
+ */
+public class DummyAppletStub implements AppletStub
+{
+ private URL documentBase;
+ private URL codeBase;
+ private DummyAppletContext context;
+
+ public DummyAppletStub(URL newCodeBase, URL newDocumentBase)
+ {
+ codeBase = newCodeBase;
+ documentBase = newDocumentBase;
+
+ context = new DummyAppletContext();
+ }
+
+ /** Returns always <code>true</code>.
+ *
+ * @see java.applet.AppletStub#isActive()
+ */
+ public boolean isActive()
+ {
+ return true;
+ }
+
+ /**
+ * @see java.applet.AppletStub#getDocumentBase()
+ */
+ public URL getDocumentBase()
+ {
+ return documentBase;
+ }
+
+ /**
+ * @see java.applet.AppletStub#getCodeBase()
+ */
+ public URL getCodeBase()
+ {
+ return codeBase;
+ }
+
+ /** Implementation returns <code>null</code> for every parameter name.
+ *
+ * @see java.applet.AppletStub#getParameter(java.lang.String)
+ */
+ public String getParameter(String name)
+ {
+ return null;
+ }
+
+ /** Returns a non-functional context instance.
+ *
+ * @see java.applet.AppletStub#getAppletContext()
+ */
+ public AppletContext getAppletContext()
+ {
+ return context;
+ }
+
+ /** Does nothing.
+ *
+ * @see java.applet.AppletStub#appletResize(int, int)
+ */
+ public void appletResize(int width, int height)
+ {
+ }
}
diff --git a/libjava/gnu/java/beans/IntrospectionIncubator.java b/libjava/gnu/java/beans/IntrospectionIncubator.java
index ac08f7ae5cd..21bf984d24c 100644
--- a/libjava/gnu/java/beans/IntrospectionIncubator.java
+++ b/libjava/gnu/java/beans/IntrospectionIncubator.java
@@ -99,8 +99,7 @@ public class IntrospectionIncubator {
* @param method The method instance to examine.
*/
public void addMethod(Method method) {
- if(Modifier.isPublic(method.getModifiers()) &&
- !Modifier.isStatic(method.getModifiers())) {
+ if(Modifier.isPublic(method.getModifiers())) {
String name = ClassHelper.getTruncatedName(method.getName());
Class retType = method.getReturnType();
Class[] params = method.getParameterTypes();
diff --git a/libjava/gnu/java/beans/info/ComponentBeanInfo.java b/libjava/gnu/java/beans/info/ComponentBeanInfo.java
deleted file mode 100644
index 877a18d65d2..00000000000
--- a/libjava/gnu/java/beans/info/ComponentBeanInfo.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* gnu.java.beans.info.ComponentBeanInfo
- Copyright (C) 1998 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.java.beans.info;
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.beans.SimpleBeanInfo;
-
-/** BeanInfo class for java.awt.Component.
- ** This provides a few properties, but that's
- ** it.
- ** @author John Keiser
- ** @version 1.1.0, Aug 1 1998
- **/
-public class ComponentBeanInfo extends SimpleBeanInfo {
- static PropertyDescriptor[] properties;
- static {
- try {
- properties = new PropertyDescriptor[6];
- properties[0] = new PropertyDescriptor("name",java.awt.Component.class);
- properties[1] = new PropertyDescriptor("background",java.awt.Component.class);
- properties[2] = new PropertyDescriptor("foreground",java.awt.Component.class);
- properties[3] = new PropertyDescriptor("font",java.awt.Component.class);
- properties[4] = new PropertyDescriptor("enabled",java.awt.Component.class);
- properties[5] = new PropertyDescriptor("visible",java.awt.Component.class);
- } catch(IntrospectionException E) {
- properties = null;
- throw new UnknownError("Could not introspect some java.awt.Component properties.");
- }
- }
- public ComponentBeanInfo() {
- super();
- }
-
- public PropertyDescriptor[] getPropertyDescriptors() {
- return properties;
- }
-}
-
diff --git a/libjava/gnu/java/io/Base64InputStream.java b/libjava/gnu/java/io/Base64InputStream.java
index 3780e952837..617e8315102 100644
--- a/libjava/gnu/java/io/Base64InputStream.java
+++ b/libjava/gnu/java/io/Base64InputStream.java
@@ -1,5 +1,5 @@
/* Base64InputStream.java -- base-64 input stream.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,6 +38,8 @@ exception statement from your version. */
package gnu.java.io;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -90,6 +92,30 @@ public class Base64InputStream extends FilterInputStream
eof = false;
}
+ // Class method.
+ // ------------------------------------------------------------------------
+
+ /**
+ * Decode a single Base-64 string to a byte array.
+ *
+ * @param base64 The Base-64 encoded data.
+ * @return The decoded bytes.
+ * @throws IOException If the given data do not compose a valid Base-64
+ * sequence.
+ */
+ public static byte[] decode(String base64) throws IOException
+ {
+ Base64InputStream in =
+ new Base64InputStream(new ByteArrayInputStream(base64.getBytes()));
+ ByteArrayOutputStream out =
+ new ByteArrayOutputStream((int) (base64.length() / 0.666));
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) != -1)
+ out.write(buf, 0, len);
+ return out.toByteArray();
+ }
+
// Instance methods.
// ------------------------------------------------------------------------
diff --git a/libjava/gnu/java/lang/MainThread.java b/libjava/gnu/java/lang/MainThread.java
index 14a00ca8d9b..d7cf2363625 100644
--- a/libjava/gnu/java/lang/MainThread.java
+++ b/libjava/gnu/java/lang/MainThread.java
@@ -1,5 +1,5 @@
/* gnu.java.lang.MainThread
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -91,7 +91,8 @@ final class MainThread extends Thread
{
try
{
- klass = Class.forName(klass_name);
+ klass = Class.forName(klass_name, true,
+ ClassLoader.getSystemClassLoader());
}
catch (ClassNotFoundException x)
{
diff --git a/libjava/gnu/java/locale/LocaleInformation_en.java b/libjava/gnu/java/locale/LocaleInformation_en.java
index aa35091a526..df258095c1b 100644
--- a/libjava/gnu/java/locale/LocaleInformation_en.java
+++ b/libjava/gnu/java/locale/LocaleInformation_en.java
@@ -159,7 +159,7 @@ public class LocaleInformation_en extends ListResourceBundle
{ "shortWeekdays", shortWeekdays },
{ "ampms", ampms },
{ "eras", eras },
- { "localPatternChars", "GyMdkHmsSEDFwWahKz" },
+ { "localPatternChars", "GyMdkHmsSEDFwWahKzYeugAZ" },
{ "zoneStrings", zoneStrings },
{ "shortDateFormat", "M/d/yy" }, // Java's Y2K bug.
diff --git a/libjava/gnu/java/net/CRLFInputStream.java b/libjava/gnu/java/net/CRLFInputStream.java
new file mode 100644
index 00000000000..706c23447be
--- /dev/null
+++ b/libjava/gnu/java/net/CRLFInputStream.java
@@ -0,0 +1,205 @@
+/* CRLFInputStream.java --
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net;
+
+import java.io.FilterInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * An input stream that filters out CR/LF pairs into LFs.
+ *
+ * @author Chris Burdess (dog@gnu.org)
+ */
+public class CRLFInputStream
+ extends FilterInputStream
+{
+ /**
+ * The CR octet.
+ */
+ public static final int CR = 13;
+
+ /**
+ * The LF octet.
+ */
+ public static final int LF = 10;
+
+ /**
+ * Buffer.
+ */
+ protected int buf = -1;
+
+ /**
+ * Buffer at time of mark.
+ */
+ protected int markBuf = -1;
+
+ /**
+ * Constructs a CR/LF input stream connected to the specified input
+ * stream.
+ */
+ public CRLFInputStream(InputStream in)
+ {
+ super(in);
+ }
+
+ /**
+ * Reads the next byte of data from this input stream.
+ * Returns -1 if the end of the stream has been reached.
+ * @exception IOException if an I/O error occurs
+ */
+ public int read()
+ throws IOException
+ {
+ int c;
+ if (buf != -1)
+ {
+ c = buf;
+ buf = -1;
+ return c;
+ }
+ else
+ {
+ c = super.read();
+ if (c == CR)
+ {
+ buf = super.read();
+ if (buf == LF)
+ {
+ c = buf;
+ buf = -1;
+ }
+ }
+ }
+ return c;
+ }
+
+ /**
+ * Reads up to b.length bytes of data from this input stream into
+ * an array of bytes.
+ * Returns -1 if the end of the stream has been reached.
+ * @exception IOException if an I/O error occurs
+ */
+ public int read(byte[] b)
+ throws IOException
+ {
+ return read(b, 0, b.length);
+ }
+
+ /**
+ * Reads up to len bytes of data from this input stream into an
+ * array of bytes, starting at the specified offset.
+ * Returns -1 if the end of the stream has been reached.
+ * @exception IOException if an I/O error occurs
+ */
+ public int read(byte[] b, int off, int len)
+ throws IOException
+ {
+ int shift = 0;
+ if (buf != -1)
+ {
+ // Push buf onto start of byte array
+ b[off] = (byte) buf;
+ off++;
+ len--;
+ buf = -1;
+ shift++;
+ }
+ int l = super.read(b, off, len);
+ l = removeCRLF(b, off - shift, l);
+ return l;
+ }
+
+ /**
+ * Indicates whether this stream supports the mark and reset methods.
+ */
+ public boolean markSupported()
+ {
+ return in.markSupported();
+ }
+
+ /**
+ * Marks the current position in this stream.
+ */
+ public void mark(int readlimit)
+ {
+ in.mark(readlimit);
+ markBuf = buf;
+ }
+
+ /**
+ * Repositions this stream to the position at the time the mark method was
+ * called.
+ */
+ public void reset()
+ throws IOException
+ {
+ in.reset();
+ buf = markBuf;
+ }
+
+ private int removeCRLF(byte[] b, int off, int len)
+ {
+ int end = off + len;
+ for (int i = off; i < end; i++)
+ {
+ if (b[i] == CR)
+ {
+ if (i + 1 == end)
+ {
+ // This is the last byte, impossible to determine whether CRLF
+ buf = CR;
+ len--;
+ }
+ else if (b[i + 1] == LF)
+ {
+ // Shift left
+ end--;
+ for (int j = i; j < end; j++)
+ {
+ b[j] = b[j + 1];
+ }
+ len--;
+ end = off + len;
+ }
+ }
+ }
+ return len;
+ }
+}
diff --git a/libjava/gnu/java/net/CRLFOutputStream.java b/libjava/gnu/java/net/CRLFOutputStream.java
new file mode 100644
index 00000000000..665a02b62d0
--- /dev/null
+++ b/libjava/gnu/java/net/CRLFOutputStream.java
@@ -0,0 +1,183 @@
+/* CRLFOutputStream.java --
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.net;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * An output stream that filters LFs into CR/LF pairs.
+ *
+ * @author Chris Burdess (dog@gnu.org)
+ */
+public class CRLFOutputStream
+ extends FilterOutputStream
+{
+ static final String US_ASCII = "US-ASCII";
+
+ /**
+ * The CR octet.
+ */
+ public static final int CR = 13;
+
+ /**
+ * The LF octet.
+ */
+ public static final int LF = 10;
+
+ /**
+ * The CR/LF pair.
+ */
+ public static final byte[] CRLF = { CR, LF };
+
+ /**
+ * The last byte read.
+ */
+ protected int last;
+
+ /**
+ * Constructs a CR/LF output stream connected to the specified output stream.
+ */
+ public CRLFOutputStream(OutputStream out)
+ {
+ super(out);
+ last = -1;
+ }
+
+ /**
+ * Writes a character to the underlying stream.
+ * @exception IOException if an I/O error occurred
+ */
+ public void write(int ch) throws IOException
+ {
+ if (ch == CR)
+ {
+ out.write(CRLF);
+ }
+ else if (ch == LF)
+ {
+ if (last != CR)
+ {
+ out.write(CRLF);
+ }
+ }
+ else
+ {
+ out.write(ch);
+ }
+ last = ch;
+ }
+
+ /**
+ * Writes a byte array to the underlying stream.
+ * @exception IOException if an I/O error occurred
+ */
+ public void write(byte[] b)
+ throws IOException
+ {
+ write(b, 0, b.length);
+ }
+
+ /**
+ * Writes a portion of a byte array to the underlying stream.
+ * @exception IOException if an I/O error occurred
+ */
+ public void write(byte[] b, int off, int len)
+ throws IOException
+ {
+ int d = off;
+ len += off;
+ for (int i = off; i < len; i++)
+ {
+ switch (b[i])
+ {
+ case CR:
+ out.write (b, d, i - d);
+ out.write (CRLF, 0, 2);
+ d = i + 1;
+ break;
+ case LF:
+ if (last != CR)
+ {
+ out.write (b, d, i - d);
+ out.write (CRLF, 0, 2);
+ }
+ d = i + 1;
+ break;
+ }
+ last = b[i];
+ }
+ if (len - d > 0)
+ {
+ out.write (b, d, len - d);
+ }
+ }
+
+ /**
+ * Writes the specified ASCII string to the underlying stream.
+ * @exception IOException if an I/O error occurred
+ */
+ public void write(String text)
+ throws IOException
+ {
+ try
+ {
+ byte[] bytes = text.getBytes(US_ASCII);
+ write(bytes, 0, bytes.length);
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new IOException("The US-ASCII encoding is not supported " +
+ "on this system");
+ }
+ }
+
+ /**
+ * Writes a newline to the underlying stream.
+ * @exception IOException if an I/O error occurred
+ */
+ public void writeln()
+ throws IOException
+ {
+ out.write(CRLF, 0, 2);
+ }
+}
+
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkArg.java b/libjava/gnu/java/net/GetLocalHostAction.java
index 0491856849c..36d17d9df45 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkArg.java
+++ b/libjava/gnu/java/net/GetLocalHostAction.java
@@ -1,5 +1,5 @@
-/* GtkArg.java
- Copyright (C) 1999 Free Software Foundation, Inc.
+/* GetLocalHostAction.java --
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-
+
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
@@ -36,26 +36,30 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-package gnu.java.awt.peer.gtk;
-
-public class GtkArg
-{
- String name;
- Object value;
-
- public GtkArg (String name, Object value)
- {
- this.name = name;
- this.value = value;
- }
+package gnu.java.net;
- public String getName ()
- {
- return name;
- }
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.PrivilegedAction;
- public Object getValue ()
+/**
+ * Privileged action to retrieve the local host InetAddress.
+ *
+ * @author Chris Burdess (dog@gnu.org)
+ */
+public class GetLocalHostAction
+ implements PrivilegedAction
+{
+ public Object run()
{
- return value;
+ try
+ {
+ return InetAddress.getLocalHost();
+ }
+ catch (UnknownHostException e)
+ {
+ return null;
+ }
}
}
+
diff --git a/libjava/gnu/java/net/PlainSocketImpl.java b/libjava/gnu/java/net/PlainSocketImpl.java
index 4301a485cf3..f7e6cb89052 100644
--- a/libjava/gnu/java/net/PlainSocketImpl.java
+++ b/libjava/gnu/java/net/PlainSocketImpl.java
@@ -1,5 +1,5 @@
/* PlainSocketImpl.java -- Default socket implementation
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -200,8 +200,20 @@ public final class PlainSocketImpl extends SocketImpl
*/
public native Object getOption(int optID) throws SocketException;
+ /**
+ * Flushes the input stream and closes it. If you read from the input stream
+ * after calling this method a <code>IOException</code> will be thrown.
+ *
+ * @throws IOException if an error occurs
+ */
public native void shutdownInput() throws IOException;
+ /**
+ * Flushes the output stream and closes it. If you write to the output stream
+ * after calling this method a <code>IOException</code> will be thrown.
+ *
+ * @throws IOException if an error occurs
+ */
public native void shutdownOutput() throws IOException;
/**
diff --git a/libjava/gnu/java/net/natPlainSocketImplPosix.cc b/libjava/gnu/java/net/natPlainSocketImplPosix.cc
index 46b56bb6efb..9348378d30f 100644
--- a/libjava/gnu/java/net/natPlainSocketImplPosix.cc
+++ b/libjava/gnu/java/net/natPlainSocketImplPosix.cc
@@ -405,6 +405,11 @@ gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer, jint
static jint
read_helper (jint native_fd, jint timeout, jbyte *bytes, jint count)
{
+ // If zero bytes were requested, short circuit so that recv
+ // doesn't signal EOF.
+ if (count == 0)
+ return 0;
+
// Do timeouts via select.
if (timeout > 0 && native_fd >= 0 && native_fd < FD_SETSIZE)
{
diff --git a/libjava/gnu/java/net/natPlainSocketImplWin32.cc b/libjava/gnu/java/net/natPlainSocketImplWin32.cc
index c4a54a90c3a..81cf6328078 100644
--- a/libjava/gnu/java/net/natPlainSocketImplWin32.cc
+++ b/libjava/gnu/java/net/natPlainSocketImplWin32.cc
@@ -491,6 +491,11 @@ jint
gnu::java::net::PlainSocketImpl$SocketInputStream::read(jbyteArray buffer,
jint offset, jint count)
{
+ // If zero bytes were requested, short circuit so that recv
+ // doesn't signal EOF.
+ if (count == 0)
+ return 0;
+
if (! buffer)
throw new ::java::lang::NullPointerException;
diff --git a/libjava/gnu/java/net/protocol/http/Cookie.java b/libjava/gnu/java/net/protocol/http/Cookie.java
index fc4fde4f0dd..452ca0f7ad1 100644
--- a/libjava/gnu/java/net/protocol/http/Cookie.java
+++ b/libjava/gnu/java/net/protocol/http/Cookie.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.net.protocol.http;
-import java.text.ParseException;
import java.util.Date;
/**
diff --git a/libjava/gnu/java/net/protocol/http/HTTPConnection.java b/libjava/gnu/java/net/protocol/http/HTTPConnection.java
index 00cb7036c75..a3f14b51012 100644
--- a/libjava/gnu/java/net/protocol/http/HTTPConnection.java
+++ b/libjava/gnu/java/net/protocol/http/HTTPConnection.java
@@ -54,12 +54,10 @@ import java.net.InetSocketAddress;
import java.net.Socket;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.net.SocketFactory;
import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
diff --git a/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java b/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java
index 22ef05631e9..0137596aa74 100644
--- a/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java
+++ b/libjava/gnu/java/net/protocol/http/HTTPDateFormat.java
@@ -38,9 +38,15 @@ exception statement from your version. */
package gnu.java.net.protocol.http;
-import java.io.PrintStream;
-import java.text.*;
-import java.util.*;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.text.ParsePosition;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
/**
* HTTP date formatter and parser.
diff --git a/libjava/gnu/java/net/protocol/http/Request.java b/libjava/gnu/java/net/protocol/http/Request.java
index 123e889c065..62a1a535a12 100644
--- a/libjava/gnu/java/net/protocol/http/Request.java
+++ b/libjava/gnu/java/net/protocol/http/Request.java
@@ -46,7 +46,6 @@ import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ProtocolException;
-import java.net.Socket;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
diff --git a/libjava/gnu/java/nio/ChannelReader.java b/libjava/gnu/java/nio/ChannelReader.java
new file mode 100644
index 00000000000..11e66a77ebb
--- /dev/null
+++ b/libjava/gnu/java/nio/ChannelReader.java
@@ -0,0 +1,211 @@
+/* ChannelReader.java --
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.java.nio;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CoderResult;
+import java.nio.charset.CodingErrorAction;
+
+/**
+ * A Reader implementation that works using a ReadableByteChannel and a
+ * CharsetDecoder.
+ *
+ * <p>
+ * This is a bridge between NIO <-> IO character decoding.
+ * </p>
+ *
+ * @author Robert Schuster
+ */
+public class ChannelReader extends Reader
+{
+
+ private static final int DEFAULT_BUFFER_CAP = 8192;
+
+ private ReadableByteChannel channel;
+
+ private CharsetDecoder decoder;
+
+ private ByteBuffer byteBuffer;
+
+ private CharBuffer charBuffer;
+
+ public ChannelReader(ReadableByteChannel channel, CharsetDecoder decoder,
+ int minBufferCap)
+ {
+ this.channel = channel;
+ this.decoder = decoder;
+
+ // JDK reports errors, so we do the same.
+ decoder.onMalformedInput(CodingErrorAction.REPORT);
+ decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
+ decoder.reset();
+
+ int size = (minBufferCap == -1) ? DEFAULT_BUFFER_CAP : minBufferCap;
+
+ // Allocates the buffers and prepares them for reading, because that is the
+ // first operation being done on them.
+ byteBuffer = ByteBuffer.allocate(size);
+ byteBuffer.flip();
+ charBuffer = CharBuffer.allocate((int) (size * decoder.averageCharsPerByte()));
+ }
+
+ public int read(char[] buf, int offset, int count) throws IOException
+ {
+ // I declared channel being null meaning that the reader is closed.
+ if (!channel.isOpen())
+ throw new IOException("Reader was already closed.");
+
+ // I declared decoder being null meaning that there is no more data to read
+ // and convert.
+ if (decoder == null)
+ return -1;
+
+ // Stores the amount of character being read. It -1 so that if no conversion
+ // occured the caller will see this as an 'end of file'.
+ int sum = -1;
+
+ // Copies any characters which may be left from the last invocation into the
+ // destination array.
+ if (charBuffer.remaining() > 0)
+ {
+ sum = Math.min(count, charBuffer.remaining());
+ charBuffer.get(buf, offset, sum);
+
+ // Updates the control variables according to the latest copy operation.
+ offset += sum;
+ count -= sum;
+ }
+
+ // Copies the character which have not been put in the destination array to
+ // the beginning. If data is actually copied count will be 0. If no data is
+ // copied count is >0 and we can now convert some more characters.
+ charBuffer.compact();
+
+ int converted = 0;
+ boolean last = false;
+
+ while (count != 0)
+ {
+ // Tries to convert some bytes (Which will intentionally fail in the
+ // first place because we have not read any bytes yet.)
+ CoderResult result = decoder.decode(byteBuffer, charBuffer, last);
+ if (result.isMalformed() || result.isUnmappable())
+ {
+ // JDK throws exception when bytes are malformed for sure.
+ // FIXME: Unsure what happens when a character is simply
+ // unmappable.
+ result.throwException();
+ }
+
+ // Marks that we should end this loop regardless whether the caller
+ // wants more chars or not, when this was the last conversion.
+ if (last)
+ {
+ decoder = null;
+ }
+ else if (result.isUnderflow())
+ {
+ // We need more bytes to do the conversion.
+
+ // Copies the not yet converted bytes to the beginning making it
+ // being able to receive more bytes.
+ byteBuffer.compact();
+
+ // Reads in another bunch of bytes for being converted.
+ if (channel.read(byteBuffer) == -1)
+ {
+ // If there is no more data available in the channel we mark
+ // that state for the final character conversion run which is
+ // done in the next loop iteration.
+ last = true;
+ }
+
+ // Prepares the byteBuffer for the next character conversion run.
+ byteBuffer.flip();
+ }
+
+ // Prepares the charBuffer for being drained.
+ charBuffer.flip();
+
+ converted = Math.min(count, charBuffer.remaining());
+ charBuffer.get(buf, offset, converted);
+
+ // Copies characters which have not yet being copied into the char-Array
+ // to the beginning making it possible to read them later (If data is
+ // really copied here, then the caller has received enough characters so
+ // far.).
+ charBuffer.compact();
+
+ // Updates the control variables according to the latest copy operation.
+ offset += converted;
+ count -= converted;
+
+ // Updates the amount of transferred characters.
+ sum += converted;
+
+ if (decoder == null)
+ {
+ break;
+ }
+
+ // Now that more characters have been transfered we let the loop decide
+ // what to do next.
+ }
+
+ // Makes the charBuffer ready for reading on the next invocation.
+ charBuffer.flip();
+
+ return sum;
+ }
+
+ public void close() throws IOException
+ {
+ channel.close();
+
+ // Makes sure all intermediate data is released by the decoder.
+ if (decoder != null)
+ decoder.reset();
+ }
+
+}
diff --git a/libjava/gnu/java/nio/PipeImpl.java b/libjava/gnu/java/nio/PipeImpl.java
index df79e17fd2b..ca374c52ff1 100644
--- a/libjava/gnu/java/nio/PipeImpl.java
+++ b/libjava/gnu/java/nio/PipeImpl.java
@@ -1,5 +1,5 @@
/* PipeImpl.java --
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -79,7 +79,8 @@ class PipeImpl extends Pipe
return read (srcs, 0, srcs.length);
}
- public synchronized final long read (ByteBuffer[] srcs, int offset, int len)
+ public final synchronized long read (ByteBuffer[] srcs, int offset,
+ int len)
throws IOException
{
if (offset < 0
@@ -138,7 +139,7 @@ class PipeImpl extends Pipe
return write (srcs, 0, srcs.length);
}
- public synchronized final long write (ByteBuffer[] srcs, int offset, int len)
+ public final synchronized long write (ByteBuffer[] srcs, int offset, int len)
throws IOException
{
if (offset < 0
diff --git a/libjava/gnu/java/nio/SelectorImpl.java b/libjava/gnu/java/nio/SelectorImpl.java
index 62d06624616..f64c86d1f54 100644
--- a/libjava/gnu/java/nio/SelectorImpl.java
+++ b/libjava/gnu/java/nio/SelectorImpl.java
@@ -1,5 +1,5 @@
/* SelectorImpl.java --
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,6 +35,7 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package gnu.java.nio;
import java.io.IOException;
@@ -49,11 +50,9 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import gnu.classpath.Configuration;
public class SelectorImpl extends AbstractSelector
{
-
private Set keys;
private Set selected;
@@ -375,24 +374,13 @@ public class SelectorImpl extends AbstractSelector
SelectionKeyImpl result;
if (ch instanceof SocketChannelImpl)
- {
- SocketChannelImpl sc = (SocketChannelImpl) ch;
- result = new SocketChannelSelectionKey (ch, this);
- }
+ result = new SocketChannelSelectionKey (ch, this);
else if (ch instanceof DatagramChannelImpl)
- {
- DatagramChannelImpl dc = (DatagramChannelImpl) ch;
- result = new DatagramChannelSelectionKey (ch, this);
- }
+ result = new DatagramChannelSelectionKey (ch, this);
else if (ch instanceof ServerSocketChannelImpl)
- {
- ServerSocketChannelImpl ssc = (ServerSocketChannelImpl) ch;
- result = new ServerSocketChannelSelectionKey (ch, this);
- }
+ result = new ServerSocketChannelSelectionKey (ch, this);
else
- {
- throw new InternalError ("No known channel type");
- }
+ throw new InternalError ("No known channel type");
synchronized (keys)
{
diff --git a/libjava/gnu/java/nio/channels/FileChannelImpl.java b/libjava/gnu/java/nio/channels/FileChannelImpl.java
index 678e10f2349..e5b02e9fdb3 100644
--- a/libjava/gnu/java/nio/channels/FileChannelImpl.java
+++ b/libjava/gnu/java/nio/channels/FileChannelImpl.java
@@ -1,5 +1,5 @@
/* FileChannelImpl.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -192,6 +192,7 @@ public final class FileChannelImpl extends FileChannel
{
byte[] buffer = src.array();
write(buffer, src.arrayOffset() + src.position(), len);
+ src.position(src.position() + len);
}
else
{
@@ -281,7 +282,30 @@ public final class FileChannelImpl extends FileChannel
throw new ClosedChannelException ();
}
- public long transferTo (long position, long count, WritableByteChannel target)
+ // like transferTo, but with a count of less than 2Gbytes
+ private int smallTransferTo (long position, int count,
+ WritableByteChannel target)
+ throws IOException
+ {
+ ByteBuffer buffer;
+ try
+ {
+ // Try to use a mapped buffer if we can. If this fails for
+ // any reason we'll fall back to using a ByteBuffer.
+ buffer = map (MapMode.READ_ONLY, position, count);
+ }
+ catch (IOException e)
+ {
+ buffer = ByteBuffer.allocate (count);
+ read (buffer, position);
+ buffer.flip();
+ }
+
+ return target.write (buffer);
+ }
+
+ public long transferTo (long position, long count,
+ WritableByteChannel target)
throws IOException
{
if (position < 0
@@ -294,14 +318,57 @@ public final class FileChannelImpl extends FileChannel
if ((mode & READ) == 0)
throw new NonReadableChannelException ();
- // XXX: count needs to be casted from long to int. Dataloss ?
- ByteBuffer buffer = ByteBuffer.allocate ((int) count);
- read (buffer, position);
- buffer.flip();
- return target.write (buffer);
+ final int pageSize = 65536;
+ long total = 0;
+
+ while (count > 0)
+ {
+ int transferred
+ = smallTransferTo (position, (int)Math.min (count, pageSize),
+ target);
+ if (transferred < 0)
+ break;
+ total += transferred;
+ position += transferred;
+ count -= transferred;
+ }
+
+ return total;
}
- public long transferFrom (ReadableByteChannel src, long position, long count)
+ // like transferFrom, but with a count of less than 2Gbytes
+ private int smallTransferFrom (ReadableByteChannel src, long position,
+ int count)
+ throws IOException
+ {
+ ByteBuffer buffer = null;
+
+ if (src instanceof FileChannel)
+ {
+ try
+ {
+ // Try to use a mapped buffer if we can. If this fails
+ // for any reason we'll fall back to using a ByteBuffer.
+ buffer = ((FileChannel)src).map (MapMode.READ_ONLY, position,
+ count);
+ }
+ catch (IOException e)
+ {
+ }
+ }
+
+ if (buffer == null)
+ {
+ buffer = ByteBuffer.allocate ((int) count);
+ src.read (buffer);
+ buffer.flip();
+ }
+
+ return write (buffer, position);
+ }
+
+ public long transferFrom (ReadableByteChannel src, long position,
+ long count)
throws IOException
{
if (position < 0
@@ -314,11 +381,21 @@ public final class FileChannelImpl extends FileChannel
if ((mode & WRITE) == 0)
throw new NonWritableChannelException ();
- // XXX: count needs to be casted from long to int. Dataloss ?
- ByteBuffer buffer = ByteBuffer.allocate ((int) count);
- src.read (buffer);
- buffer.flip();
- return write (buffer, position);
+ final int pageSize = 65536;
+ long total = 0;
+
+ while (count > 0)
+ {
+ int transferred = smallTransferFrom (src, position,
+ (int)Math.min (count, pageSize));
+ if (transferred < 0)
+ break;
+ total += transferred;
+ position += transferred;
+ count -= transferred;
+ }
+
+ return total;
}
public FileLock tryLock (long position, long size, boolean shared)
diff --git a/libjava/gnu/java/nio/charset/UTF_8.java b/libjava/gnu/java/nio/charset/UTF_8.java
index c2714363949..87df6442360 100644
--- a/libjava/gnu/java/nio/charset/UTF_8.java
+++ b/libjava/gnu/java/nio/charset/UTF_8.java
@@ -101,7 +101,7 @@ final class UTF_8 extends Charset
protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
{
// TODO: Optimize this in the case in.hasArray() / out.hasArray()
- int inPos = 0;
+ int inPos = in.position();
try
{
while (in.hasRemaining ())
@@ -196,7 +196,7 @@ final class UTF_8 extends Charset
protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
{
- int inPos = 0;
+ int inPos = in.position();
try
{
// TODO: Optimize this in the case in.hasArray() / out.hasArray()
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl.java b/libjava/gnu/java/rmi/dgc/DGCImpl.java
index 4216b6466ba..483ac54f192 100644
--- a/libjava/gnu/java/rmi/dgc/DGCImpl.java
+++ b/libjava/gnu/java/rmi/dgc/DGCImpl.java
@@ -42,7 +42,6 @@ import java.rmi.dgc.Lease;
import java.rmi.dgc.VMID;
import java.rmi.server.ObjID;
import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.RMISocketFactory;
import gnu.java.rmi.server.UnicastServerRef;
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl.java b/libjava/gnu/java/rmi/registry/RegistryImpl.java
index 007d5a97de9..43033c4b8ad 100644
--- a/libjava/gnu/java/rmi/registry/RegistryImpl.java
+++ b/libjava/gnu/java/rmi/registry/RegistryImpl.java
@@ -1,5 +1,6 @@
/*
- Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999, 2002, 2005
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -109,7 +110,7 @@ public static void version() {
+ System.getProperty("java.vm.name")
+ ") "
+ System.getProperty("java.vm.version"));
- System.out.println("Copyright 2002 Free Software Foundation, Inc.");
+ System.out.println("Copyright 2005 Free Software Foundation, Inc.");
System.out.println("This is free software; see the source for copying conditions. There is NO");
System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
System.exit(0);
diff --git a/libjava/gnu/java/rmi/rmic/RMIC.java b/libjava/gnu/java/rmi/rmic/RMIC.java
index e81c0fb780b..0976cd279b2 100644
--- a/libjava/gnu/java/rmi/rmic/RMIC.java
+++ b/libjava/gnu/java/rmi/rmic/RMIC.java
@@ -1,5 +1,5 @@
/* RMIC.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004
+ Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -978,7 +978,7 @@ public class RMIC
System.out.println("rmic (" + System.getProperty("java.vm.name")
+ ") " + System.getProperty("java.vm.version"));
System.out.println();
- System.out.println("Copyright 2002 Free Software Foundation, Inc.");
+ System.out.println("Copyright 2005 Free Software Foundation, Inc.");
System.out.println("This is free software; see the source for copying conditions. There is NO");
System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
System.exit(0);
diff --git a/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java b/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
index 5f5da8ca941..b917315cbb4 100644
--- a/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
+++ b/libjava/gnu/java/rmi/server/ConnectionRunnerPool.java
@@ -1,5 +1,5 @@
/* gnu.java.rmi.server.ConnectionRunnerPool
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -118,7 +118,7 @@ class ConnectionRunnerPool
max_size = size;
}
- private synchronized static ConnectionRunner getConnectionRunner()
+ private static synchronized ConnectionRunner getConnectionRunner()
{
if(freelist.size() == 0){
if(size < max_size){
diff --git a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
index cf08a08ab5b..ef01c8264e5 100644
--- a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
+++ b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
@@ -55,7 +55,6 @@ import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.RMIClientSocketFactory;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
-import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
diff --git a/libjava/gnu/java/security/PolicyFile.java b/libjava/gnu/java/security/PolicyFile.java
index d5c14dc7a17..c939dda47c4 100644
--- a/libjava/gnu/java/security/PolicyFile.java
+++ b/libjava/gnu/java/security/PolicyFile.java
@@ -1,18 +1,20 @@
-/* PolicyFile.java -- policy file reader.
- Copyright (C) 2004 Free Software Foundation, Inc.
+/* PolicyFile.java -- policy file reader
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-This program is free software; you can redistribute it and/or modify
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-This program is distributed in the hope that it will be useful, but
+GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program; see the file COPYING. If not, write to the
+along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
@@ -33,7 +35,6 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-
package gnu.java.security;
import java.io.File;
@@ -143,7 +144,8 @@ public final class PolicyFile extends Policy
// -------------------------------------------------------------------------
private static final boolean DEBUG = true;
- private static void debug(String msg)
+ // Package-private to avoid a trampoline.
+ static void debug(String msg)
{
System.err.print(">> PolicyFile: ");
System.err.println(msg);
diff --git a/libjava/gnu/java/security/der/DERReader.java b/libjava/gnu/java/security/der/DERReader.java
index 7d7174d6d46..688b509eb2c 100644
--- a/libjava/gnu/java/security/der/DERReader.java
+++ b/libjava/gnu/java/security/der/DERReader.java
@@ -62,15 +62,15 @@ import gnu.java.security.OID;
*
* @author Casey Marshall (csm@gnu.org)
*/
-public final class DERReader implements DER
+public class DERReader implements DER
{
// Fields.
// ------------------------------------------------------------------------
- private InputStream in;
+ protected InputStream in;
- private final ByteArrayOutputStream encBuf;
+ protected final ByteArrayOutputStream encBuf;
// Constructor.
// ------------------------------------------------------------------------
@@ -185,6 +185,26 @@ public final class DERReader implements DER
return value;
}
+ protected int readLength() throws IOException
+ {
+ int i = in.read();
+ if (i == -1)
+ throw new EOFException();
+ encBuf.write(i);
+ if ((i & ~0x7F) == 0)
+ {
+ return i;
+ }
+ else if (i < 0xFF)
+ {
+ byte[] octets = new byte[i & 0x7F];
+ in.read(octets);
+ encBuf.write(octets);
+ return new BigInteger(1, octets).intValue();
+ }
+ throw new DEREncodingException();
+ }
+
// Own methods.
// ------------------------------------------------------------------------
@@ -236,26 +256,6 @@ public final class DERReader implements DER
}
}
- private int readLength() throws IOException
- {
- int i = in.read();
- if (i == -1)
- throw new EOFException();
- encBuf.write(i);
- if ((i & ~0x7F) == 0)
- {
- return i;
- }
- else if (i < 0xFF)
- {
- byte[] octets = new byte[i & 0x7F];
- in.read(octets);
- encBuf.write(octets);
- return new BigInteger(1, octets).intValue();
- }
- throw new DEREncodingException();
- }
-
private static String makeString(int tag, byte[] value)
throws IOException
{
diff --git a/libjava/gnu/java/security/der/DERWriter.java b/libjava/gnu/java/security/der/DERWriter.java
index 8bf80b5fc76..5568b69bbad 100644
--- a/libjava/gnu/java/security/der/DERWriter.java
+++ b/libjava/gnu/java/security/der/DERWriter.java
@@ -1,5 +1,5 @@
/* DERWriter.java -- write Java types in DER format.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,7 +48,6 @@ import java.math.BigInteger;
import java.text.SimpleDateFormat;
-import java.util.BitSet;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
diff --git a/libjava/gnu/java/security/provider/EncodedKeyFactory.java b/libjava/gnu/java/security/provider/EncodedKeyFactory.java
index e308d443fc6..7dc5ee9337b 100644
--- a/libjava/gnu/java/security/provider/EncodedKeyFactory.java
+++ b/libjava/gnu/java/security/provider/EncodedKeyFactory.java
@@ -38,6 +38,11 @@ exception statement from your version. */
package gnu.java.security.provider;
+import gnu.java.security.OID;
+import gnu.java.security.der.BitString;
+import gnu.java.security.der.DERReader;
+import gnu.java.security.der.DERValue;
+
import java.io.IOException;
import java.math.BigInteger;
@@ -45,15 +50,12 @@ import java.math.BigInteger;
import java.security.AlgorithmParameters;
import java.security.InvalidKeyException;
import java.security.Key;
-import java.security.KeyFactory;
import java.security.KeyFactorySpi;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.DSAParameterSpec;
-import java.security.spec.DSAPrivateKeySpec;
-import java.security.spec.DSAPublicKeySpec;
import java.security.spec.InvalidParameterSpecException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
@@ -64,12 +66,6 @@ import java.security.spec.X509EncodedKeySpec;
import javax.crypto.spec.DHParameterSpec;
-import gnu.java.security.OID;
-import gnu.java.security.der.BitString;
-import gnu.java.security.der.DER;
-import gnu.java.security.der.DERReader;
-import gnu.java.security.der.DERValue;
-
/**
* A factory for keys encoded in either the X.509 format (for public
* keys) or the PKCS#8 format (for private keys).
diff --git a/libjava/gnu/java/security/provider/Gnu.java b/libjava/gnu/java/security/provider/Gnu.java
index 02f509dc2d5..34f86d8bad0 100644
--- a/libjava/gnu/java/security/provider/Gnu.java
+++ b/libjava/gnu/java/security/provider/Gnu.java
@@ -1,5 +1,5 @@
/* Gnu.java --- Gnu provider main class
- Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -129,6 +129,7 @@ public final class Gnu extends Provider
// Format "Alias", "Actual Name"
put("Alg.Alias.MessageDigest.SHA1", "SHA");
put("Alg.Alias.MessageDigest.SHA-1", "SHA");
+ put("Alg.Alias.MessageDigest.SHA-160", "SHA");
// Algorithm Parameters
put("AlgorithmParameters.DSA",
diff --git a/libjava/gnu/java/security/provider/GnuDHPublicKey.java b/libjava/gnu/java/security/provider/GnuDHPublicKey.java
index a650761dc8f..fbf9d9f8633 100644
--- a/libjava/gnu/java/security/provider/GnuDHPublicKey.java
+++ b/libjava/gnu/java/security/provider/GnuDHPublicKey.java
@@ -49,7 +49,6 @@ import gnu.java.security.OID;
import gnu.java.security.der.BitString;
import gnu.java.security.der.DER;
import gnu.java.security.der.DERValue;
-import gnu.java.security.der.DERWriter;
public class GnuDHPublicKey implements DHPublicKey
{
diff --git a/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java b/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
index 4eceb0074da..72fe38784d5 100644
--- a/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
+++ b/libjava/gnu/java/security/provider/GnuDSAPrivateKey.java
@@ -1,5 +1,5 @@
/* GnuDSAPrivateKey.java --- Gnu DSA Private Key
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999,2003,2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-
+
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
@@ -38,19 +38,31 @@ exception statement from your version. */
package gnu.java.security.provider;
+import gnu.java.security.OID;
+import gnu.java.security.der.DER;
+import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
import java.math.BigInteger;
+
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAParams;
import java.security.spec.DSAParameterSpec;
+import java.util.ArrayList;
+
public class GnuDSAPrivateKey implements DSAPrivateKey
{
+ private byte[] encodedKey;
BigInteger x;
BigInteger p;
BigInteger q;
BigInteger g;
- public GnuDSAPrivateKey(BigInteger x, BigInteger p, BigInteger q, BigInteger g )
+ public GnuDSAPrivateKey(BigInteger x, BigInteger p, BigInteger q, BigInteger g )
{
this.x = x;
this.p = p;
@@ -65,12 +77,56 @@ public class GnuDSAPrivateKey implements DSAPrivateKey
public String getFormat()
{
- return null;
+ return "PKCS#8";
}
+ /**
+ * Encodes this key as a <code>PrivateKeyInfo</code>, as described in
+ * PKCS #8. The ASN.1 specification for this structure is:
+ *
+ * <blockquote><pre>
+ * PrivateKeyInfo ::= SEQUENCE {
+ * version Version,
+ * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
+ * privateKey PrivateKey,
+ * attributes [0] IMPLICIT Attributes OPTIONAL }
+ *
+ * Version ::= INTEGER
+ *
+ * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
+ *
+ * PrivateKey ::= OCTET STRING
+ *
+ * Attributes ::= SET OF Attribute
+ * </pre></blockquote>
+ *
+ * <p>DSA private keys (in Classpath at least) have no attributes.
+ */
public byte[] getEncoded()
{
- return null;
+ if (encodedKey != null)
+ return (byte[]) encodedKey.clone();
+ try
+ {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ArrayList pki = new ArrayList(3);
+ pki.add(new DERValue(DER.INTEGER, BigInteger.ZERO));
+ ArrayList algId = new ArrayList(2);
+ algId.add(new DERValue(DER.OBJECT_IDENTIFIER,
+ new OID("1.2.840.10040.4.1")));
+ ArrayList algParams = new ArrayList(3);
+ algParams.add(new DERValue(DER.INTEGER, p));
+ algParams.add(new DERValue(DER.INTEGER, q));
+ algParams.add(new DERValue(DER.INTEGER, g));
+ algId.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, algParams));
+ pki.add(new DERValue(DER.OCTET_STRING, x.toByteArray()));
+ DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, pki));
+ return (byte[]) (encodedKey = out.toByteArray()).clone();
+ }
+ catch (IOException ioe)
+ {
+ return null;
+ }
}
public DSAParams getParams()
@@ -85,7 +141,10 @@ public class GnuDSAPrivateKey implements DSAPrivateKey
public String toString()
{
- return "GnuDSAPrivateKey: x=" + x.toString(16) + " p=" + p.toString(16)
- + " q=" + q.toString(16) + " g=" + g.toString(16);
+ return "GnuDSAPrivateKey: x="
+ + (x != null ? x.toString(16) : "null") + " p="
+ + (p != null ? p.toString(16) : "null") + " q="
+ + (q != null ? q.toString(16) : "null") + " g="
+ + (g != null ? g.toString(16) : "null");
}
}
diff --git a/libjava/gnu/java/security/provider/GnuDSAPublicKey.java b/libjava/gnu/java/security/provider/GnuDSAPublicKey.java
index 91d6b561c7f..9ec827d41ae 100644
--- a/libjava/gnu/java/security/provider/GnuDSAPublicKey.java
+++ b/libjava/gnu/java/security/provider/GnuDSAPublicKey.java
@@ -1,5 +1,5 @@
/* GnuDSAPublicKey.java --- Gnu DSA Public Key
- Copyright (C) 1999,2003 Free Software Foundation, Inc.
+ Copyright (C) 1999,2003,2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-
+
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
@@ -38,19 +38,32 @@ exception statement from your version. */
package gnu.java.security.provider;
+import gnu.java.security.OID;
+import gnu.java.security.der.BitString;
+import gnu.java.security.der.DER;
+import gnu.java.security.der.DERValue;
+import gnu.java.security.der.DERWriter;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
import java.math.BigInteger;
+
import java.security.interfaces.DSAPublicKey;
import java.security.interfaces.DSAParams;
import java.security.spec.DSAParameterSpec;
+import java.util.ArrayList;
+
public class GnuDSAPublicKey implements DSAPublicKey
{
+ private byte[] encodedKey;
BigInteger y;
BigInteger p;
BigInteger q;
BigInteger g;
- public GnuDSAPublicKey(BigInteger y, BigInteger p, BigInteger q, BigInteger g )
+ public GnuDSAPublicKey(BigInteger y, BigInteger p, BigInteger q, BigInteger g )
{
this.y = y;
this.p = p;
@@ -65,16 +78,49 @@ public class GnuDSAPublicKey implements DSAPublicKey
public String getFormat()
{
- return null;
+ return "X.509";
}
+ /**
+ * The encoded form of DSA public keys is:
+ *
+ * <blockquote><pre>
+ * SubjectPublicKeyInfo ::= SEQUENCE {
+ * algorithm AlgorithmIdentifier,
+ * subjectPublicKey BIT STRING }
+ * </pre></blockquote>
+ */
public byte[] getEncoded()
{
- return null;
+ if (encodedKey != null)
+ return (byte[]) encodedKey.clone();
+ try
+ {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ArrayList spki = new ArrayList(2);
+ ArrayList alg = new ArrayList(2);
+ alg.add(new DERValue(DER.OBJECT_IDENTIFIER,
+ new OID("1.2.840.113549.1.1.1")));
+ ArrayList params = new ArrayList(3);
+ params.add(new DERValue(DER.INTEGER, p));
+ params.add(new DERValue(DER.INTEGER, q));
+ params.add(new DERValue(DER.INTEGER, g));
+ alg.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, params));
+ spki.add(new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, alg));
+ spki.add(new DERValue(DER.BIT_STRING, new BitString(y.toByteArray())));
+ DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, spki));
+ return (byte[]) (encodedKey = out.toByteArray()).clone();
+ }
+ catch (IOException ioe)
+ {
+ return null;
+ }
}
public DSAParams getParams()
{
+ if (p == null || q == null || g == null)
+ return null;
return (DSAParams)(new DSAParameterSpec(p,q,g));
}
@@ -85,7 +131,10 @@ public class GnuDSAPublicKey implements DSAPublicKey
public String toString()
{
- return "GnuDSAPublicKey: y=" + y.toString(16) + " p=" + p.toString(16)
- + " q=" + q.toString(16) + " g=" + g.toString(16);
+ return
+ "GnuDSAPublicKey: y=" + (y != null ? y.toString(16) : "(null)") +
+ " p=" + (p != null ? p.toString(16) : "(null)") +
+ " q=" + (q != null ? q.toString(16) : "(null)") +
+ " g=" + (g != null ? g.toString(16) : "(null)");
}
}
diff --git a/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java b/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
index 7d1d857a049..7bba5021338 100644
--- a/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
+++ b/libjava/gnu/java/security/provider/PKIXCertPathValidatorImpl.java
@@ -38,18 +38,40 @@ exception statement from your version. */
package gnu.java.security.provider;
+import gnu.java.security.OID;
+import gnu.java.security.x509.GnuPKIExtension;
+import gnu.java.security.x509.PolicyNodeImpl;
+import gnu.java.security.x509.X509CertSelectorImpl;
+import gnu.java.security.x509.X509CRLSelectorImpl;
+import gnu.java.security.x509.ext.BasicConstraints;
+import gnu.java.security.x509.ext.CertificatePolicies;
+import gnu.java.security.x509.ext.Extension;
+import gnu.java.security.x509.ext.KeyUsage;
+import gnu.java.security.x509.ext.PolicyConstraint;
+
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
-import java.security.Principal;
import java.security.PublicKey;
-import java.security.cert.*;
-
+import java.security.cert.CertificateException;
+import java.security.cert.CertPath;
+import java.security.cert.CertPathParameters;
+import java.security.cert.CertPathValidatorException;
+import java.security.cert.CertPathValidatorResult;
+import java.security.cert.CertPathValidatorSpi;
+import java.security.cert.CertStore;
+import java.security.cert.CertStoreException;
+import java.security.cert.CRL;
+import java.security.cert.PKIXCertPathChecker;
+import java.security.cert.PKIXCertPathValidatorResult;
+import java.security.cert.PKIXParameters;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509Certificate;
+import java.security.cert.X509CRL;
import java.security.interfaces.DSAParams;
import java.security.interfaces.DSAPublicKey;
-import java.security.spec.DSAParameterSpec;
import java.util.Arrays;
import java.util.Collection;
@@ -61,13 +83,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import gnu.java.security.x509.GnuPKIExtension;
-import gnu.java.security.x509.PolicyNodeImpl;
-import gnu.java.security.x509.X509CertSelectorImpl;
-import gnu.java.security.x509.X509CRLSelectorImpl;
-import gnu.java.security.x509.ext.*;
-import gnu.java.security.OID;
-
/**
* An implementation of the Public Key Infrastructure's X.509
* certificate path validation algorithm.
diff --git a/libjava/gnu/java/security/x509/X500DistinguishedName.java b/libjava/gnu/java/security/x509/X500DistinguishedName.java
index 64e320bef82..daf76a22dfa 100644
--- a/libjava/gnu/java/security/x509/X500DistinguishedName.java
+++ b/libjava/gnu/java/security/x509/X500DistinguishedName.java
@@ -55,7 +55,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
import gnu.java.security.der.DER;
import gnu.java.security.der.DERReader;
diff --git a/libjava/gnu/java/security/x509/X509CRL.java b/libjava/gnu/java/security/x509/X509CRL.java
index adaa003f3cb..33263af4325 100644
--- a/libjava/gnu/java/security/x509/X509CRL.java
+++ b/libjava/gnu/java/security/x509/X509CRL.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.security.x509;
-import gnu.java.io.ASN1ParsingException;
import gnu.java.security.OID;
import gnu.java.security.der.BitString;
import gnu.java.security.der.DER;
diff --git a/libjava/gnu/java/security/x509/X509CRLEntry.java b/libjava/gnu/java/security/x509/X509CRLEntry.java
index 252737c0eaa..da161153c62 100644
--- a/libjava/gnu/java/security/x509/X509CRLEntry.java
+++ b/libjava/gnu/java/security/x509/X509CRLEntry.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package gnu.java.security.x509;
-import java.io.InputStream;
import java.io.IOException;
import java.math.BigInteger;
diff --git a/libjava/gnu/java/security/x509/X509Certificate.java b/libjava/gnu/java/security/x509/X509Certificate.java
index 25a56d4a8ef..721439ef238 100644
--- a/libjava/gnu/java/security/x509/X509Certificate.java
+++ b/libjava/gnu/java/security/x509/X509Certificate.java
@@ -38,18 +38,14 @@ exception statement from your version. */
package gnu.java.security.x509;
-import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.IOException;
-import java.io.ObjectStreamException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.math.BigInteger;
-import java.net.InetAddress;
-
import java.security.AlgorithmParameters;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
@@ -79,7 +75,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
diff --git a/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java b/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
index 6f4e00b3f07..5441521990b 100644
--- a/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
+++ b/libjava/gnu/java/security/x509/ext/AuthorityKeyIdentifier.java
@@ -40,7 +40,6 @@ package gnu.java.security.x509.ext;
import java.io.IOException;
import java.math.BigInteger;
-import java.util.List;
import gnu.java.security.OID;
import gnu.java.security.der.DER;
diff --git a/libjava/gnu/java/security/x509/ext/CertificatePolicies.java b/libjava/gnu/java/security/x509/ext/CertificatePolicies.java
index 206fa7efaf6..9c14dc96ef7 100644
--- a/libjava/gnu/java/security/x509/ext/CertificatePolicies.java
+++ b/libjava/gnu/java/security/x509/ext/CertificatePolicies.java
@@ -39,7 +39,6 @@ exception statement from your version. */
package gnu.java.security.x509.ext;
import java.io.IOException;
-import java.math.BigInteger;
import java.security.cert.PolicyQualifierInfo;
import java.util.ArrayList;
diff --git a/libjava/gnu/java/security/x509/ext/PolicyConstraint.java b/libjava/gnu/java/security/x509/ext/PolicyConstraint.java
index 0949b5000ae..e33f960b30b 100644
--- a/libjava/gnu/java/security/x509/ext/PolicyConstraint.java
+++ b/libjava/gnu/java/security/x509/ext/PolicyConstraint.java
@@ -42,10 +42,8 @@ import java.io.IOException;
import java.math.BigInteger;
import gnu.java.security.OID;
-import gnu.java.security.der.DER;
import gnu.java.security.der.DERReader;
import gnu.java.security.der.DERValue;
-import gnu.java.security.x509.Util;
public class PolicyConstraint extends Extension.Value
{
diff --git a/libjava/gnu/java/text/FormatCharacterIterator.java b/libjava/gnu/java/text/FormatCharacterIterator.java
index 116198bdc13..942641a0818 100644
--- a/libjava/gnu/java/text/FormatCharacterIterator.java
+++ b/libjava/gnu/java/text/FormatCharacterIterator.java
@@ -1,6 +1,6 @@
/* FormatCharacter.java -- Implementation of AttributedCharacterIterator for
formatters.
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -494,13 +494,13 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
mergeAttributes(new HashMap[] { null, attributes }, new int[] { range_start, range_end });
}
- final private void debug(String s)
+ private void debug(String s)
{
if (Configuration.DEBUG)
System.out.println(s);
}
- final private void dumpTable()
+ private void dumpTable()
{
int start_range = 0;