
// 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;
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class GraphicsConfiguration;
      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 *);
public: // actually protected
  virtual ::java::awt::image::ColorModel * getColorModel();
  virtual ::java::awt::image::WritableRaster * getDestinationRaster();
public:
  virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration();
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__
