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

#ifndef __java_awt_geom_RoundRectangle2D$1__
#define __java_awt_geom_RoundRectangle2D$1__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace geom
      {
          class AffineTransform;
          class Arc2D$Double;
          class PathIterator;
          class RoundRectangle2D;
          class RoundRectangle2D$1;
      }
    }
  }
}

class java::awt::geom::RoundRectangle2D$1 : public ::java::lang::Object
{

public: // actually package-private
  RoundRectangle2D$1(::java::awt::geom::RoundRectangle2D *, ::java::awt::geom::AffineTransform *);
public:
  virtual jint currentSegment(JArray< jdouble > *);
  virtual jint currentSegment(JArray< jfloat > *);
  virtual jint getWindingRule();
  virtual jboolean isDone();
  virtual void next();
public: // actually package-private
  jdouble __attribute__((aligned(__alignof__( ::java::lang::Object)))) x;
  jdouble y;
  jdouble w;
  jdouble h;
  jdouble arcW;
  jdouble arcH;
  ::java::awt::geom::Arc2D$Double * arc;
  ::java::awt::geom::PathIterator * corner;
  jint step;
  ::java::awt::geom::RoundRectangle2D * this$0;
private:
  ::java::awt::geom::AffineTransform * val$at;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_geom_RoundRectangle2D$1__
