// 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;
      namespace geom
      {
        class Area$Segment;
        class Area$QuadSegment;
        class Area$LineSegment;
        class Area$Intersection;
        class CubicCurve2D;
        class Area$CubicSegment;
        class PathIterator;
        class Point2D;
        class AffineTransform;
        class Rectangle2D;
        class Area;
      }
      class Shape;
    }
  }
}

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 const jdouble EPSILON;
  static const jdouble RS_EPSILON;
  static const 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;

  friend class java_awt_geom_Area$CubicSegment;
  friend class java_awt_geom_Area$QuadSegment;
  friend class java_awt_geom_Area$LineSegment;
  friend class java_awt_geom_Area$Segment;
  friend class java_awt_geom_Area$Intersection;
  friend class java_awt_geom_Area$AreaIterator;
public:

  static ::java::lang::Class class$;
};

#endif /* __java_awt_geom_Area__ */
