Commit a5966c9e by Thomas Fitzsimmons Committed by Thomas Fitzsimmons

Makefile.am: Add GdkPixbufDecoder.java and gnu_java_awt_peer_gtk_GdkPixbufDecoder.c

2003-11-11  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am: Add GdkPixbufDecoder.java and
	gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
	* Makefile.in: Regenerate.
	* gnu/java/awt/image/ImageDecoder.java (ImageDecoder(byte[],int,int)):
	New constructor.
	(startProduction): Create ByteArrayInputStream when url and filename are
	null.
	(produce): Declare stream parameter as InputStream.
	* gnu/java/awt/image/XBMDecoder.java (produce): Declare stream parameter
	as InputStream.
	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
	(GdkPixbufDecoder(byte[],int,int)): New constructor.
	(produce): Declare stream parameter as InputStream.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java (prepareImage): Throw NPE
	if image is null.  Set image's observer before running PrepareImage
	thread.  Pass image to startProduction.
	* gnu/java/awt/peer/gtk/GtkImage.java: Add null checks before calls to
	source's member functions.
	(observer): New field.
	(setObserver): New method.
	(setDimensions, setPixels, imageComplete): Call observer's imageUpdate.
	* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage, getImage): Return
	new GtkImage.
	(prepareImage): Implement.
	* java/awt/Component.java: Add static fields incrementalDraw and
	redrawRate.
	(imageUpdate): Implement.
	(createImage): Call Toolkit's createImage if peer is null.
	(prepareImage): Throw NPE if image is null.
	* java/awt/MediaTracker.java: Fix return value.

