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

#ifndef __java_awt_geom_Rectangle2D__
#define __java_awt_geom_Rectangle2D__

#pragma interface

#include <java/awt/geom/RectangularShape.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace geom
      {
          class AffineTransform;
          class Line2D;
          class PathIterator;
          class Point2D;
          class Rectangle2D;
      }
    }
  }
}

class java::awt::geom::Rectangle2D : public ::java::awt::geom::RectangularShape
{

public: // actually protected
  Rectangle2D();
public:
  virtual void setRect(jdouble, jdouble, jdouble, jdouble) = 0;
  virtual void setRect(::java::awt::geom::Rectangle2D *);
  virtual jboolean intersectsLine(jdouble, jdouble, jdouble, jdouble);
  virtual jboolean intersectsLine(::java::awt::geom::Line2D *);
  virtual jint outcode(jdouble, jdouble) = 0;
  virtual jint outcode(::java::awt::geom::Point2D *);
  virtual void setFrame(jdouble, jdouble, jdouble, jdouble);
  virtual ::java::awt::geom::Rectangle2D * getBounds2D();
  virtual jboolean contains(jdouble, jdouble);
  virtual jboolean intersects(jdouble, jdouble, jdouble, jdouble);
  virtual jboolean contains(jdouble, jdouble, jdouble, jdouble);
  virtual ::java::awt::geom::Rectangle2D * createIntersection(::java::awt::geom::Rectangle2D *) = 0;
  static void intersect(::java::awt::geom::Rectangle2D *, ::java::awt::geom::Rectangle2D *, ::java::awt::geom::Rectangle2D *);
  virtual ::java::awt::geom::Rectangle2D * createUnion(::java::awt::geom::Rectangle2D *) = 0;
  static void union$(::java::awt::geom::Rectangle2D *, ::java::awt::geom::Rectangle2D *, ::java::awt::geom::Rectangle2D *);
  virtual void add(jdouble, jdouble);
  virtual void add(::java::awt::geom::Point2D *);
  virtual void add(::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);
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
  static const jint OUT_LEFT = 1;
  static const jint OUT_TOP = 2;
  static const jint OUT_RIGHT = 4;
  static const jint OUT_BOTTOM = 8;
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_Rectangle2D__
