shithub: freetype+ttf2subf

ref: 74abee8e2ea269b983916b8eb55bef385b98f2e2
dir: /include/freetype/ftglyph.h/

View raw version
/***************************************************************************/
/*                                                                         */
/*  ftglyph.h                                                              */
/*                                                                         */
/*    FreeType convenience functions to handle glyphs..                    */
/*                                                                         */
/*  Copyright 1996-2000 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.                                        */
/*                                                                         */
/*  This file contains the definition of several convenience functions     */
/*  that can be used by client applications to easily retrieve glyph       */
/*  bitmaps and outlines from a given face.                                */
/*                                                                         */
/*  These functions should be optional if you're writing a font server     */
/*  or text layout engine on top of FreeType. However, they are pretty     */
/*  handy for many other simple uses of the library..                      */
/*                                                                         */
/***************************************************************************/

#ifndef FTGLYPH_H
#define FTGLYPH_H

#include <freetype/freetype.h>

#ifdef __cplusplus
  extern "C" {
#endif

  typedef enum {

    ft_glyph_type_none    = 0,
    ft_glyph_type_bitmap  = 1,
    ft_glyph_type_outline = 2

  } FT_GlyphType;

 /***********************************************************************
  *
  * <Struct>
  *    FT_GlyphRec
  *
  * <Description>
  *    The root glyph structure contains a given glyph image's metrics.
  *    Note that the FT_Glyph type is a pointer to FT_GlyphRec
  *
  * <Field>
  *    memory   :: a handle to the memory allocator that is used to
  *                create/clone/destroy this glyph..
  *
  *    glyph_type :: the glyph type..
  *
  *    height   :: height of glyph image
  *    width    :: width of glyph image
  *
  *    bearingX :: horizontal bearing, this is the distance from the
  *                the current pen position to the left of the glyph
  *
  *    bearingY :: vertical bearing, this is the distance from the
  *                current pen position to the top of the glyph
  *
  *    advance  :: this is the horizontal or vertical advance for the
  *                glyph
  *
  * <Note>
  *    the distances expressed in the metrics are expressed in 26.6 fixed
  *    float sub-pixels (i.e. 1/64th of pixels).
  *
  *    the vertical bearing has a positive value when the glyph top is
  *    above the baseline, and negative when it is under..
  *
  ***********************************************************************/

  typedef struct FT_GlyphRec_
  {
    FT_Memory     memory;
    FT_GlyphType  glyph_type;
    FT_Int        height;
    FT_Int        width;
    FT_Int        bearingX;
    FT_Int        bearingY;
    FT_Int        advance;

  } FT_GlyphRec, *FT_Glyph;


 /***********************************************************************
  *
  * <Struct>
  *    FT_BitmapGlyphRec
  *
  * <Description>
  *    A structure used to describe a bitmap glyph image..
  *    Note that the FT_BitmapGlyph type is a pointer to FT_BitmapGlyphRec
  *
  * <Field>
  *    metrics  :: the corresponding glyph metrics
  *    bitmap   :: a descriptor for the bitmap.
  *    left     :: left-side bearing, i.e. the horizontal distance from
  *                the current pen position to the left border of the glyph
  *                bitmap.
  *    top      :: top-side bearing, i.e. the vertical distance from the
  *                current pen position to the top border of the glyph bitmap
  *                this distance is positive for upwards-y !!
  *
  * <Note>
  *    the "width" and "height" fields of the metrics are expressed in
  *    26.6 sub-pixels. However, the width and height in pixels can be
  *    read directly from "bitmap.width" and "bitmap.height"
  *
  *    this structure is used for both monochrome and anti-aliased
  *    bitmaps (the bitmap descriptor contains field describing the
  *    format of the pixel buffer)
  *
  *    the corresponding pixel buffer is always owned by the BitmapGlyph
  *    and is thus creatde and destroyed with it..
  *
  ***********************************************************************/

  typedef struct FT_BitmapGlyphRec_
  {
    FT_GlyphRec  metrics;
    FT_Int       left;
    FT_Int       top;
    FT_Bitmap    bitmap;

  } FT_BitmapGlyphRec_, *FT_BitmapGlyph;


 /***********************************************************************
  *
  * <Struct>
  *    FT_OutlineGlyphRec
  *
  * <Description>
  *    A structure used to describe a vectorial outline glyph image..
  *    Note that the FT_OutlineGlyph type is a pointer to FT_OutlineGlyphRec
  *
  * <Field>
  *    metrics  :: the corresponding glyph metrics
  *    outline  :: a descriptor for the outline
  *
  * <Note>
  *    the "width" and "height" fields of the metrics are expressed in
  *    26.6 sub-pixels. However, the width and height in pixels can be
  *    read directly from "bitmap.width" and "bitmap.rows"
  *
  *    the corresponding outline points tables is always owned by the
  *    object and are destroyed with it..
  *
  *    an OutlineGlyph can be used to generate a BitmapGlyph with the
  *    function FT_OutlineGlyph_Render()
  *
  ***********************************************************************/

  typedef struct FT_OutlineGlyphRec_
  {
    FT_GlyphRec  metrics;
    FT_Outline   outline;

  } FT_OutlineGlyphRec_, *FT_OutlineGlyph;


 /***********************************************************************
  *
  * <Function>
  *    FT_Get_Glyph_Bitmap
  *
  * <Description>
  *    A function used to directly return a bitmap glyph image
  *    from a face.
  *
  * <Input>
  *    face        :: handle to source face object
  *    glyph_index :: glyph index in face
  *    load_flags  :: load flags, see FT_LOAD_FLAG_XXXX constants..
  *    grays       :: number of gray levels for anti-aliased bitmaps,
  *                   set to 0 if you want to render a monochrome bitmap
  *    origin      :: a pointer to the origin's position. Set to 0
  *                   if the current transform is the identity..
  *
  * <Output>
  *    bitglyph :: pointer to the new bitmap glyph
  *
  * <Return>
  *    Error code. 0 means success.
  *
  * <Note>
  *    If the font contains glyph outlines, these will be automatically
  *    converted to a bitmap according to the value of "grays"
  *
  *    If "grays" is set to 0, the result is a 1-bit monochrome bitmap
  *    otherwise, it is an 8-bit gray-level bitmap
  *
  *    The number of gray levels in the result anti-aliased bitmap might
  *    not be "grays", depending on the current scan-converter implementation
  *
  *    Note that it is not possible to generate 8-bit monochrome bitmaps
  *    with this function. Rather, use FT_Get_Glyph_Outline, then
  *    FT_Glyph_Render_Outline and provide your own span callbacks..
  *
  *    When the face doesn't contain scalable outlines, this function will
  *    fail if the current transform is not the identity, or if the glyph
  *    origin's phase to the pixel grid is not 0 in both directions !!
  *
  ***********************************************************************/

  FT_EXPORT_DEF(FT_Error)  FT_Get_Glyph_Bitmap( FT_Face         face,
                                                FT_UInt         glyph_index,
                                                FT_UInt         load_flags,
                                                FT_Int          grays,
                                                FT_Vector*      origin,
                                                FT_BitmapGlyph  *abitglyph );


 /***********************************************************************
  *
  * <Function>
  *    FT_Get_Glyph_Outline
  *
  * <Description>
  *    A function used to directly return an outline glyph image from a
  *    face. This is faster than calling FT_Load_Glyph+FT_Get_Outline_Bitmap..
  *
  * <Input>
  *    face        :: handle to source face object
  *    glyph_index :: glyph index in face
  *    load_flags  :: load flags, see FT_LOAD_FLAG_XXXX constants..
  *
  * <Output>
  *    vecglyph :: pointer to the new outline glyph
  *
  * <Return>
  *    Error code. 0 means success.
  *
  * <Note>
  *    If the glyph is not an outline in the face, this function will
  *    fail..
  *
  *    This function will fail if the load flags FT_LOAD_NO_OUTLINE and
  *    FT_LOAD_NO_RECURSE are set..
  *
  ***********************************************************************/

  FT_EXPORT_DEF(FT_Error)  FT_Get_Glyph_Outline( FT_Face           face,
                                                 FT_UInt           glyph_index,
                                                 FT_UInt           load_flags,
                                                 FT_OutlineGlyph  *vecglyph );


 /***********************************************************************
  *
  * <Function>
  *    FT_Set_Transform
  *
  * <Description>
  *    A function used to set the transform that is applied to glyph images
  *    just after they're loaded in the face's glyph slot, and before they're
  *    returned by either FT_Get_Glyph_Bitmap or FT_Get_Glyph_Outline
  *
  * <Input>
  *    face   :: handle to source face object
  *    matrix :: pointer to the transform's 2x2 matrix. 0 for identity
  *    delta  :: pointer to the transform's translation. 0 for null vector
  *
  * <Note>
  *    The transform is only applied to glyph outlines when they are found
  *    in a font face. It is unable to transform embedded glyph bitmaps
  *
  ***********************************************************************/

  FT_EXPORT_DEF(void)  FT_Set_Transform( FT_Face     face,
                                         FT_Matrix*  matrix,
                                         FT_Vector*  delta );


 /***********************************************************************
  *
  * <Function>
  *    FT_Done_Glyph
  *
  * <Description>
  *    Destroys a given glyph..
  *
  * <Input>
  *    glyph  :: handle to target glyph object
  *
  ***********************************************************************/

  FT_EXPORT_DEF(void)  FT_Done_Glyph( FT_Glyph  glyph );


 /***********************************************************************
  *
  * <Function>
  *    FT_Glyph_Get_Box
  *
  * <Description>
  *    Returns the glyph image's bounding box in pixels.
  *
  * <Input>
  *    glyph :: handle to target glyph object
  *
  * <Output>
  *    box   :: the glyph bounding box. Coordinates are expressed in
  *             _integer_ pixels, with exclusive max bounds
  *
  * <Note>
  *    Coordinates are relative to the glyph origin, using the Y-upwards
  *    convention..
  *
  *    The width of the box in pixels is box.xMax-box.xMin
  *    The height is box.yMax - box.yMin
  *
  ***********************************************************************/

  FT_EXPORT_DEF(void)  FT_Glyph_Get_Box( FT_Glyph  glyph,
                                         FT_BBox  *box );

#ifdef __cplusplus
  }
#endif

#endif /* FTGLYPH_H */