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

#ifndef __java_awt_Canvas__
#define __java_awt_Canvas__

#pragma interface

#include <java/awt/Component.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class BufferCapabilities;
        class Canvas;
        class Graphics;
        class GraphicsConfiguration;
      namespace image
      {
          class BufferStrategy;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleContext;
    }
  }
}

class java::awt::Canvas : public ::java::awt::Component
{

public:
  Canvas();
  Canvas(::java::awt::GraphicsConfiguration *);
  virtual void addNotify();
  virtual void paint(::java::awt::Graphics *);
  virtual ::javax::accessibility::AccessibleContext * getAccessibleContext();
  virtual void createBufferStrategy(jint);
  virtual void createBufferStrategy(jint, ::java::awt::BufferCapabilities *);
  virtual ::java::awt::image::BufferStrategy * getBufferStrategy();
  virtual void update(::java::awt::Graphics *);
public: // actually package-private
  virtual ::java::lang::String * generateName();
private:
  static jlong getUniqueLong();
  static const jlong serialVersionUID = -2284879212465893870LL;
  static jlong next_canvas_number;
public: // actually package-private
  ::java::awt::image::BufferStrategy * __attribute__((aligned(__alignof__( ::java::awt::Component)))) bufferStrategy;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_Canvas__
