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

#ifndef __gnu_java_awt_peer_qt_QtScreenDeviceConfiguration__
#define __gnu_java_awt_peer_qt_QtScreenDeviceConfiguration__

#pragma interface

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

class gnu::java::awt::peer::qt::QtScreenDeviceConfiguration : public ::java::awt::GraphicsConfiguration
{

public:
  QtScreenDeviceConfiguration(::gnu::java::awt::peer::qt::QtScreenDevice *);
  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::Rectangle * getBounds();
  virtual ::java::awt::image::ColorModel * getColorModel();
  virtual ::java::awt::image::ColorModel * getColorModel(jint);
  virtual ::java::awt::geom::AffineTransform * getDefaultTransform();
  virtual ::java::awt::GraphicsDevice * getDevice();
  virtual ::java::awt::geom::AffineTransform * getNormalizingTransform();
  virtual ::java::awt::image::VolatileImage * createCompatibleVolatileImage(jint, jint, jint);
private:
  ::gnu::java::awt::peer::qt::QtScreenDevice * __attribute__((aligned(__alignof__( ::java::awt::GraphicsConfiguration)))) owner;
  ::java::awt::Rectangle * bounds;
  jdouble dpiX;
  jdouble dpiY;
  jint depth;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtScreenDeviceConfiguration__
