330 lines
12 KiB
C
330 lines
12 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* 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 */
|