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

#ifndef __java_awt_geom_AffineTransform__
#define __java_awt_geom_AffineTransform__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Shape;
      namespace geom
      {
          class AffineTransform;
          class Point2D;
      }
    }
  }
}

class java::awt::geom::AffineTransform : public ::java::lang::Object
{

public:
  AffineTransform();
  AffineTransform(::java::awt::geom::AffineTransform *);
  AffineTransform(jfloat, jfloat, jfloat, jfloat, jfloat, jfloat);
  AffineTransform(JArray< jfloat > *);
  AffineTransform(jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
  AffineTransform(JArray< jdouble > *);
  static ::java::awt::geom::AffineTransform * getTranslateInstance(jdouble, jdouble);
  static ::java::awt::geom::AffineTransform * getRotateInstance(jdouble);
  static ::java::awt::geom::AffineTransform * getRotateInstance(jdouble, jdouble, jdouble);
  static ::java::awt::geom::AffineTransform * getScaleInstance(jdouble, jdouble);
  static ::java::awt::geom::AffineTransform * getShearInstance(jdouble, jdouble);
  virtual jint getType();
  virtual jdouble getDeterminant();
  virtual void getMatrix(JArray< jdouble > *);
  virtual jdouble getScaleX();
  virtual jdouble getScaleY();
  virtual jdouble getShearX();
  virtual jdouble getShearY();
  virtual jdouble getTranslateX();
  virtual jdouble getTranslateY();
  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 setToIdentity();
  virtual void setToTranslation(jdouble, jdouble);
  virtual void setToRotation(jdouble);
  virtual void setToRotation(jdouble, jdouble, jdouble);
  virtual void setToScale(jdouble, jdouble);
  virtual void setToShear(jdouble, jdouble);
  virtual void setTransform(::java::awt::geom::AffineTransform *);
  virtual void setTransform(jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
  virtual void concatenate(::java::awt::geom::AffineTransform *);
  virtual void preConcatenate(::java::awt::geom::AffineTransform *);
  virtual ::java::awt::geom::AffineTransform * createInverse();
  virtual ::java::awt::geom::Point2D * transform(::java::awt::geom::Point2D *, ::java::awt::geom::Point2D *);
  virtual void transform(JArray< ::java::awt::geom::Point2D * > *, jint, JArray< ::java::awt::geom::Point2D * > *, jint, jint);
  virtual void transform(JArray< jfloat > *, jint, JArray< jfloat > *, jint, jint);
  virtual void transform(JArray< jdouble > *, jint, JArray< jdouble > *, jint, jint);
  virtual void transform(JArray< jfloat > *, jint, JArray< jdouble > *, jint, jint);
  virtual void transform(JArray< jdouble > *, jint, JArray< jfloat > *, jint, jint);
  virtual ::java::awt::geom::Point2D * inverseTransform(::java::awt::geom::Point2D *, ::java::awt::geom::Point2D *);
  virtual void inverseTransform(JArray< jdouble > *, jint, JArray< jdouble > *, jint, jint);
  virtual ::java::awt::geom::Point2D * deltaTransform(::java::awt::geom::Point2D *, ::java::awt::geom::Point2D *);
  virtual void deltaTransform(JArray< jdouble > *, jint, JArray< jdouble > *, jint, jint);
  virtual ::java::awt::Shape * createTransformedShape(::java::awt::Shape *);
  virtual ::java::lang::String * toString();
  virtual jboolean isIdentity();
  virtual ::java::lang::Object * clone();
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
private:
  void updateType();
  void readObject(::java::io::ObjectInputStream *);
  static const jlong serialVersionUID = 1330973210523860834LL;
public:
  static const jint TYPE_IDENTITY = 0;
  static const jint TYPE_TRANSLATION = 1;
  static const jint TYPE_UNIFORM_SCALE = 2;
  static const jint TYPE_GENERAL_SCALE = 4;
  static const jint TYPE_MASK_SCALE = 6;
  static const jint TYPE_FLIP = 64;
  static const jint TYPE_QUADRANT_ROTATION = 8;
  static const jint TYPE_GENERAL_ROTATION = 16;
  static const jint TYPE_MASK_ROTATION = 24;
  static const jint TYPE_GENERAL_TRANSFORM = 32;
private:
  jdouble __attribute__((aligned(__alignof__( ::java::lang::Object)))) m00;
  jdouble m10;
  jdouble m01;
  jdouble m11;
  jdouble m02;
  jdouble m12;
  jint type;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_AffineTransform__
