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

#ifndef __gnu_java_awt_peer_gtk_VolatileImageGraphics__
#define __gnu_java_awt_peer_gtk_VolatileImageGraphics__

#pragma interface

#include <gnu/java/awt/peer/gtk/ComponentGraphics.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace gtk
          {
              class GtkVolatileImage;
              class VolatileImageGraphics;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Color;
        class Graphics;
        class GraphicsConfiguration;
        class Image;
        class Shape;
      namespace font
      {
          class GlyphVector;
      }
      namespace geom
      {
          class AffineTransform;
          class Rectangle2D;
      }
      namespace image
      {
          class BufferedImage;
          class ColorModel;
          class ImageObserver;
      }
    }
  }
}

class gnu::java::awt::peer::gtk::VolatileImageGraphics : public ::gnu::java::awt::peer::gtk::ComponentGraphics
{

public:
  VolatileImageGraphics(::gnu::java::awt::peer::gtk::GtkVolatileImage *);
private:
  VolatileImageGraphics(::gnu::java::awt::peer::gtk::VolatileImageGraphics *);
public:
  virtual void copyAreaImpl(jint, jint, jint, jint, jint, jint);
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration();
  virtual ::java::awt::Graphics * create();
  virtual void draw(::java::awt::Shape *);
  virtual void fill(::java::awt::Shape *);
  virtual void drawGlyphVector(::java::awt::font::GlyphVector *, jfloat, jfloat);
public: // actually protected
  virtual jboolean drawImage(::java::awt::Image *, ::java::awt::geom::AffineTransform *, ::java::awt::Color *, ::java::awt::image::ImageObserver *);
public:
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, ::java::awt::image::ImageObserver *);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, ::java::awt::image::ImageObserver *);
public: // actually protected
  virtual ::java::awt::geom::Rectangle2D * getRealBounds();
private:
  jboolean drawComposite(::java::awt::geom::Rectangle2D *, ::java::awt::image::ImageObserver *);
  void createBuffer();
public: // actually protected
  virtual ::java::awt::image::ColorModel * getNativeCM();
private:
  ::gnu::java::awt::peer::gtk::GtkVolatileImage * __attribute__((aligned(__alignof__( ::gnu::java::awt::peer::gtk::ComponentGraphics)))) owner;
  ::java::awt::image::BufferedImage * buffer;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_gtk_VolatileImageGraphics__
