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

#ifndef __java_awt_Shape__
#define __java_awt_Shape__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Rectangle;
        class Shape;
      namespace geom
      {
          class AffineTransform;
          class PathIterator;
          class Point2D;
          class Rectangle2D;
      }
    }
  }
}

class java::awt::Shape : public ::java::lang::Object
{

public:
  virtual ::java::awt::Rectangle * getBounds() = 0;
  virtual ::java::awt::geom::Rectangle2D * getBounds2D() = 0;
  virtual jboolean contains(jdouble, jdouble) = 0;
  virtual jboolean contains(::java::awt::geom::Point2D *) = 0;
  virtual jboolean intersects(jdouble, jdouble, jdouble, jdouble) = 0;
  virtual jboolean intersects(::java::awt::geom::Rectangle2D *) = 0;
  virtual jboolean contains(jdouble, jdouble, jdouble, jdouble) = 0;
  virtual jboolean contains(::java::awt::geom::Rectangle2D *) = 0;
  virtual ::java::awt::geom::PathIterator * getPathIterator(::java::awt::geom::AffineTransform *) = 0;
  virtual ::java::awt::geom::PathIterator * getPathIterator(::java::awt::geom::AffineTransform *, jdouble) = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_awt_Shape__
