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

#ifndef __gnu_java_awt_font_opentype_truetype_GlyphMeasurer__
#define __gnu_java_awt_font_opentype_truetype_GlyphMeasurer__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace font
        {
          namespace opentype
          {
            namespace truetype
            {
                class GlyphMeasurer;
            }
          }
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
        class ShortBuffer;
    }
  }
}

class gnu::java::awt::font::opentype::truetype::GlyphMeasurer : public ::java::lang::Object
{

public: // actually package-private
  GlyphMeasurer(::java::nio::ByteBuffer *, ::java::nio::ByteBuffer *, ::java::nio::ByteBuffer *, ::java::nio::ByteBuffer *);
public:
  jint getAscent(jboolean);
  jint getDescent(jboolean);
  jint getLineGap(jboolean);
  jint getAdvanceWidth(jint, jboolean);
  jint getAdvanceHeight(jint, jboolean);
private:
  ::java::nio::ShortBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) horizontalGlyphMetrics;
  ::java::nio::ShortBuffer * verticalGlyphMetrics;
  jint numLongHorizontalMetricsEntries;
  jint numLongVerticalMetricsEntries;
  jint horizontalAscent;
  jint verticalAscent;
  jint horizontalDescent;
  jint verticalDescent;
  jint horizontalLineGap;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_font_opentype_truetype_GlyphMeasurer__
