summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/awt/peer/gtk/GtkImage.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java/awt/peer/gtk/GtkImage.java')
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkImage.java51
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);
+ }
}
}
OpenPOWER on IntegriCloud