diff options
Diffstat (limited to 'libjava/java/awt/image/BufferedImage.java')
-rw-r--r-- | libjava/java/awt/image/BufferedImage.java | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/libjava/java/awt/image/BufferedImage.java b/libjava/java/awt/image/BufferedImage.java index 547301da8d8..b18779af146 100644 --- a/libjava/java/awt/image/BufferedImage.java +++ b/libjava/java/awt/image/BufferedImage.java @@ -47,6 +47,8 @@ import java.awt.Transparency; import java.awt.color.ColorSpace; import java.util.Hashtable; import java.util.Vector; +import java.util.HashSet; +import java.util.Iterator; import gnu.java.awt.ComponentDataBlitOp; /** @@ -442,7 +444,57 @@ public class BufferedImage extends Image public ImageProducer getSource() { - throw new UnsupportedOperationException("not implemented"); + return new ImageProducer() { + + HashSet consumers = new HashSet(); + + public void addConsumer(ImageConsumer ic) + { + consumers.add(ic); + } + + public boolean isConsumer(ImageConsumer ic) + { + return consumers.contains(ic); + } + + public void removeConsumer(ImageConsumer ic) + { + consumers.remove(ic); + } + + public void startProduction(ImageConsumer ic) + { + int x = 0; + int y = 0; + int width = getWidth(); + int height = getHeight(); + int stride = width; + int offset = 0; + int[] pixels = getRGB(x, y, + width, height, + (int[])null, offset, stride); + ColorModel model = getColorModel(); + + consumers.add(ic); + + Iterator i = consumers.iterator(); + while(i.hasNext()) + { + ImageConsumer c = (ImageConsumer) i.next(); + c.setHints(ImageConsumer.SINGLEPASS); + c.setDimensions(getWidth(), getHeight()); + c.setPixels(x, y, width, height, model, pixels, offset, stride); + c.imageComplete(ImageConsumer.STATICIMAGEDONE); + } + } + + public void requestTopDownLeftRightResend(ImageConsumer ic) + { + startProduction(ic); + } + + }; } public Vector getSources() |