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

#ifndef __gnu_java_awt_GradientPaintContext__
#define __gnu_java_awt_GradientPaintContext__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
          class GradientPaintContext;
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Color;
      namespace image
      {
          class ColorModel;
          class Raster;
      }
    }
  }
}

class gnu::java::awt::GradientPaintContext : public ::java::lang::Object
{

public:
  GradientPaintContext(jfloat, jfloat, ::java::awt::Color *, jfloat, jfloat, ::java::awt::Color *, jboolean);
  virtual ::java::awt::image::ColorModel * getColorModel();
  virtual ::java::awt::image::Raster * getRaster(jint, jint, jint, jint);
  virtual void dispose();
private:
  jfloat __attribute__((aligned(__alignof__( ::java::lang::Object)))) x1;
  jfloat y1;
  ::java::awt::Color * c1;
  jfloat x2;
  jfloat y2;
  ::java::awt::Color * c2;
  jboolean cyclic;
  jdouble length;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_GradientPaintContext__
