shithub: freetype+ttf2subf

ref: 799d27b0b68008d427df1a55e761e3f5b42bd3f6
dir: /include/freetype/ftadvanc.h/

View raw version
/****************************************************************************
 *
 * ftadvanc.h
 *
 *   Quick computation of advance widths (specification only).
 *
 * Copyright 2008-2018 by
 * David Turner, Robert Wilhelm, and Werner Lemberg.
 *
 * This file is part of the FreeType project, and may only be used,
 * modified, and distributed under the terms of the FreeType project
 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
 * this file you indicate that you have read the license and
 * understand and accept it fully.
 *
 */


#ifndef FTADVANC_H_
#define FTADVANC_H_


#include <ft2build.h>
#include FT_FREETYPE_H

#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif


FT_BEGIN_HEADER


  /**************************************************************************
   *
   * @section:
   *   quick_advance
   *
   * @title:
   *   Quick retrieval of advance values
   *
   * @abstract:
   *   Retrieve horizontal and vertical advance values without processing
   *   glyph outlines, if possible.
   *
   * @description:
   *   This section contains functions to quickly extract advance values
   *   without handling glyph outlines, if possible.
   *
   * @order:
   *   FT_Get_Advance
   *   FT_Get_Advances
   *
   */


  /**************************************************************************
   *
   * @enum:
   *   FT_ADVANCE_FLAG_FAST_ONLY
   *
   * @description:
   *   A bit-flag to be OR-ed with the `flags' parameter of the
   *   @FT_Get_Advance and @FT_Get_Advances functions.
   *
   *   If set, it indicates that you want these functions to fail if the
   *   corresponding hinting mode or font driver doesn't allow for very
   *   quick advance computation.
   *
   *   Typically, glyphs that are either unscaled, unhinted, bitmapped,
   *   or light-hinted can have their advance width computed very
   *   quickly.
   *
   *   Normal and bytecode hinted modes that require loading, scaling,
   *   and hinting of the glyph outline, are extremely slow by
   *   comparison.
   */
#define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000L


  /**************************************************************************
   *
   * @function:
   *   FT_Get_Advance
   *
   * @description:
   *   Retrieve the advance value of a given glyph outline in an
   *   @FT_Face.
   *
   * @input:
   *   face ::
   *     The source @FT_Face handle.
   *
   *   gindex ::
   *     The glyph index.
   *
   *   load_flags ::
   *     A set of bit flags similar to those used when
   *     calling @FT_Load_Glyph, used to determine what kind
   *     of advances you need.
   * @output:
   *   padvance ::
   *     The advance value.  If scaling is performed (based on
   *     the value of `load_flags'), the advance value is in
   *     16.16 format.  Otherwise, it is in font units.
   *
   *     If @FT_LOAD_VERTICAL_LAYOUT is set, this is the
   *     vertical advance corresponding to a vertical layout.
   *     Otherwise, it is the horizontal advance in a
   *     horizontal layout.
   *
   * @return:
   *   FreeType error code.  0 means success.
   *
   * @note:
   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and
   *   if the corresponding font backend doesn't have a quick way to
   *   retrieve the advances.
   *
   *   A scaled advance is returned in 16.16 format but isn't transformed
   *   by the affine transformation specified by @FT_Set_Transform.
   */
  FT_EXPORT( FT_Error )
  FT_Get_Advance( FT_Face    face,
                  FT_UInt    gindex,
                  FT_Int32   load_flags,
                  FT_Fixed  *padvance );


  /**************************************************************************
   *
   * @function:
   *   FT_Get_Advances
   *
   * @description:
   *   Retrieve the advance values of several glyph outlines in an
   *   @FT_Face.
   *
   * @input:
   *   face ::
   *     The source @FT_Face handle.
   *
   *   start ::
   *     The first glyph index.
   *
   *   count ::
   *     The number of advance values you want to retrieve.
   *
   *   load_flags ::
   *     A set of bit flags similar to those used when
   *     calling @FT_Load_Glyph.
   *
   * @output:
   *   padvance ::
   *     The advance values.  This array, to be provided by the
   *     caller, must contain at least `count' elements.
   *
   *     If scaling is performed (based on the value of
   *     `load_flags'), the advance values are in 16.16 format.
   *     Otherwise, they are in font units.
   *
   *     If @FT_LOAD_VERTICAL_LAYOUT is set, these are the
   *     vertical advances corresponding to a vertical layout.
   *     Otherwise, they are the horizontal advances in a
   *     horizontal layout.
   *
   * @return:
   *   FreeType error code.  0 means success.
   *
   * @note:
   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and
   *   if the corresponding font backend doesn't have a quick way to
   *   retrieve the advances.
   *
   *   Scaled advances are returned in 16.16 format but aren't
   *   transformed by the affine transformation specified by
   *   @FT_Set_Transform.
   */
  FT_EXPORT( FT_Error )
  FT_Get_Advances( FT_Face    face,
                   FT_UInt    start,
                   FT_UInt    count,
                   FT_Int32   load_flags,
                   FT_Fixed  *padvances );

  /* */


FT_END_HEADER

#endif /* FTADVANC_H_ */


/* END */