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

#ifndef __java_awt_geom_Rectangle2D$Float__
#define __java_awt_geom_Rectangle2D$Float__

#pragma interface

#include <java/awt/geom/Rectangle2D.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace geom
      {
          class Rectangle2D;
          class Rectangle2D$Float;
      }
    }
  }
}

class java::awt::geom::Rectangle2D$Float : public ::java::awt::geom::Rectangle2D
{

public:
  Rectangle2D$Float();
  Rectangle2D$Float(jfloat, jfloat, jfloat, jfloat);
public: // actually package-private
  Rectangle2D$Float(jdouble, jdouble, jdouble, jdouble);
public:
  virtual jdouble getX();
  virtual jdouble getY();
  virtual jdouble getWidth();
  virtual jdouble getHeight();
  virtual jboolean isEmpty();
  virtual void setRect(jfloat, jfloat, jfloat, jfloat);
  virtual void setRect(jdouble, jdouble, jdouble, jdouble);
  virtual void setRect(::java::awt::geom::Rectangle2D *);
  virtual jint outcode(jdouble, jdouble);
  virtual ::java::awt::geom::Rectangle2D * getBounds2D();
  virtual ::java::awt::geom::Rectangle2D * createIntersection(::java::awt::geom::Rectangle2D *);
  virtual ::java::awt::geom::Rectangle2D * createUnion(::java::awt::geom::Rectangle2D *);
  virtual ::java::lang::String * toString();
  jfloat __attribute__((aligned(__alignof__( ::java::awt::geom::Rectangle2D)))) x;
  jfloat y;
  jfloat width;
  jfloat height;
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_Rectangle2D$Float__
