001: /*
002: * @(#)ImageProducer.java 1.20 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027:
028: package java.awt.image;
029:
030: /**
031: * The interface for objects which can produce the image data for Images.
032: * Each image contains an ImageProducer which is used to reconstruct
033: * the image whenever it is needed, for example, when a new size of the
034: * Image is scaled, or when the width or height of the Image is being
035: * requested.
036: *
037: * @see ImageConsumer
038: *
039: * @version 1.16 08/19/02
040: * @author Jim Graham
041: */
042: public interface ImageProducer {
043: /**
044: * This method is used to register an ImageConsumer with the
045: * ImageProducer for access to the image data during a later
046: * reconstruction of the Image. The ImageProducer may, at its
047: * discretion, start delivering the image data to the consumer
048: * using the ImageConsumer interface immediately, or when the
049: * next available image reconstruction is triggered by a call
050: * to the startProduction method.
051: * @see #startProduction
052: */
053: public void addConsumer(ImageConsumer ic);
054:
055: /**
056: * This method determines if a given ImageConsumer object
057: * is currently registered with this ImageProducer as one
058: * of its consumers.
059: */
060: public boolean isConsumer(ImageConsumer ic);
061:
062: /**
063: * This method removes the given ImageConsumer object
064: * from the list of consumers currently registered to
065: * receive image data. It is not considered an error
066: * to remove a consumer that is not currently registered.
067: * The ImageProducer should stop sending data to this
068: * consumer as soon as is feasible.
069: */
070: public void removeConsumer(ImageConsumer ic);
071:
072: /**
073: * This method both registers the given ImageConsumer object
074: * as a consumer and starts an immediate reconstruction of
075: * the image data which will then be delivered to this
076: * consumer and any other consumer which may have already
077: * been registered with the producer. This method differs
078: * from the addConsumer method in that a reproduction of
079: * the image data should be triggered as soon as possible.
080: * @see #addConsumer
081: */
082: public void startProduction(ImageConsumer ic);
083:
084: /**
085: * This method is used by an ImageConsumer to request that
086: * the ImageProducer attempt to resend the image data one
087: * more time in TOPDOWNLEFTRIGHT order so that higher
088: * quality conversion algorithms which depend on receiving
089: * pixels in order can be used to produce a better output
090: * version of the image. The ImageProducer is free to
091: * ignore this call if it cannot resend the data in that
092: * order. If the data can be resent, then the ImageProducer
093: * should respond by executing the following minimum set of
094: * ImageConsumer method calls:
095: * <pre>
096: * ic.setHints(TOPDOWNLEFTRIGHT | < otherhints >);
097: * ic.setPixels(...); // As many times as needed
098: * ic.imageComplete();
099: * </pre>
100: * @see ImageConsumer#setHints
101: */
102: public void requestTopDownLeftRightResend(ImageConsumer ic);
103: }
|