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

#ifndef __java_awt_Component$FlipBufferStrategy__
#define __java_awt_Component$FlipBufferStrategy__

#pragma interface

#include <java/awt/image/BufferStrategy.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class BufferCapabilities;
        class BufferCapabilities$FlipContents;
        class Component;
        class Component$FlipBufferStrategy;
        class Graphics;
        class Image;
      namespace image
      {
          class VolatileImage;
      }
    }
  }
}

class java::awt::Component$FlipBufferStrategy : public ::java::awt::image::BufferStrategy
{

public: // actually protected
  Component$FlipBufferStrategy(::java::awt::Component *, jint, ::java::awt::BufferCapabilities *);
  virtual void createBuffers(jint, ::java::awt::BufferCapabilities *);
  virtual ::java::awt::Image * getBackBuffer();
  virtual void flip(::java::awt::BufferCapabilities$FlipContents *);
  virtual void destroyBuffers();
public:
  virtual ::java::awt::BufferCapabilities * getCapabilities();
  virtual ::java::awt::Graphics * getDrawGraphics();
public: // actually protected
  virtual void revalidate();
public:
  virtual jboolean contentsLost();
  virtual jboolean contentsRestored();
  virtual void show();
public: // actually protected
  jint __attribute__((aligned(__alignof__( ::java::awt::image::BufferStrategy)))) numBuffers;
  ::java::awt::BufferCapabilities * caps;
  ::java::awt::Image * drawBuffer;
  ::java::awt::image::VolatileImage * drawVBuffer;
  jboolean validatedContents;
private:
  jint width;
  jint height;
public: // actually package-private
  ::java::awt::Component * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_Component$FlipBufferStrategy__
