
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_awt_image_ImageConsumer__
#define __java_awt_image_ImageConsumer__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace image
      {
          class ColorModel;
          class ImageConsumer;
      }
    }
  }
}

class java::awt::image::ImageConsumer : public ::java::lang::Object
{

public:
  virtual void setDimensions(jint, jint) = 0;
  virtual void setProperties(::java::util::Hashtable *) = 0;
  virtual void setColorModel(::java::awt::image::ColorModel *) = 0;
  virtual void setHints(jint) = 0;
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jbyte > *, jint, jint) = 0;
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jint > *, jint, jint) = 0;
  virtual void imageComplete(jint) = 0;
  static const jint RANDOMPIXELORDER = 1;
  static const jint TOPDOWNLEFTRIGHT = 2;
  static const jint COMPLETESCANLINES = 4;
  static const jint SINGLEPASS = 8;
  static const jint SINGLEFRAME = 16;
  static const jint IMAGEERROR = 1;
  static const jint SINGLEFRAMEDONE = 2;
  static const jint STATICIMAGEDONE = 3;
  static const jint IMAGEABORTED = 4;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_awt_image_ImageConsumer__
