diff options
Diffstat (limited to 'libjava/gnu/java/awt/peer/gtk/GtkImage.java')
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkImage.java | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkImage.java b/libjava/gnu/java/awt/peer/gtk/GtkImage.java index 6252a506f0d..5f8d2237b7c 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkImage.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkImage.java @@ -60,6 +60,7 @@ public class GtkImage extends Image implements ImageConsumer Vector propertyObservers = new Vector (); ImageProducer source; + ImageObserver observer; Graphics g; /* Variables in which we stored cached data, if possible. @@ -79,9 +80,15 @@ public class GtkImage extends Image implements ImageConsumer source = producer; this.g = g; - source.addConsumer (this); + if (source != null) + source.addConsumer (this); } - + + public void setObserver (ImageObserver observer) + { + this.observer = observer; + } + public synchronized int getWidth (ImageObserver observer) { @@ -135,8 +142,11 @@ public class GtkImage extends Image implements ImageConsumer pixelCache = null; model = null; - source.removeConsumer (this); - source.addConsumer (this); + if (source != null) + { + source.removeConsumer (this); + source.addConsumer (this); + } } public boolean @@ -166,6 +176,12 @@ public class GtkImage extends Image implements ImageConsumer ImageObserver io = (ImageObserver) heightObservers.elementAt (i); 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 @@ -200,6 +216,11 @@ public class GtkImage extends Image implements ImageConsumer { setPixels (x, y, width, height, cm, convertPixels (pixels), offset, scansize); + + if (observer != null) + observer.imageUpdate (this, + ImageObserver.SOMEBITS, + x, y, width, height); } public synchronized void @@ -241,7 +262,20 @@ public class GtkImage extends Image implements ImageConsumer if (status == ImageConsumer.SINGLEFRAMEDONE) 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 @@ -254,8 +288,11 @@ public class GtkImage extends Image implements ImageConsumer } else { - source.startProduction (painter); - source.removeConsumer (painter); + if (source != null) + { + source.startProduction (painter); + source.removeConsumer (painter); + } } } |