| /***************************************************************************/ |
| /* */ |
| /* 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> |
| |
| 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. |
| * |
| * <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 monochrome 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 !! |
| * |
| ***********************************************************************/ |
| |
| 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 a bitmap 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.. |
| * |
| ***********************************************************************/ |
| |
| 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 |
| * |
| ***********************************************************************/ |
| |
| 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 |
| * |
| ***********************************************************************/ |
| |
| 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 |
| * |
| ***********************************************************************/ |
| |
| EXPORT_DEF(void) FT_Glyph_Get_Box( FT_Glyph glyph, |
| FT_BBox *box ); |
| |
| #endif /* FTGLYPH_H */ |