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

#ifndef __javax_swing_plaf_metal_MetalBorders$ButtonBorder__
#define __javax_swing_plaf_metal_MetalBorders$ButtonBorder__

#pragma interface

#include <javax/swing/border/AbstractBorder.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Graphics;
        class Insets;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace metal
        {
            class MetalBorders$ButtonBorder;
        }
      }
    }
  }
}

class javax::swing::plaf::metal::MetalBorders$ButtonBorder : public ::javax::swing::border::AbstractBorder
{

public:
  MetalBorders$ButtonBorder();
  virtual void paintBorder(::java::awt::Component *, ::java::awt::Graphics *, jint, jint, jint, jint);
private:
  void paintDefaultButtonBorder(::java::awt::Component *, ::java::awt::Graphics *, jint, jint, jint, jint);
  void paintOceanButtonBorder(::java::awt::Component *, ::java::awt::Graphics *, jint, jint, jint, jint);
public:
  virtual ::java::awt::Insets * getBorderInsets(::java::awt::Component *);
  virtual ::java::awt::Insets * getBorderInsets(::java::awt::Component *, ::java::awt::Insets *);
public: // actually protected
  static ::java::awt::Insets * borderInsets;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_metal_MetalBorders$ButtonBorder__
