/***************************************************************************/ /* */ /* 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 typedef enum { ft_glyph_type_none = 0, ft_glyph_type_bitmap = 1, ft_glyph_type_outline = 2 } FT_GlyphType; /*********************************************************************** * * * FT_GlyphRec * * * The root glyph structure contains a given glyph image's metrics. * Note that the FT_Glyph type is a pointer to FT_GlyphRec * * * 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 * * * 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; /*********************************************************************** * * * FT_BitmapGlyphRec * * * A structure used to describe a bitmap glyph image.. * Note that the FT_BitmapGlyph type is a pointer to FT_BitmapGlyphRec * * * metrics :: the corresponding glyph metrics * bitmap :: a descriptor for the bitmap. * * * 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; /*********************************************************************** * * * FT_OutlineGlyphRec * * * A structure used to describe a vectorial outline glyph image.. * Note that the FT_OutlineGlyph type is a pointer to FT_OutlineGlyphRec * * * metrics :: the corresponding glyph metrics * outline :: a descriptor for the outline * * * 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; /*********************************************************************** * * * FT_Get_Glyph_Bitmap * * * A function used to directly return a monochrome bitmap glyph image * from a face. * * * 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.. * * * bitglyph :: pointer to the new bitmap glyph * * * Error code. 0 means success. * * * 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 !! * ***********************************************************************/ 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 ); /*********************************************************************** * * * FT_Get_Glyph_Outline * * * A function used to directly return a bitmap glyph image from a * face. This is faster than calling FT_Load_Glyph+FT_Get_Outline_Bitmap.. * * * face :: handle to source face object * glyph_index :: glyph index in face * load_flags :: load flags, see FT_LOAD_FLAG_XXXX constants.. * * * vecglyph :: pointer to the new outline glyph * * * Error code. 0 means success. * * * 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.. * ***********************************************************************/ EXPORT_DEF(FT_Error) FT_Get_Glyph_Outline( FT_Face face, FT_UInt glyph_index, FT_UInt load_flags, FT_OutlineGlyph *vecglyph ); /*********************************************************************** * * * FT_Set_Transform * * * 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 * * * 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 * * * The transform is only applied to glyph outlines when they are found * in a font face. It is unable to transform embedded glyph bitmaps * ***********************************************************************/ EXPORT_DEF(void) FT_Set_Transform( FT_Face face, FT_Matrix* matrix, FT_Vector* delta ); /*********************************************************************** * * * FT_Done_Glyph * * * Destroys a given glyph.. * * * glyph :: handle to target glyph object * ***********************************************************************/ EXPORT_DEF(void) FT_Done_Glyph( FT_Glyph glyph ); /*********************************************************************** * * * FT_Glyph_Get_Box * * * Returns the glyph image's bounding box in pixels. * * * glyph :: handle to target glyph object * * * box :: the glyph bounding box. Coordinates are expressed in * _integer_ pixels, with exclusive max bounds * * * 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 * ***********************************************************************/ EXPORT_DEF(void) FT_Glyph_Get_Box( FT_Glyph glyph, FT_BBox *box ); #endif /* FTGLYPH_H */