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

#ifndef __gnu_java_awt_font_autofit_Latin__
#define __gnu_java_awt_font_autofit_Latin__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace font
        {
          namespace autofit
          {
              class Edge;
              class GlyphHints;
              class HintScaler;
              class Latin;
              class LatinMetrics;
              class ScriptMetrics;
              class Width;
          }
          namespace opentype
          {
              class OpenTypeFont;
            namespace truetype
            {
                class Zone;
            }
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
      namespace geom
      {
          class AffineTransform;
      }
    }
  }
}

class gnu::java::awt::font::autofit::Latin : public ::java::lang::Object
{

public: // actually package-private
  Latin();
public:
  virtual void applyHints(::gnu::java::awt::font::autofit::GlyphHints *, ::gnu::java::awt::font::opentype::truetype::Zone *, ::gnu::java::awt::font::autofit::ScriptMetrics *);
private:
  void hintEdges(::gnu::java::awt::font::autofit::GlyphHints *, jint);
  void alignSerifEdge(::gnu::java::awt::font::autofit::GlyphHints *, ::gnu::java::awt::font::autofit::Edge *, ::gnu::java::awt::font::autofit::Edge *);
  jint computeStemWidth(::gnu::java::awt::font::autofit::GlyphHints *, jint, jint, jint, jint);
  jboolean doMono(::gnu::java::awt::font::autofit::GlyphHints *);
  jint snapWidth(JArray< ::gnu::java::awt::font::autofit::Width * > *, jint, jint);
  jint doneWidth(jint, jint);
  jboolean doVertSnap(::gnu::java::awt::font::autofit::GlyphHints *);
  jboolean doHorzSnap(::gnu::java::awt::font::autofit::GlyphHints *);
  jboolean doStemAdjust(::gnu::java::awt::font::autofit::GlyphHints *);
  void alignLinkedEdge(::gnu::java::awt::font::autofit::GlyphHints *, jint, ::gnu::java::awt::font::autofit::Edge *, ::gnu::java::awt::font::autofit::Edge *);
public:
  virtual void doneMetrics(::gnu::java::awt::font::autofit::ScriptMetrics *);
  virtual void initHints(::gnu::java::awt::font::autofit::GlyphHints *, ::gnu::java::awt::font::autofit::ScriptMetrics *);
  virtual void initMetrics(::gnu::java::awt::font::autofit::ScriptMetrics *, ::gnu::java::awt::font::opentype::OpenTypeFont *);
  virtual void scaleMetrics(::gnu::java::awt::font::autofit::ScriptMetrics *, ::gnu::java::awt::font::autofit::HintScaler *);
private:
  void scaleMetricsDim(::gnu::java::awt::font::autofit::LatinMetrics *, ::gnu::java::awt::font::autofit::HintScaler *, jint);
  void initWidths(::gnu::java::awt::font::autofit::LatinMetrics *, ::gnu::java::awt::font::opentype::OpenTypeFont *, jchar);
public: // actually package-private
  virtual void linkSegments(::gnu::java::awt::font::autofit::GlyphHints *, jint);
private:
  void initBlues(::gnu::java::awt::font::autofit::LatinMetrics *, ::gnu::java::awt::font::opentype::OpenTypeFont *);
  jint constant(::gnu::java::awt::font::autofit::LatinMetrics *, jint);
  void computeSegments(::gnu::java::awt::font::autofit::GlyphHints *, jint);
  jboolean isTopBlue(jint);
  void detectFeatures(::gnu::java::awt::font::autofit::GlyphHints *, jint);
  void computeEdges(::gnu::java::awt::font::autofit::GlyphHints *, jint);
  void computeBlueEdges(::gnu::java::awt::font::autofit::GlyphHints *, ::gnu::java::awt::font::autofit::LatinMetrics *);
public: // actually package-private
  static const jint MAX_WIDTHS = 16;
private:
  static const jint MAX_TEST_CHARS = 12;
  static const jint CAPITAL_TOP = 0;
  static const jint CAPITAL_BOTTOM = 1;
  static const jint SMALL_F_TOP = 2;
  static const jint SMALL_TOP = 3;
  static const jint SMALL_BOTTOM = 4;
  static const jint SMALL_MINOR = 5;
public: // actually package-private
  static const jint BLUE_MAX = 6;
private:
  static JArray< ::java::lang::String * > * TEST_CHARS;
  static ::java::awt::geom::AffineTransform * IDENTITY;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_font_autofit_Latin__
