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

#ifndef __java_awt_geom_Area__
#define __java_awt_geom_Area__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Rectangle;
        class Shape;
      namespace geom
      {
          class AffineTransform;
          class Area;
          class Area$CubicSegment;
          class Area$Intersection;
          class Area$LineSegment;
          class Area$QuadSegment;
          class Area$Segment;
          class CubicCurve2D;
          class PathIterator;
          class Point2D;
          class Rectangle2D;
      }
    }
  }
}

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

public:
  Area();
  Area(::java::awt::Shape *);
  virtual void add(::java::awt::geom::Area *);
  virtual void subtract(::java::awt::geom::Area *);
  virtual void intersect(::java::awt::geom::Area *);
  virtual void exclusiveOr(::java::awt::geom::Area *);
  virtual void reset();
  virtual jboolean isEmpty();
  virtual jboolean isPolygonal();
  virtual jboolean isRectangular();
  virtual jboolean isSingular();
  virtual ::java::awt::geom::Rectangle2D * getBounds2D();
  virtual ::java::awt::Rectangle * getBounds();
  virtual ::java::lang::Object * clone();
  virtual jboolean equals(::java::awt::geom::Area *);
  virtual void transform(::java::awt::geom::AffineTransform *);
  virtual ::java::awt::geom::Area * createTransformedArea(::java::awt::geom::AffineTransform *);
  virtual jboolean contains(jdouble, jdouble);
  virtual jboolean contains(::java::awt::geom::Point2D *);
  virtual jboolean contains(jdouble, jdouble, jdouble, jdouble);
  virtual jboolean contains(::java::awt::geom::Rectangle2D *);
  virtual jboolean intersects(jdouble, jdouble, jdouble, jdouble);
  virtual jboolean intersects(::java::awt::geom::Rectangle2D *);
  virtual ::java::awt::geom::PathIterator * getPathIterator(::java::awt::geom::AffineTransform *);
  virtual ::java::awt::geom::PathIterator * getPathIterator(::java::awt::geom::AffineTransform *, jdouble);
private:
  ::java::util::Vector * weilerAtherton(::java::util::Vector *);
  jint getRecursionDepth(::java::awt::geom::Area$CubicSegment *);
  void recursiveSubdivide(::java::awt::geom::CubicCurve2D *, ::java::awt::geom::CubicCurve2D *, jint, jint, jdouble, jdouble, jdouble, jdouble);
public: // actually package-private
  virtual JArray< ::java::awt::geom::Area$Intersection * > * cubicCubicIntersect(::java::awt::geom::Area$CubicSegment *, ::java::awt::geom::Area$CubicSegment *);
  virtual JArray< ::java::awt::geom::Area$Intersection * > * lineQuadIntersect(::java::awt::geom::Area$LineSegment *, ::java::awt::geom::Area$QuadSegment *);
  virtual JArray< ::java::awt::geom::Area$Intersection * > * lineCubicIntersect(::java::awt::geom::Area$LineSegment *, ::java::awt::geom::Area$CubicSegment *);
  virtual ::java::awt::geom::Area$Intersection * linesIntersect(::java::awt::geom::Area$LineSegment *, ::java::awt::geom::Area$LineSegment *);
  virtual jboolean pointEquals(::java::awt::geom::Point2D *, ::java::awt::geom::Point2D *);
private:
  ::java::util::Vector * makeSegment(::java::awt::Shape *);
  jint createNodes(::java::awt::geom::Area$Segment *, ::java::awt::geom::Area$Segment *);
  jint createNodesSelf(::java::awt::geom::Area$Segment *);
  void deleteRedundantPaths(::java::util::Vector *);
  void setDirection(::java::util::Vector *, jboolean);
  static jdouble EPSILON;
  static jdouble RS_EPSILON;
  static jdouble PE_EPSILON;
public: // actually package-private
  ::java::util::Vector * __attribute__((aligned(__alignof__( ::java::lang::Object)))) solids;
  ::java::util::Vector * holes;
private:
  ::java::util::Vector * cc_intersections;
  jint windingRule;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_Area__
