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

#ifndef __javax_swing_plaf_basic_BasicToolBarUI$DragWindow__
#define __javax_swing_plaf_basic_BasicToolBarUI$DragWindow__

#pragma interface

#include <java/awt/Window.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Color;
        class Graphics;
        class Insets;
        class Point;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace basic
        {
            class BasicToolBarUI;
            class BasicToolBarUI$DragWindow;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicToolBarUI$DragWindow : public ::java::awt::Window
{

public: // actually package-private
  BasicToolBarUI$DragWindow(::javax::swing::plaf::basic::BasicToolBarUI *);
public:
  virtual ::java::awt::Color * getBorderColor();
  virtual ::java::awt::Insets * getInsets();
  virtual ::java::awt::Point * getOffset();
  virtual void paint(::java::awt::Graphics *);
  virtual void setBorderColor(::java::awt::Color *);
  virtual void setOffset(::java::awt::Point *);
  virtual void setOrientation(jint);
private:
  ::java::awt::Color * __attribute__((aligned(__alignof__( ::java::awt::Window)))) borderColor;
  ::java::awt::Point * offset;
public: // actually package-private
  ::javax::swing::plaf::basic::BasicToolBarUI * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicToolBarUI$DragWindow__
