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

#ifndef __gnu_java_awt_java2d_RasterGraphics__
#define __gnu_java_awt_java2d_RasterGraphics__

#pragma interface

#include <gnu/java/awt/java2d/AbstractGraphics2D.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace java2d
        {
            class RasterGraphics;
            class ScanlineCoverage;
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class GraphicsConfiguration;
        class Rectangle;
      namespace image
      {
          class ColorModel;
          class WritableRaster;
      }
    }
  }
}

class gnu::java::awt::java2d::RasterGraphics : public ::gnu::java::awt::java2d::AbstractGraphics2D
{

public:
  RasterGraphics(::java::awt::image::WritableRaster *, ::java::awt::image::ColorModel *);
  virtual void renderScanline(jint, ::gnu::java::awt::java2d::ScanlineCoverage *);
public: // actually protected
  virtual ::java::awt::image::ColorModel * getColorModel();
  virtual ::java::awt::image::WritableRaster * getDestinationRaster();
public:
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration();
public: // actually protected
  virtual ::java::awt::Rectangle * getDeviceBounds();
private:
  ::java::awt::image::WritableRaster * __attribute__((aligned(__alignof__( ::gnu::java::awt::java2d::AbstractGraphics2D)))) raster;
  ::java::awt::image::ColorModel * colorModel;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_java2d_RasterGraphics__
