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

#ifndef __java_awt_Graphics__
#define __java_awt_Graphics__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Color;
        class Font;
        class FontMetrics;
        class Graphics;
        class Image;
        class Polygon;
        class Rectangle;
        class Shape;
      namespace image
      {
          class ImageObserver;
      }
    }
    namespace text
    {
        class AttributedCharacterIterator;
    }
  }
}

class java::awt::Graphics : public ::java::lang::Object
{

public: // actually protected
  Graphics();
public:
  virtual ::java::awt::Graphics * create() = 0;
  virtual ::java::awt::Graphics * create(jint, jint, jint, jint);
  virtual void translate(jint, jint) = 0;
  virtual ::java::awt::Color * getColor() = 0;
  virtual void setColor(::java::awt::Color *) = 0;
  virtual void setPaintMode() = 0;
  virtual void setXORMode(::java::awt::Color *) = 0;
  virtual ::java::awt::Font * getFont() = 0;
  virtual void setFont(::java::awt::Font *) = 0;
  virtual ::java::awt::FontMetrics * getFontMetrics();
  virtual ::java::awt::FontMetrics * getFontMetrics(::java::awt::Font *) = 0;
  virtual ::java::awt::Rectangle * getClipBounds() = 0;
  virtual ::java::awt::Rectangle * getClipRect();
  virtual void clipRect(jint, jint, jint, jint) = 0;
  virtual void setClip(jint, jint, jint, jint) = 0;
  virtual ::java::awt::Shape * getClip() = 0;
  virtual void setClip(::java::awt::Shape *) = 0;
  virtual void copyArea(jint, jint, jint, jint, jint, jint) = 0;
  virtual void drawLine(jint, jint, jint, jint) = 0;
  virtual void fillRect(jint, jint, jint, jint) = 0;
  virtual void drawRect(jint, jint, jint, jint);
  virtual void clearRect(jint, jint, jint, jint) = 0;
  virtual void drawRoundRect(jint, jint, jint, jint, jint, jint) = 0;
  virtual void fillRoundRect(jint, jint, jint, jint, jint, jint) = 0;
  virtual void draw3DRect(jint, jint, jint, jint, jboolean);
  virtual void fill3DRect(jint, jint, jint, jint, jboolean);
  virtual void drawOval(jint, jint, jint, jint) = 0;
  virtual void fillOval(jint, jint, jint, jint) = 0;
  virtual void drawArc(jint, jint, jint, jint, jint, jint) = 0;
  virtual void fillArc(jint, jint, jint, jint, jint, jint) = 0;
  virtual void drawPolyline(JArray< jint > *, JArray< jint > *, jint) = 0;
  virtual void drawPolygon(JArray< jint > *, JArray< jint > *, jint) = 0;
  virtual void drawPolygon(::java::awt::Polygon *);
  virtual void fillPolygon(JArray< jint > *, JArray< jint > *, jint) = 0;
  virtual void fillPolygon(::java::awt::Polygon *);
  virtual void drawString(::java::lang::String *, jint, jint) = 0;
  virtual void drawString(::java::text::AttributedCharacterIterator *, jint, jint) = 0;
  virtual void drawChars(JArray< jchar > *, jint, jint, jint, jint);
  virtual void drawBytes(JArray< jbyte > *, jint, jint, jint, jint);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, ::java::awt::image::ImageObserver *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, ::java::awt::image::ImageObserver *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, jint, jint, jint, jint, ::java::awt::image::ImageObserver *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, jint, jint, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *) = 0;
  virtual void dispose() = 0;
  virtual void finalize();
  virtual ::java::lang::String * toString();
  virtual jboolean hitClip(jint, jint, jint, jint);
  virtual ::java::awt::Rectangle * getClipBounds(::java::awt::Rectangle *);
  static ::java::lang::Class class$;
};

#endif // __java_awt_Graphics__
