blob: 9c3f54596138ba7aa4700dae4863d6846009a90a [file] [log] [blame]
/****************************************************************************
*
* 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 */