summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2005-11-21 22:46:49 +0000
committerMark Wielaard <mark@klomp.org>2005-11-21 22:46:49 +0000
commitf125b2420673c979752d4d66b530a1c6bb286366 (patch)
tree530116f5f9828733c743aeaed16d90d3d5931440 /gnu
parent56f5a070e394ccc44d04de92499eab17745f8e5c (diff)
downloadclasspath-f125b2420673c979752d4d66b530a1c6bb286366.tar.gz
* gnu/java/awt/image/ImageDecoder.java (datainput): New field.
(ImageDecoder(DataInput)): New constructor. (startProduction): Create DataInputStreamWrapper when datainput set. (DataInputStreamWrapper): New private static helper class. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (GdkPixbufDecoder(DataInput)): New constructor. (setInput): Check whether getInput() results in an InputStream or DataInput.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/java/awt/image/ImageDecoder.java32
-rw-r--r--gnu/java/awt/peer/gtk/GdkPixbufDecoder.java15
2 files changed, 46 insertions, 1 deletions
diff --git a/gnu/java/awt/image/ImageDecoder.java b/gnu/java/awt/image/ImageDecoder.java
index 141c85417..8e8eecb25 100644
--- a/gnu/java/awt/image/ImageDecoder.java
+++ b/gnu/java/awt/image/ImageDecoder.java
@@ -40,6 +40,8 @@ package gnu.java.awt.image;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.io.ByteArrayInputStream;
+import java.io.DataInput;
+import java.io.EOFException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -55,6 +57,7 @@ public abstract class ImageDecoder implements ImageProducer
int offset;
int length;
InputStream input;
+ DataInput datainput;
static
{
@@ -79,6 +82,11 @@ public abstract class ImageDecoder implements ImageProducer
this.input = is;
}
+ public ImageDecoder (DataInput datainput)
+ {
+ this.datainput = datainput;
+ }
+
public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
data = imagedata;
@@ -119,6 +127,8 @@ public abstract class ImageDecoder implements ImageProducer
{
if (url != null)
input = url.openStream();
+ else if (datainput != null)
+ input = new DataInputStreamWrapper(datainput);
else
{
if (filename != null)
@@ -153,4 +163,26 @@ public abstract class ImageDecoder implements ImageProducer
}
public abstract void produce (Vector v, InputStream is) throws IOException;
+
+ private static class DataInputStreamWrapper extends InputStream
+ {
+ private final DataInput datainput;
+
+ DataInputStreamWrapper(DataInput datainput)
+ {
+ this.datainput = datainput;
+ }
+
+ public int read() throws IOException
+ {
+ try
+ {
+ return datainput.readByte() & 0xFF;
+ }
+ catch (EOFException eofe)
+ {
+ return -1;
+ }
+ }
+ }
}
diff --git a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
index 85cb1e47a..054ebaaae 100644
--- a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+++ b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
@@ -47,6 +47,7 @@ import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
+import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.InputStream;
@@ -102,6 +103,11 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
0x00ff0000,
0x0000ff00,
0x000000ff);
+ public GdkPixbufDecoder (DataInput datainput)
+ {
+ super (datainput);
+ }
+
public GdkPixbufDecoder (InputStream in)
{
super (in);
@@ -630,7 +636,14 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
boolean ignoreMetadata)
{
super.setInput(input, seekForwardOnly, ignoreMetadata);
- dec = new GdkPixbufDecoder((InputStream) getInput());
+ Object get = getInput();
+ if (get instanceof InputStream)
+ dec = new GdkPixbufDecoder((InputStream) get);
+ else if (get instanceof DataInput)
+ dec = new GdkPixbufDecoder((DataInput) get);
+ else
+ throw new IllegalArgumentException("input object not supported: "
+ + get);
}
public BufferedImage read(int imageIndex, ImageReadParam param)