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

#ifndef __gnu_java_awt_peer_gtk_GdkPixbufDecoder$GdkPixbufReader__
#define __gnu_java_awt_peer_gtk_GdkPixbufDecoder$GdkPixbufReader__

#pragma interface

#include <javax/imageio/ImageReader.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace gtk
          {
              class GdkPixbufDecoder;
              class GdkPixbufDecoder$GdkPixbufReader;
              class GdkPixbufDecoder$GdkPixbufReaderSpi;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
      namespace image
      {
          class BufferedImage;
          class ColorModel;
      }
    }
  }
  namespace javax
  {
    namespace imageio
    {
        class ImageReadParam;
      namespace metadata
      {
          class IIOMetadata;
      }
    }
  }
}

class gnu::java::awt::peer::gtk::GdkPixbufDecoder$GdkPixbufReader : public ::javax::imageio::ImageReader
{

public:
  GdkPixbufDecoder$GdkPixbufReader(::gnu::java::awt::peer::gtk::GdkPixbufDecoder$GdkPixbufReaderSpi *, ::java::lang::Object *);
  GdkPixbufDecoder$GdkPixbufReader(::gnu::java::awt::peer::gtk::GdkPixbufDecoder$GdkPixbufReaderSpi *, ::java::lang::Object *, ::gnu::java::awt::peer::gtk::GdkPixbufDecoder *);
  virtual void setDimensions(jint, jint);
  virtual void setProperties(::java::util::Hashtable *);
  virtual void setColorModel(::java::awt::image::ColorModel *);
  virtual void setHints(jint);
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jbyte > *, jint, jint);
  virtual void setPixels(jint, jint, jint, jint, ::java::awt::image::ColorModel *, JArray< jint > *, jint, jint);
  virtual void imageComplete(jint);
  virtual ::java::awt::image::BufferedImage * getBufferedImage();
  virtual jint getNumImages(jboolean);
  virtual ::javax::imageio::metadata::IIOMetadata * getImageMetadata(jint);
  virtual ::javax::imageio::metadata::IIOMetadata * getStreamMetadata();
  virtual ::java::util::Iterator * getImageTypes(jint);
  virtual jint getHeight(jint);
  virtual jint getWidth(jint);
  virtual void setInput(::java::lang::Object *, jboolean, jboolean);
  virtual ::java::awt::image::BufferedImage * read(jint, ::javax::imageio::ImageReadParam *);
public: // actually package-private
  ::gnu::java::awt::peer::gtk::GdkPixbufDecoder * __attribute__((aligned(__alignof__( ::javax::imageio::ImageReader)))) dec;
  ::java::awt::image::BufferedImage * bufferedImage;
  ::java::awt::image::ColorModel * defaultModel;
  jint width;
  jint height;
  ::java::lang::String * ext;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_gtk_GdkPixbufDecoder$GdkPixbufReader__
