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

#ifndef __javax_swing_text_html_InlineView__
#define __javax_swing_text_html_InlineView__

#pragma interface

#include <javax/swing/text/LabelView.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Shape;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace event
      {
          class DocumentEvent;
      }
      namespace text
      {
          class AttributeSet;
          class Element;
          class View;
          class ViewFactory;
        namespace html
        {
            class InlineView;
            class StyleSheet;
        }
      }
    }
  }
}

class javax::swing::text::html::InlineView : public ::javax::swing::text::LabelView
{

public:
  InlineView(::javax::swing::text::Element *);
  virtual void insertUpdate(::javax::swing::event::DocumentEvent *, ::java::awt::Shape *, ::javax::swing::text::ViewFactory *);
  virtual void removeUpdate(::javax::swing::event::DocumentEvent *, ::java::awt::Shape *, ::javax::swing::text::ViewFactory *);
  virtual void changedUpdate(::javax::swing::event::DocumentEvent *, ::java::awt::Shape *, ::javax::swing::text::ViewFactory *);
  virtual ::javax::swing::text::AttributeSet * getAttributes();
  virtual jint getBreakWeight(jint, jfloat, jfloat);
  virtual ::javax::swing::text::View * breakView(jint, jint, jfloat, jfloat);
public: // actually protected
  virtual void setPropertiesFromAttributes();
  virtual ::javax::swing::text::html::StyleSheet * getStyleSheet();
public:
  virtual jfloat getMinimumSpan(jint);
private:
  jfloat getLongestWord();
  jfloat calculateLongestWord();
  ::javax::swing::text::AttributeSet * __attribute__((aligned(__alignof__( ::javax::swing::text::LabelView)))) attributes;
  jfloat longestWord;
  jboolean nowrap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_InlineView__
