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

#ifndef __gnu_java_awt_peer_gtk_GdkGraphicsConfiguration__
#define __gnu_java_awt_peer_gtk_GdkGraphicsConfiguration__

#pragma interface

#include <java/awt/GraphicsConfiguration.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace gtk
          {
              class GdkGraphicsConfiguration;
              class GdkScreenGraphicsDevice;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class BufferCapabilities;
        class GraphicsDevice;
        class ImageCapabilities;
        class Rectangle;
      namespace geom
      {
          class AffineTransform;
      }
      namespace image
      {
          class BufferedImage;
          class ColorModel;
          class VolatileImage;
      }
    }
  }
}

class gnu::java::awt::peer::gtk::GdkGraphicsConfiguration : public ::java::awt::GraphicsConfiguration
{

public:
  GdkGraphicsConfiguration(::gnu::java::awt::peer::gtk::GdkScreenGraphicsDevice *);
  virtual ::java::awt::GraphicsDevice * getDevice();
  virtual ::java::awt::image::BufferedImage * createCompatibleImage(jint, jint);
  virtual ::java::awt::image::BufferedImage * createCompatibleImage(jint, jint, jint);
  virtual ::java::awt::image::VolatileImage * createCompatibleVolatileImage(jint, jint);
  virtual ::java::awt::image::VolatileImage * createCompatibleVolatileImage(jint, jint, ::java::awt::ImageCapabilities *);
  virtual ::java::awt::image::ColorModel * getColorModel();
  virtual ::java::awt::image::ColorModel * getColorModel(jint);
  virtual ::java::awt::geom::AffineTransform * getDefaultTransform();
  virtual ::java::awt::geom::AffineTransform * getNormalizingTransform();
  virtual ::java::awt::Rectangle * getBounds();
  virtual ::java::awt::BufferCapabilities * getBufferCapabilities();
  virtual ::java::awt::ImageCapabilities * getImageCapabilities();
  virtual ::java::awt::image::VolatileImage * createCompatibleVolatileImage(jint, jint, jint);
public: // actually package-private
  ::gnu::java::awt::peer::gtk::GdkScreenGraphicsDevice * __attribute__((aligned(__alignof__( ::java::awt::GraphicsConfiguration)))) gdkScreenGraphicsDevice;
  ::java::awt::image::ColorModel * opaqueColorModel;
  ::java::awt::image::ColorModel * bitmaskColorModel;
  ::java::awt::image::ColorModel * translucentColorModel;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_gtk_GdkGraphicsConfiguration__
