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

#ifndef __gnu_gcj_xlib_Drawable__
#define __gnu_gcj_xlib_Drawable__

#pragma interface

#include <gnu/gcj/xlib/XID.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
      namespace xlib
      {
          class Display;
          class Drawable;
          class GC;
          class XImage;
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Rectangle;
    }
  }
}

class gnu::gcj::xlib::Drawable : public ::gnu::gcj::xlib::XID
{

public:
  Drawable(::gnu::gcj::xlib::Display *, jint);
  virtual ::java::awt::Rectangle * copyIntoXImage(::gnu::gcj::xlib::XImage *, ::java::awt::Rectangle *, jint, jint);
private:
  jboolean copyIntoXImageImpl(::gnu::gcj::xlib::XImage *, jint, jint, jint, jint, jint, jint);
public:
  virtual ::java::awt::Rectangle * getBounds(::java::awt::Rectangle *);
  virtual jint getDepth();
public: // actually protected
  virtual void finalize();
public: // actually package-private
  virtual void putGCInCache(::gnu::gcj::xlib::GC *);
  virtual ::gnu::gcj::xlib::GC * getGCFromCache();
private:
  JArray< ::gnu::gcj::xlib::GC * > * __attribute__((aligned(__alignof__( ::gnu::gcj::xlib::XID)))) gcCache;
  jint gcCachedCount;
  static ::java::lang::String * MSG_XGETSUBIMAGE_FAILED;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_gcj_xlib_Drawable__
