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

#ifndef __java_awt_Graphics2D__
#define __java_awt_Graphics2D__

#pragma interface

#include <java/awt/Graphics.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Color;
        class Composite;
        class Graphics2D;
        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 java::awt::Graphics2D : public ::java::awt::Graphics
{

public: // actually protected
  Graphics2D();
public:
  virtual void draw3DRect(jint, jint, jint, jint, jboolean);
  virtual void fill3DRect(jint, jint, jint, jint, jboolean);
  virtual void draw(::java::awt::Shape *) = 0;
  virtual jboolean drawImage(::java::awt::Image *, ::java::awt::geom::AffineTransform *, ::java::awt::image::ImageObserver *) = 0;
  virtual void drawImage(::java::awt::image::BufferedImage *, ::java::awt::image::BufferedImageOp *, jint, jint) = 0;
  virtual void drawRenderedImage(::java::awt::image::RenderedImage *, ::java::awt::geom::AffineTransform *) = 0;
  virtual void drawRenderableImage(::java::awt::image::renderable::RenderableImage *, ::java::awt::geom::AffineTransform *) = 0;
  virtual void drawString(::java::lang::String *, jint, jint) = 0;
  virtual void drawString(::java::lang::String *, jfloat, jfloat) = 0;
  virtual void drawString(::java::text::AttributedCharacterIterator *, jint, jint) = 0;
  virtual void drawString(::java::text::AttributedCharacterIterator *, jfloat, jfloat) = 0;
  virtual void fill(::java::awt::Shape *) = 0;
  virtual jboolean hit(::java::awt::Rectangle *, ::java::awt::Shape *, jboolean) = 0;
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration() = 0;
  virtual void setComposite(::java::awt::Composite *) = 0;
  virtual void setPaint(::java::awt::Paint *) = 0;
  virtual void setStroke(::java::awt::Stroke *) = 0;
  virtual void setRenderingHint(::java::awt::RenderingHints$Key *, ::java::lang::Object *) = 0;
  virtual ::java::lang::Object * getRenderingHint(::java::awt::RenderingHints$Key *) = 0;
  virtual void setRenderingHints(::java::util::Map *) = 0;
  virtual void addRenderingHints(::java::util::Map *) = 0;
  virtual ::java::awt::RenderingHints * getRenderingHints() = 0;
  virtual void translate(jint, jint) = 0;
  virtual void translate(jdouble, jdouble) = 0;
  virtual void rotate(jdouble) = 0;
  virtual void rotate(jdouble, jdouble, jdouble) = 0;
  virtual void scale(jdouble, jdouble) = 0;
  virtual void shear(jdouble, jdouble) = 0;
  virtual void transform(::java::awt::geom::AffineTransform *) = 0;
  virtual void setTransform(::java::awt::geom::AffineTransform *) = 0;
  virtual ::java::awt::geom::AffineTransform * getTransform() = 0;
  virtual ::java::awt::Paint * getPaint() = 0;
  virtual ::java::awt::Composite * getComposite() = 0;
  virtual void setBackground(::java::awt::Color *) = 0;
  virtual ::java::awt::Color * getBackground() = 0;
  virtual ::java::awt::Stroke * getStroke() = 0;
  virtual void clip(::java::awt::Shape *) = 0;
  virtual ::java::awt::font::FontRenderContext * getFontRenderContext() = 0;
  virtual void drawGlyphVector(::java::awt::font::GlyphVector *, jfloat, jfloat) = 0;
  static ::java::lang::Class class$;
};

#endif // __java_awt_Graphics2D__