From-SVN: r73476
parent c754c6f1
2003-11-11 Thomas Fitzsimmons <fitzsim@redhat.com> 2003-11-11 Thomas Fitzsimmons <fitzsim@redhat.com>
* Makefile.am: Add GdkPixbufDecoder.java and
gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
* Makefile.in: Regenerate.
* gnu/java/awt/image/ImageDecoder.java (ImageDecoder(byte[],int,int)):
New constructor.
(startProduction): Create ByteArrayInputStream when url and filename are
null.
(produce): Declare stream parameter as InputStream.
* gnu/java/awt/image/XBMDecoder.java (produce): Declare stream parameter
as InputStream.
* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
(GdkPixbufDecoder(byte[],int,int)): New constructor.
(produce): Declare stream parameter as InputStream.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java (prepareImage): Throw NPE
if image is null. Set image's observer before running PrepareImage
thread. Pass image to startProduction.
* gnu/java/awt/peer/gtk/GtkImage.java: Add null checks before calls to
source's member functions.
(observer): New field.
(setObserver): New method.
(setDimensions, setPixels, imageComplete): Call observer's imageUpdate.
* gnu/java/awt/peer/gtk/GtkToolkit.java (checkImage, getImage): Return
new GtkImage.
(prepareImage): Implement.
* java/awt/Component.java: Add static fields incrementalDraw and
redrawRate.
(imageUpdate): Implement.
(createImage): Call Toolkit's createImage if peer is null.
(prepareImage): Throw NPE if image is null.
* java/awt/MediaTracker.java: Fix return value.
2003-11-11 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkLabelPeer.java (create()): Call new create. * gnu/java/awt/peer/gtk/GtkLabelPeer.java (create()): Call new create.
(create(String, float)): New method. (create(String, float)): New method.
(setText): Make native. (setText): Make native.
......
...@@ -170,6 +170,7 @@ libgcj_la_LINK = $(LIBLINK) ...@@ -170,6 +170,7 @@ libgcj_la_LINK = $(LIBLINK)
gtk_c_source_files = \ gtk_c_source_files = \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
...@@ -206,6 +207,7 @@ jni/classpath/primlib.c ...@@ -206,6 +207,7 @@ jni/classpath/primlib.c
gtk_awt_peer_sources = \ gtk_awt_peer_sources = \
gnu/java/awt/peer/gtk/GdkFontMetrics.java \ gnu/java/awt/peer/gtk/GdkFontMetrics.java \
gnu/java/awt/peer/gtk/GdkGraphics.java \ gnu/java/awt/peer/gtk/GdkGraphics.java \
gnu/java/awt/peer/gtk/GdkPixbufDecoder.java \
gnu/java/awt/peer/gtk/GtkArg.java \ gnu/java/awt/peer/gtk/GtkArg.java \
gnu/java/awt/peer/gtk/GtkArgList.java \ gnu/java/awt/peer/gtk/GtkArgList.java \
gnu/java/awt/peer/gtk/GtkButtonPeer.java \ gnu/java/awt/peer/gtk/GtkButtonPeer.java \
......
...@@ -261,6 +261,7 @@ libgcj_la_LINK = $(LIBLINK) ...@@ -261,6 +261,7 @@ libgcj_la_LINK = $(LIBLINK)
gtk_c_source_files = \ gtk_c_source_files = \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \
...@@ -297,6 +298,7 @@ jni/classpath/primlib.c ...@@ -297,6 +298,7 @@ jni/classpath/primlib.c
gtk_awt_peer_sources = \ gtk_awt_peer_sources = \
gnu/java/awt/peer/gtk/GdkFontMetrics.java \ gnu/java/awt/peer/gtk/GdkFontMetrics.java \
gnu/java/awt/peer/gtk/GdkGraphics.java \ gnu/java/awt/peer/gtk/GdkGraphics.java \
gnu/java/awt/peer/gtk/GdkPixbufDecoder.java \
gnu/java/awt/peer/gtk/GtkArg.java \ gnu/java/awt/peer/gtk/GtkArg.java \
gnu/java/awt/peer/gtk/GtkArgList.java \ gnu/java/awt/peer/gtk/GtkArgList.java \
gnu/java/awt/peer/gtk/GtkButtonPeer.java \ gnu/java/awt/peer/gtk/GtkButtonPeer.java \
...@@ -2624,8 +2626,9 @@ lib_gnu_java_awt_peer_gtk_la_LDFLAGS = ...@@ -2624,8 +2626,9 @@ lib_gnu_java_awt_peer_gtk_la_LDFLAGS =
lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES = lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES =
lib_gnu_java_awt_peer_gtk_la_OBJECTS = \ lib_gnu_java_awt_peer_gtk_la_OBJECTS = \
gnu/java/awt/peer/gtk/GdkFontMetrics.lo \ gnu/java/awt/peer/gtk/GdkFontMetrics.lo \
gnu/java/awt/peer/gtk/GdkGraphics.lo gnu/java/awt/peer/gtk/GtkArg.lo \ gnu/java/awt/peer/gtk/GdkGraphics.lo \
gnu/java/awt/peer/gtk/GtkArgList.lo \ gnu/java/awt/peer/gtk/GdkPixbufDecoder.lo \
gnu/java/awt/peer/gtk/GtkArg.lo gnu/java/awt/peer/gtk/GtkArgList.lo \
gnu/java/awt/peer/gtk/GtkButtonPeer.lo \ gnu/java/awt/peer/gtk/GtkButtonPeer.lo \
gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \ gnu/java/awt/peer/gtk/GtkCanvasPeer.lo \
gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \ gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.lo \
...@@ -2662,6 +2665,7 @@ gnu/java/awt/peer/gtk/GtkToolkit.lo \ ...@@ -2662,6 +2665,7 @@ gnu/java/awt/peer/gtk/GtkToolkit.lo \
gnu/java/awt/peer/gtk/GtkWindowPeer.lo \ gnu/java/awt/peer/gtk/GtkWindowPeer.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.lo \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.lo \
...@@ -2827,6 +2831,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ ...@@ -2827,6 +2831,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/awt/peer/GLightweightPeer.P \ .deps/gnu/java/awt/peer/GLightweightPeer.P \
.deps/gnu/java/awt/peer/gtk/GdkFontMetrics.P \ .deps/gnu/java/awt/peer/gtk/GdkFontMetrics.P \
.deps/gnu/java/awt/peer/gtk/GdkGraphics.P \ .deps/gnu/java/awt/peer/gtk/GdkGraphics.P \
.deps/gnu/java/awt/peer/gtk/GdkPixbufDecoder.P \
.deps/gnu/java/awt/peer/gtk/GtkArg.P \ .deps/gnu/java/awt/peer/gtk/GtkArg.P \
.deps/gnu/java/awt/peer/gtk/GtkArgList.P \ .deps/gnu/java/awt/peer/gtk/GtkArgList.P \
.deps/gnu/java/awt/peer/gtk/GtkButtonPeer.P \ .deps/gnu/java/awt/peer/gtk/GtkButtonPeer.P \
...@@ -4284,6 +4289,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ ...@@ -4284,6 +4289,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/jni/classpath/primlib.P \ .deps/jni/classpath/primlib.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.P \ .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.P \ .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.P \ .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.P \ .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.P \
.deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.P \ .deps/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.P \
......
...@@ -48,6 +48,10 @@ public abstract class ImageDecoder implements ImageProducer ...@@ -48,6 +48,10 @@ public abstract class ImageDecoder implements ImageProducer
Vector consumers = new Vector (); Vector consumers = new Vector ();
String filename; String filename;
URL url; URL url;
byte[] data;
int offset;
int length;
InputStream input;
public static ColorModel cm; public static ColorModel cm;
...@@ -69,6 +73,13 @@ public abstract class ImageDecoder implements ImageProducer ...@@ -69,6 +73,13 @@ public abstract class ImageDecoder implements ImageProducer
this.url = url; this.url = url;
} }
public ImageDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
data = imagedata;
offset = imageoffset;
length = imagelength;
}
public void addConsumer (ImageConsumer ic) public void addConsumer (ImageConsumer ic)
{ {
consumers.addElement (ic); consumers.addElement (ic);
...@@ -90,11 +101,22 @@ public abstract class ImageDecoder implements ImageProducer ...@@ -90,11 +101,22 @@ public abstract class ImageDecoder implements ImageProducer
Vector list = (Vector) consumers.clone (); Vector list = (Vector) consumers.clone ();
try try
{ {
FileInputStream is = (url == null) ? new FileInputStream (filename) : // Create the input stream here rather than in the
(FileInputStream) url.openStream(); // ImageDecoder constructors so that exceptions cause
// imageComplete to be called with an appropriate error
produce (list, is); // 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);
}
catch (Exception e) catch (Exception e)
{ {
for (int i = 0; i < list.size (); i++) for (int i = 0; i < list.size (); i++)
...@@ -109,5 +131,5 @@ public abstract class ImageDecoder implements ImageProducer ...@@ -109,5 +131,5 @@ public abstract class ImageDecoder implements ImageProducer
{ {
} }
abstract void produce (Vector v, FileInputStream is) throws IOException; abstract void produce (Vector v, InputStream is) throws IOException;
} }
...@@ -62,7 +62,7 @@ public class XBMDecoder extends ImageDecoder ...@@ -62,7 +62,7 @@ public class XBMDecoder extends ImageDecoder
super (url); super (url);
} }
public void produce (Vector v, FileInputStream is) throws IOException public void produce (Vector v, InputStream is) throws IOException
{ {
reader = new BufferedReader (new InputStreamReader (is)); reader = new BufferedReader (new InputStreamReader (is));
int width = -1, height = -1; int width = -1, height = -1;
......
...@@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk; ...@@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk;
import java.awt.image.*; import java.awt.image.*;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.Vector; import java.util.Vector;
...@@ -85,6 +86,12 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder ...@@ -85,6 +86,12 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
initState (); initState ();
} }
public GdkPixbufDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
super (imagedata, imageoffset, imagelength);
initState ();
}
// called back by native side // called back by native side
void areaPrepared (int width, int height) void areaPrepared (int width, int height)
{ {
...@@ -122,7 +129,7 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder ...@@ -122,7 +129,7 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
// this object, feeding back decoded pixel blocks, which we pass to each // this object, feeding back decoded pixel blocks, which we pass to each
// of the ImageConsumers in the provided Vector. // of the ImageConsumers in the provided Vector.
void produce (Vector v, FileInputStream is) throws IOException public void produce (Vector v, InputStream is) throws IOException
{ {
curr = v; curr = v;
...@@ -213,5 +220,4 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder ...@@ -213,5 +220,4 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
dec.startProduction (bb); dec.startProduction (bb);
return bb.getBufferedImage (); return bb.getBufferedImage ();
} }
} }
...@@ -230,6 +230,9 @@ public class GtkComponentPeer extends GtkGenericPeer ...@@ -230,6 +230,9 @@ public class GtkComponentPeer extends GtkGenericPeer
public boolean prepareImage (Image image, int width, int height, public boolean prepareImage (Image image, int width, int height,
ImageObserver observer) ImageObserver observer)
{ {
if (image == null)
throw new NullPointerException ();
GtkImage i = (GtkImage) image; GtkImage i = (GtkImage) image;
if (i.isLoaded ()) return true; if (i.isLoaded ()) return true;
...@@ -242,13 +245,12 @@ public class GtkComponentPeer extends GtkGenericPeer ...@@ -242,13 +245,12 @@ public class GtkComponentPeer extends GtkGenericPeer
PrepareImage (GtkImage image, ImageObserver observer) PrepareImage (GtkImage image, ImageObserver observer)
{ {
this.image = image; this.image = image;
this.observer = observer; image.setObserver (observer);
} }
public void run () public void run ()
{ {
// XXX: need to return data to image observer image.source.startProduction (image);
image.source.startProduction (null);
} }
} }
......
...@@ -60,6 +60,7 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -60,6 +60,7 @@ public class GtkImage extends Image implements ImageConsumer
Vector propertyObservers = new Vector (); Vector propertyObservers = new Vector ();
ImageProducer source; ImageProducer source;
ImageObserver observer;
Graphics g; Graphics g;
/* Variables in which we stored cached data, if possible. /* Variables in which we stored cached data, if possible.
...@@ -79,9 +80,15 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -79,9 +80,15 @@ public class GtkImage extends Image implements ImageConsumer
source = producer; source = producer;
this.g = g; this.g = g;
source.addConsumer (this); if (source != null)
source.addConsumer (this);
} }
public void setObserver (ImageObserver observer)
{
this.observer = observer;
}
public synchronized int public synchronized int
getWidth (ImageObserver observer) getWidth (ImageObserver observer)
{ {
...@@ -135,8 +142,11 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -135,8 +142,11 @@ public class GtkImage extends Image implements ImageConsumer
pixelCache = null; pixelCache = null;
model = null; model = null;
source.removeConsumer (this); if (source != null)
source.addConsumer (this); {
source.removeConsumer (this);
source.addConsumer (this);
}
} }
public boolean public boolean
...@@ -166,6 +176,12 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -166,6 +176,12 @@ public class GtkImage extends Image implements ImageConsumer
ImageObserver io = (ImageObserver) heightObservers.elementAt (i); ImageObserver io = (ImageObserver) heightObservers.elementAt (i);
io.imageUpdate (this, ImageObserver.HEIGHT, -1, -1, width, height); io.imageUpdate (this, ImageObserver.HEIGHT, -1, -1, width, height);
} }
if (observer != null)
observer.imageUpdate (this,
(ImageObserver.WIDTH
| ImageObserver.HEIGHT),
-1, -1, width, height);
} }
public synchronized void public synchronized void
...@@ -200,6 +216,11 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -200,6 +216,11 @@ public class GtkImage extends Image implements ImageConsumer
{ {
setPixels (x, y, width, height, cm, convertPixels (pixels), offset, setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
scansize); scansize);
if (observer != null)
observer.imageUpdate (this,
ImageObserver.SOMEBITS,
x, y, width, height);
} }
public synchronized void public synchronized void
...@@ -241,7 +262,20 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -241,7 +262,20 @@ public class GtkImage extends Image implements ImageConsumer
if (status == ImageConsumer.SINGLEFRAMEDONE) if (status == ImageConsumer.SINGLEFRAMEDONE)
isCacheable = false; isCacheable = false;
source.removeConsumer (this); if (observer != null)
{
if (status == ImageConsumer.IMAGEERROR)
observer.imageUpdate (null,
ImageObserver.ERROR,
-1, -1, -1, -1);
else
observer.imageUpdate (null,
ImageObserver.ALLBITS,
-1, -1, -1, -1);
}
if (source != null)
source.removeConsumer (this);
} }
public synchronized void public synchronized void
...@@ -254,8 +288,11 @@ public class GtkImage extends Image implements ImageConsumer ...@@ -254,8 +288,11 @@ public class GtkImage extends Image implements ImageConsumer
} }
else else
{ {
source.startProduction (painter); if (source != null)
source.removeConsumer (painter); {
source.startProduction (painter);
source.removeConsumer (painter);
}
} }
} }
......
...@@ -56,6 +56,7 @@ import gnu.java.awt.EmbeddedWindow; ...@@ -56,6 +56,7 @@ import gnu.java.awt.EmbeddedWindow;
import gnu.java.awt.EmbeddedWindowSupport; import gnu.java.awt.EmbeddedWindowSupport;
import gnu.java.awt.peer.EmbeddedWindowPeer; import gnu.java.awt.peer.EmbeddedWindowPeer;
import gnu.classpath.Configuration; import gnu.classpath.Configuration;
import gnu.java.awt.peer.gtk.GdkPixbufDecoder;
/* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer(). /* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
This merits comment. We are basically calling Sun's bluff on this one. This merits comment. We are basically calling Sun's bluff on this one.
...@@ -91,24 +92,17 @@ public class GtkToolkit extends Toolkit ...@@ -91,24 +92,17 @@ public class GtkToolkit extends Toolkit
public int checkImage (Image image, int width, int height, public int checkImage (Image image, int width, int height,
ImageObserver observer) ImageObserver observer)
{ {
return ImageObserver.ALLBITS; return ((GtkImage) image).checkImage ();
// GtkImage i = (GtkImage) image;
// return i.checkImage ();
} }
public Image createImage (String filename) public Image createImage (String filename)
{ {
// FIXME - gcj local: GdkPixbufDecoder doesn't work. return new GtkImage (new GdkPixbufDecoder (filename), null);
// return new GtkImage (new GdkPixbufDecoder (filename), null);
return null;
} }
public Image createImage (URL url) public Image createImage (URL url)
{ {
// FIXME - gcj local: GdkPixbufDecoder doesn't work. return new GtkImage (new GdkPixbufDecoder (url), null);
// return new GtkImage (new GdkPixbufDecoder (url), null);
return null;
} }
public Image createImage (ImageProducer producer) public Image createImage (ImageProducer producer)
...@@ -117,10 +111,12 @@ public class GtkToolkit extends Toolkit ...@@ -117,10 +111,12 @@ public class GtkToolkit extends Toolkit
} }
public Image createImage (byte[] imagedata, int imageoffset, public Image createImage (byte[] imagedata, int imageoffset,
int imagelength) int imagelength)
{ {
// System.out.println ("createImage byte[] NOT SUPPORTED"); return new GtkImage (new GdkPixbufDecoder (imagedata,
return null; imageoffset,
imagelength),
null);
} }
public ColorModel getColorModel () public ColorModel getColorModel ()
...@@ -144,16 +140,12 @@ public class GtkToolkit extends Toolkit ...@@ -144,16 +140,12 @@ public class GtkToolkit extends Toolkit
public Image getImage (String filename) public Image getImage (String filename)
{ {
// FIXME - gcj local: GdkPixbufDecoder doesn't work. return new GtkImage (new GdkPixbufDecoder (filename), null);
// return new GtkImage (new GdkPixbufDecoder (filename), null);
return null;
} }
public Image getImage (URL url) public Image getImage (URL url)
{ {
// FIXME - gcj local: GdkPixbufDecoder doesn't work. return new GtkImage (new GdkPixbufDecoder (url), null);
// return new GtkImage (new GdkPixbufDecoder (url), null);
return null;
} }
public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props) public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props)
...@@ -177,6 +169,31 @@ public class GtkToolkit extends Toolkit ...@@ -177,6 +169,31 @@ public class GtkToolkit extends Toolkit
public boolean prepareImage (Image image, int width, int height, public boolean prepareImage (Image image, int width, int height,
ImageObserver observer) ImageObserver observer)
{ {
if (image == null)
throw new NullPointerException ();
GtkImage i = (GtkImage) image;
if (i.isLoaded ()) return true;
class PrepareImage extends Thread
{
GtkImage image;
ImageObserver observer;
PrepareImage (GtkImage image, ImageObserver observer)
{
this.image = image;
image.setObserver (observer);
}
public void run ()
{
image.source.startProduction (image);
}
}
new PrepareImage (i, observer).start ();
return false; return false;
} }
......
...@@ -555,6 +555,17 @@ public abstract class Component ...@@ -555,6 +555,17 @@ public abstract class Component
*/ */
transient BufferStrategy bufferStrategy; transient BufferStrategy bufferStrategy;
/**
* The system properties that affect image updating.
*/
private static transient boolean incrementalDraw;
private static transient Long redrawRate;
static
{
incrementalDraw = Boolean.getBoolean ("awt.image.incrementalDraw");
redrawRate = Long.getLong ("awt.image.redrawrate");
}
// Public and protected API. // Public and protected API.
...@@ -1832,7 +1843,9 @@ public abstract class Component ...@@ -1832,7 +1843,9 @@ public abstract class Component
* @param y the Y coordinate * @param y the Y coordinate
* @param w the width * @param w the width
* @param h the height * @param h the height
* @return true if the image has been fully loaded * @return false if the image is completely loaded, loading has been
* aborted, or an error has occurred. true if more updates are
* required.
* @see ImageObserver * @see ImageObserver
* @see Graphics#drawImage(Image, int, int, Color, ImageObserver) * @see Graphics#drawImage(Image, int, int, Color, ImageObserver)
* @see Graphics#drawImage(Image, int, int, ImageObserver) * @see Graphics#drawImage(Image, int, int, ImageObserver)
...@@ -1842,8 +1855,24 @@ public abstract class Component ...@@ -1842,8 +1855,24 @@ public abstract class Component
*/ */
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
{ {
// XXX Implement. if ((flags & (FRAMEBITS | ALLBITS)) != 0)
throw new Error("not implemented"); repaint ();
else if ((flags & SOMEBITS) != 0)
{
if (incrementalDraw)
{
if (redrawRate != null)
{
long tm = redrawRate.longValue();
if (tm < 0)
tm = 0;
repaint (tm);
}
else
repaint (100);
}
}
return (flags & (ALLBITS | ABORT | ERROR)) == 0;
} }
/** /**
...@@ -1854,8 +1883,11 @@ public abstract class Component ...@@ -1854,8 +1883,11 @@ public abstract class Component
*/ */
public Image createImage(ImageProducer producer) public Image createImage(ImageProducer producer)
{ {
// XXX What if peer or producer is null? // Sun allows producer to be null.
return peer.createImage(producer); if (peer != null)
return peer.createImage(producer);
else
return getToolkit().createImage(producer);
} }
/** /**
...@@ -1930,6 +1962,9 @@ public abstract class Component ...@@ -1930,6 +1962,9 @@ public abstract class Component
*/ */
public boolean prepareImage(Image image, ImageObserver observer) public boolean prepareImage(Image image, ImageObserver observer)
{ {
if (image == null)
throw new NullPointerException ();
return prepareImage(image, image.getWidth(observer), return prepareImage(image, image.getWidth(observer),
image.getHeight(observer), observer); image.getHeight(observer), observer);
} }
......
...@@ -88,8 +88,8 @@ public class MediaTracker implements java.io.Serializable ...@@ -88,8 +88,8 @@ public class MediaTracker implements java.io.Serializable
{ {
MediaTracker.this.notifyAll(); MediaTracker.this.notifyAll();
} }
// If status is not COMPLETE then we need more updates.
return ((status & COMPLETE) != 0); return (status & COMPLETE) == 0;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment