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

#ifndef __gnu_awt_j2d_Graphics2DImpl__
#define __gnu_awt_j2d_Graphics2DImpl__

#pragma interface

#include <java/awt/Graphics2D.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace awt
    {
      namespace j2d
      {
          class AbstractGraphicsState;
          class Graphics2DImpl;
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Color;
        class Composite;
        class Font;
        class FontMetrics;
        class Graphics;
        class GraphicsConfiguration;
        class Image;
        class Paint;
        class Rectangle;
        class RenderingHints;
        class RenderingHints$Key;
        class Shape;
        class Stroke;
      namespace font
      {
          class FontRenderContext;
          class GlyphVector;
      }
      namespace geom
      {
          class AffineTransform;
      }
      namespace image
      {
          class BufferedImage;
          class BufferedImageOp;
          class ImageObserver;
          class RenderedImage;
        namespace renderable
        {
            class RenderableImage;
        }
      }
    }
    namespace text
    {
        class AttributedCharacterIterator;
    }
  }
}

class gnu::awt::j2d::Graphics2DImpl : public ::java::awt::Graphics2D
{

public:
  Graphics2DImpl(::java::awt::GraphicsConfiguration *);
  virtual void setState(::gnu::awt::j2d::AbstractGraphicsState *);
  virtual ::java::lang::Object * clone();
  virtual ::java::awt::Graphics * create();
  virtual ::java::awt::Color * getColor();
  virtual void setColor(::java::awt::Color *);
  virtual void setPaintMode();
  virtual void setXORMode(::java::awt::Color *);
  virtual ::java::awt::Font * getFont();
  virtual void setFont(::java::awt::Font *);
  virtual ::java::awt::FontMetrics * getFontMetrics(::java::awt::Font *);
  virtual ::java::awt::Rectangle * getClipBounds();
  virtual void clipRect(jint, jint, jint, jint);
  virtual void setClip(jint, jint, jint, jint);
  virtual ::java::awt::Shape * getClip();
  virtual void setClip(::java::awt::Shape *);
  virtual void copyArea(jint, jint, jint, jint, jint, jint);
  virtual void drawLine(jint, jint, jint, jint);
  virtual void fillRect(jint, jint, jint, jint);
  virtual void clearRect(jint, jint, jint, jint);
  virtual void drawRoundRect(jint, jint, jint, jint, jint, jint);
  virtual void fillRoundRect(jint, jint, jint, jint, jint, jint);
  virtual void drawOval(jint, jint, jint, jint);
  virtual void fillOval(jint, jint, jint, jint);
  virtual void drawArc(jint, jint, jint, jint, jint, jint);
  virtual void fillArc(jint, jint, jint, jint, jint, jint);
  virtual void drawPolyline(JArray< jint > *, JArray< jint > *, jint);
  virtual void drawPolygon(JArray< jint > *, JArray< jint > *, jint);
  virtual void fillPolygon(JArray< jint > *, JArray< jint > *, jint);
  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 *);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, jint, jint, jint, jint, ::java::awt::image::ImageObserver *);
  virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, jint, jint, jint, jint, ::java::awt::Color *, ::java::awt::image::ImageObserver *);
  virtual void dispose();
  virtual void draw(::java::awt::Shape *);
  virtual jboolean drawImage(::java::awt::Image *, ::java::awt::geom::AffineTransform *, ::java::awt::image::ImageObserver *);
  virtual void drawString(::java::lang::String *, jint, jint);
  virtual void drawString(::java::lang::String *, jfloat, jfloat);
  virtual void fill(::java::awt::Shape *);
  virtual jboolean hit(::java::awt::Rectangle *, ::java::awt::Shape *, jboolean);
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration();
  virtual void setPaint(::java::awt::Paint *);
  virtual void setRenderingHint(::java::awt::RenderingHints$Key *, ::java::lang::Object *);
  virtual ::java::lang::Object * getRenderingHint(::java::awt::RenderingHints$Key *);
  virtual ::java::awt::RenderingHints * getRenderingHints();
  virtual void translate(jint, jint);
  virtual void translate(jdouble, jdouble);
  virtual void rotate(jdouble);
  virtual void rotate(jdouble, jdouble, jdouble);
  virtual void scale(jdouble, jdouble);
  virtual void shear(jdouble, jdouble);
  virtual void transform(::java::awt::geom::AffineTransform *);
  virtual void setTransform(::java::awt::geom::AffineTransform *);
  virtual ::java::awt::geom::AffineTransform * getTransform();
  virtual ::java::awt::Paint * getPaint();
  virtual void setBackground(::java::awt::Color *);
  virtual ::java::awt::Color * getBackground();
  virtual void clip(::java::awt::Shape *);
  virtual void drawImage(::java::awt::image::BufferedImage *, ::java::awt::image::BufferedImageOp *, jint, jint);
  virtual void drawRenderedImage(::java::awt::image::RenderedImage *, ::java::awt::geom::AffineTransform *);
  virtual void drawRenderableImage(::java::awt::image::renderable::RenderableImage *, ::java::awt::geom::AffineTransform *);
  virtual void drawString(::java::text::AttributedCharacterIterator *, jint, jint);
  virtual void drawString(::java::text::AttributedCharacterIterator *, jfloat, jfloat);
  virtual void setComposite(::java::awt::Composite *);
  virtual void setStroke(::java::awt::Stroke *);
  virtual void setRenderingHints(::java::util::Map *);
  virtual void addRenderingHints(::java::util::Map *);
  virtual ::java::awt::Composite * getComposite();
  virtual ::java::awt::Stroke * getStroke();
  virtual ::java::awt::font::FontRenderContext * getFontRenderContext();
  virtual void drawGlyphVector(::java::awt::font::GlyphVector *, jfloat, jfloat);
public: // actually package-private
  ::java::awt::GraphicsConfiguration * __attribute__((aligned(__alignof__( ::java::awt::Graphics2D)))) config;
  ::gnu::awt::j2d::AbstractGraphicsState * state;
  ::java::awt::Color * fg;
  ::java::awt::Color * bg;
  ::java::awt::Font * font;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_awt_j2d_Graphics2DImpl__
