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

#ifndef __gnu_java_awt_ClasspathToolkit__
#define __gnu_java_awt_ClasspathToolkit__

#pragma interface

#include <java/awt/Toolkit.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
          class ClasspathToolkit;
          class EmbeddedWindow;
        namespace peer
        {
            class ClasspathFontPeer;
            class EmbeddedWindowPeer;
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Desktop;
        class Font;
        class GraphicsDevice;
        class GraphicsEnvironment;
      namespace peer
      {
          class DesktopPeer;
          class RobotPeer;
      }
    }
  }
  namespace javax
  {
    namespace imageio
    {
      namespace spi
      {
          class IIORegistry;
      }
    }
  }
}

class gnu::java::awt::ClasspathToolkit : public ::java::awt::Toolkit
{

public:
  ClasspathToolkit();
  virtual ::java::awt::GraphicsEnvironment * getLocalGraphicsEnvironment() = 0;
  virtual ::gnu::java::awt::peer::ClasspathFontPeer * getClasspathFontPeer(::java::lang::String *, ::java::util::Map *) = 0;
  virtual ::java::awt::Font * getFont(::java::lang::String *, ::java::util::Map *);
  virtual ::java::awt::Font * createFont(jint, ::java::io::InputStream *) = 0;
  virtual ::java::awt::peer::RobotPeer * createRobot(::java::awt::GraphicsDevice *) = 0;
  virtual ::gnu::java::awt::peer::EmbeddedWindowPeer * createEmbeddedWindow(::gnu::java::awt::EmbeddedWindow *) = 0;
  virtual void registerImageIOSpis(::javax::imageio::spi::IIORegistry *);
  virtual jint getMouseNumberOfButtons();
public: // actually protected
  virtual ::java::awt::peer::DesktopPeer * createDesktopPeer(::java::awt::Desktop *);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_ClasspathToolkit__
