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

#ifndef __java_awt_TexturePaint__
#define __java_awt_TexturePaint__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class PaintContext;
        class Rectangle;
        class RenderingHints;
        class TexturePaint;
      namespace geom
      {
          class AffineTransform;
          class Rectangle2D;
      }
      namespace image
      {
          class BufferedImage;
          class ColorModel;
      }
    }
  }
}

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

public:
  TexturePaint(::java::awt::image::BufferedImage *, ::java::awt::geom::Rectangle2D *);
  virtual ::java::awt::image::BufferedImage * getImage();
  virtual ::java::awt::geom::Rectangle2D * getAnchorRect();
  virtual ::java::awt::PaintContext * createContext(::java::awt::image::ColorModel *, ::java::awt::Rectangle *, ::java::awt::geom::Rectangle2D *, ::java::awt::geom::AffineTransform *, ::java::awt::RenderingHints *);
  virtual jint getTransparency();
private:
  ::java::awt::image::BufferedImage * __attribute__((aligned(__alignof__( ::java::lang::Object)))) texture;
  ::java::awt::geom::Rectangle2D * anchor;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_TexturePaint__
