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

#ifndef __gnu_gcj_xlib_Screen__
#define __gnu_gcj_xlib_Screen__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
        class RawData;
      namespace xlib
      {
          class Colormap;
          class Display;
          class Screen;
          class Visual;
          class Window;
      }
    }
  }
}

class gnu::gcj::xlib::Screen : public ::java::lang::Object
{

public: // actually package-private
  Screen(::gnu::gcj::xlib::Display *, ::gnu::gcj::RawData *);
public:
  Screen(::gnu::gcj::xlib::Display *);
  Screen(::gnu::gcj::xlib::Display *, jint);
  ::gnu::gcj::xlib::Display * getDisplay();
  ::gnu::gcj::xlib::Window * getRootWindow();
  ::gnu::gcj::xlib::Visual * getRootVisual();
private:
  ::gnu::gcj::RawData * getRootVisualStructure();
public:
  jint getRootDepth();
  jint getRootWindowXID();
  jint getDefaultColormapXID();
public: // actually package-private
  void initStructure();
public:
  ::gnu::gcj::xlib::Colormap * getDefaultColormap();
  jint getScreenNumber();
  jint findScreenNumber();
public: // actually package-private
  static const jint UNKNOWN = -1;
  ::gnu::gcj::xlib::Display * __attribute__((aligned(__alignof__( ::java::lang::Object)))) display;
  jint screenNumber;
  ::gnu::gcj::RawData * structure;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_gcj_xlib_Screen__
