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

#ifndef __gnu_java_awt_peer_qt_QtComponentGraphics__
#define __gnu_java_awt_peer_qt_QtComponentGraphics__

#pragma interface

#include <gnu/java/awt/peer/qt/QtGraphics.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace qt
          {
              class QtComponentGraphics;
              class QtComponentPeer;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Graphics;
        class GraphicsConfiguration;
    }
  }
}

class gnu::java::awt::peer::qt::QtComponentGraphics : public ::gnu::java::awt::peer::qt::QtGraphics
{

public:
  QtComponentGraphics(jlong, ::gnu::java::awt::peer::qt::QtComponentPeer *, jint, jint, jint, jint);
public: // actually package-private
  QtComponentGraphics(::gnu::java::awt::peer::qt::QtComponentGraphics *);
public:
  virtual ::java::awt::Graphics * create();
  virtual void copyArea(jint, jint, jint, jint, jint, jint);
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration();
private:
  ::gnu::java::awt::peer::qt::QtComponentPeer * __attribute__((aligned(__alignof__( ::gnu::java::awt::peer::qt::QtGraphics)))) peer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtComponentGraphics__
