2018-06-03 22:00:42 +02:00
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* ftglyph.h
|
|
|
|
*
|
|
|
|
* FreeType convenience functions to handle glyphs (specification).
|
|
|
|
*
|
|
|
|
* Copyright 1996-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.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* 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 are 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.
|
|
|
|
*
|
|
|
|
*/
|
2000-07-10 02:06:22 +02:00
|
|
|
|
|
|
|
|
2016-01-12 21:37:13 +01:00
|
|
|
#ifndef FTGLYPH_H_
|
|
|
|
#define FTGLYPH_H_
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
|
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_FREETYPE_H
|
|
|
|
|
2003-11-04 08:44:19 +01:00
|
|
|
#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
|
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Section:
|
|
|
|
* glyph_management
|
|
|
|
*
|
|
|
|
* @Title:
|
|
|
|
* Glyph Management
|
|
|
|
*
|
|
|
|
* @Abstract:
|
|
|
|
* Generic interface to manage individual glyph data.
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* This section contains definitions used to manage glyph data
|
|
|
|
* through generic FT_Glyph objects. Each of them can contain a
|
|
|
|
* bitmap, a vector outline, or even images in other formats.
|
|
|
|
*
|
|
|
|
*/
|
2001-01-11 10:27:49 +01:00
|
|
|
|
2000-05-22 18:25:14 +02:00
|
|
|
|
2000-07-01 01:12:55 +02:00
|
|
|
/* forward declaration to a private type */
|
|
|
|
typedef struct FT_Glyph_Class_ FT_Glyph_Class;
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2000-07-10 02:06:22 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Type:
|
|
|
|
* FT_Glyph
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Handle to an object used to model generic glyph images. It is a
|
|
|
|
* pointer to the @FT_GlyphRec structure and can contain a glyph
|
|
|
|
* bitmap or pointer.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* Glyph objects are not owned by the library. You must thus release
|
|
|
|
* them manually (through @FT_Done_Glyph) _before_ calling
|
|
|
|
* @FT_Done_FreeType.
|
|
|
|
*/
|
2001-12-16 09:17:33 +01:00
|
|
|
typedef struct FT_GlyphRec_* FT_Glyph;
|
2001-12-14 15:52:58 +01:00
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Struct:
|
|
|
|
* FT_GlyphRec
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The root glyph structure contains a given glyph image plus its
|
|
|
|
* advance width in 16.16 fixed-point format.
|
|
|
|
*
|
|
|
|
* @Fields:
|
|
|
|
* library ::
|
|
|
|
* A handle to the FreeType library object.
|
|
|
|
*
|
|
|
|
* clazz ::
|
|
|
|
* A pointer to the glyph's class. Private.
|
|
|
|
*
|
|
|
|
* format ::
|
|
|
|
* The format of the glyph's image.
|
|
|
|
*
|
|
|
|
* advance ::
|
|
|
|
* A 16.16 vector that gives the glyph's advance width.
|
|
|
|
*/
|
2000-07-10 02:06:22 +02:00
|
|
|
typedef struct FT_GlyphRec_
|
2000-03-28 13:22:31 +02:00
|
|
|
{
|
2000-07-01 01:12:55 +02:00
|
|
|
FT_Library library;
|
|
|
|
const FT_Glyph_Class* clazz;
|
|
|
|
FT_Glyph_Format format;
|
|
|
|
FT_Vector advance;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2001-12-14 15:52:58 +01:00
|
|
|
} FT_GlyphRec;
|
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Type:
|
|
|
|
* FT_BitmapGlyph
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A handle to an object used to model a bitmap glyph image. This is
|
|
|
|
* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
|
|
|
|
*/
|
2001-12-16 09:17:33 +01:00
|
|
|
typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph;
|
2000-03-28 13:22:31 +02:00
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Struct:
|
|
|
|
* FT_BitmapGlyphRec
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A structure used for bitmap glyph images. This really is a
|
|
|
|
* `sub-class' of @FT_GlyphRec.
|
|
|
|
*
|
|
|
|
* @Fields:
|
|
|
|
* root ::
|
|
|
|
* The root @FT_Glyph fields.
|
|
|
|
*
|
|
|
|
* left ::
|
|
|
|
* The left-side bearing, i.e., the horizontal distance
|
|
|
|
* from the current pen position to the left border of the
|
|
|
|
* glyph bitmap.
|
|
|
|
*
|
|
|
|
* top ::
|
|
|
|
* The 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!
|
|
|
|
*
|
|
|
|
* bitmap ::
|
|
|
|
* A descriptor for the bitmap.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have
|
|
|
|
* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access
|
|
|
|
* the bitmap's contents easily.
|
|
|
|
*
|
|
|
|
* The corresponding pixel buffer is always owned by @FT_BitmapGlyph
|
|
|
|
* and is thus created and destroyed with it.
|
|
|
|
*/
|
2000-07-10 02:06:22 +02:00
|
|
|
typedef struct FT_BitmapGlyphRec_
|
2000-03-28 13:22:31 +02:00
|
|
|
{
|
2000-07-01 01:12:55 +02:00
|
|
|
FT_GlyphRec root;
|
2000-03-28 13:22:31 +02:00
|
|
|
FT_Int left;
|
|
|
|
FT_Int top;
|
|
|
|
FT_Bitmap bitmap;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2001-12-14 15:52:58 +01:00
|
|
|
} FT_BitmapGlyphRec;
|
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Type:
|
|
|
|
* FT_OutlineGlyph
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A handle to an object used to model an outline glyph image. This
|
|
|
|
* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
|
|
|
|
*/
|
2001-12-16 09:17:33 +01:00
|
|
|
typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
|
2000-03-28 13:22:31 +02:00
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Struct:
|
|
|
|
* FT_OutlineGlyphRec
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A structure used for outline (vectorial) glyph images. This
|
|
|
|
* really is a `sub-class' of @FT_GlyphRec.
|
|
|
|
*
|
|
|
|
* @Fields:
|
|
|
|
* root ::
|
|
|
|
* The root @FT_Glyph fields.
|
|
|
|
*
|
|
|
|
* outline ::
|
|
|
|
* A descriptor for the outline.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have
|
|
|
|
* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access
|
|
|
|
* the outline's content easily.
|
|
|
|
*
|
|
|
|
* As the outline is extracted from a glyph slot, its coordinates are
|
|
|
|
* expressed normally in 26.6 pixels, unless the flag
|
|
|
|
* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char().
|
|
|
|
*
|
|
|
|
* The outline's tables are always owned by the object and are
|
|
|
|
* destroyed with it.
|
|
|
|
*/
|
2000-07-10 02:06:22 +02:00
|
|
|
typedef struct FT_OutlineGlyphRec_
|
2000-03-28 13:22:31 +02:00
|
|
|
{
|
2000-07-01 01:12:55 +02:00
|
|
|
FT_GlyphRec root;
|
2000-03-28 13:22:31 +02:00
|
|
|
FT_Outline outline;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2001-12-14 15:52:58 +01:00
|
|
|
} FT_OutlineGlyphRec;
|
2000-07-01 01:12:55 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Get_Glyph
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A function used to extract a glyph image from a slot. Note that
|
|
|
|
* the created @FT_Glyph object must be released with @FT_Done_Glyph.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* slot ::
|
|
|
|
* A handle to the source glyph slot.
|
|
|
|
*
|
|
|
|
* @Output:
|
|
|
|
* aglyph ::
|
|
|
|
* A handle to the glyph object.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* FreeType error code. 0~means success.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16
|
|
|
|
* fixed-point numbers, `slot->advance.x' and `slot->advance.y'
|
|
|
|
* (which are in 26.6 fixed-point format) must be in the range
|
|
|
|
* ]-32768;32768[.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Error )
|
|
|
|
FT_Get_Glyph( FT_GlyphSlot slot,
|
|
|
|
FT_Glyph *aglyph );
|
2000-07-10 02:06:22 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Glyph_Copy
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* A function used to copy a glyph image. Note that the created
|
|
|
|
* @FT_Glyph object must be released with @FT_Done_Glyph.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* source ::
|
|
|
|
* A handle to the source glyph object.
|
|
|
|
*
|
|
|
|
* @Output:
|
|
|
|
* target ::
|
|
|
|
* A handle to the target glyph object. 0~in case of
|
|
|
|
* error.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* FreeType error code. 0~means success.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Error )
|
|
|
|
FT_Glyph_Copy( FT_Glyph source,
|
|
|
|
FT_Glyph *target );
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2000-07-10 02:06:22 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Glyph_Transform
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Transform a glyph image if its format is scalable.
|
|
|
|
*
|
|
|
|
* @InOut:
|
|
|
|
* glyph ::
|
|
|
|
* A handle to the target glyph object.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* matrix ::
|
|
|
|
* A pointer to a 2x2 matrix to apply.
|
|
|
|
*
|
|
|
|
* delta ::
|
|
|
|
* A pointer to a 2d vector to apply. Coordinates are
|
|
|
|
* expressed in 1/64th of a pixel.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* FreeType error code (if not 0, the glyph format is not scalable).
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* The 2x2 transformation matrix is also applied to the glyph's
|
|
|
|
* advance vector.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Error )
|
|
|
|
FT_Glyph_Transform( FT_Glyph glyph,
|
|
|
|
FT_Matrix* matrix,
|
|
|
|
FT_Vector* delta );
|
2000-07-10 02:06:22 +02:00
|
|
|
|
2003-07-25 07:57:21 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Enum:
|
|
|
|
* FT_Glyph_BBox_Mode
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The mode how the values of @FT_Glyph_Get_CBox are returned.
|
|
|
|
*
|
|
|
|
* @Values:
|
|
|
|
* FT_GLYPH_BBOX_UNSCALED ::
|
|
|
|
* Return unscaled font units.
|
|
|
|
*
|
|
|
|
* FT_GLYPH_BBOX_SUBPIXELS ::
|
|
|
|
* Return unfitted 26.6 coordinates.
|
|
|
|
*
|
|
|
|
* FT_GLYPH_BBOX_GRIDFIT ::
|
|
|
|
* Return grid-fitted 26.6 coordinates.
|
|
|
|
*
|
|
|
|
* FT_GLYPH_BBOX_TRUNCATE ::
|
|
|
|
* Return coordinates in integer pixels.
|
|
|
|
*
|
|
|
|
* FT_GLYPH_BBOX_PIXELS ::
|
|
|
|
* Return grid-fitted pixel coordinates.
|
|
|
|
*/
|
2003-07-25 07:57:21 +02:00
|
|
|
typedef enum FT_Glyph_BBox_Mode_
|
|
|
|
{
|
|
|
|
FT_GLYPH_BBOX_UNSCALED = 0,
|
|
|
|
FT_GLYPH_BBOX_SUBPIXELS = 0,
|
|
|
|
FT_GLYPH_BBOX_GRIDFIT = 1,
|
|
|
|
FT_GLYPH_BBOX_TRUNCATE = 2,
|
|
|
|
FT_GLYPH_BBOX_PIXELS = 3
|
|
|
|
|
|
|
|
} FT_Glyph_BBox_Mode;
|
|
|
|
|
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* these constants are deprecated; use the corresponding */
|
|
|
|
/* `FT_Glyph_BBox_Mode' values instead */
|
2003-07-25 07:57:21 +02:00
|
|
|
#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED
|
|
|
|
#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS
|
|
|
|
#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT
|
|
|
|
#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE
|
|
|
|
#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS
|
|
|
|
|
2001-06-28 19:49:10 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Glyph_Get_CBox
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Return a glyph's `control box'. The control box encloses all the
|
|
|
|
* outline's points, including Bezier control points. Though it
|
|
|
|
* coincides with the exact bounding box for most glyphs, it can be
|
|
|
|
* slightly larger in some situations (like when rotating an outline
|
|
|
|
* that contains Bezier outside arcs).
|
|
|
|
*
|
|
|
|
* Computing the control box is very fast, while getting the bounding
|
|
|
|
* box can take much more time as it needs to walk over all segments
|
|
|
|
* and arcs in the outline. To get the latter, you can use the
|
|
|
|
* `ftbbox' component, which is dedicated to this single task.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* glyph ::
|
|
|
|
* A handle to the source glyph object.
|
|
|
|
*
|
|
|
|
* mode ::
|
|
|
|
* The mode that indicates how to interpret the returned
|
|
|
|
* bounding box values.
|
|
|
|
*
|
|
|
|
* @Output:
|
|
|
|
* acbox ::
|
|
|
|
* The glyph coordinate bounding box. Coordinates are
|
|
|
|
* expressed in 1/64th of pixels if it is grid-fitted.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* Coordinates are relative to the glyph origin, using the y~upwards
|
|
|
|
* convention.
|
|
|
|
*
|
|
|
|
* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode'
|
|
|
|
* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font
|
|
|
|
* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS
|
|
|
|
* is another name for this constant.
|
|
|
|
*
|
|
|
|
* If the font is tricky and the glyph has been loaded with
|
|
|
|
* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get
|
|
|
|
* reasonable values for the CBox it is necessary to load the glyph
|
|
|
|
* at a large ppem value (so that the hinting instructions can
|
|
|
|
* properly shift and scale the subglyphs), then extracting the CBox,
|
|
|
|
* which can be eventually converted back to font units.
|
|
|
|
*
|
|
|
|
* Note that the maximum coordinates are exclusive, which means that
|
|
|
|
* one can compute the width and height of the glyph image (be it in
|
|
|
|
* integer or 26.6 pixels) as:
|
|
|
|
*
|
|
|
|
* {
|
|
|
|
* width = bbox.xMax - bbox.xMin;
|
|
|
|
* height = bbox.yMax - bbox.yMin;
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
* Note also that for 26.6 coordinates, if `bbox_mode' is set to
|
|
|
|
* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,
|
|
|
|
* which corresponds to:
|
|
|
|
*
|
|
|
|
* {
|
|
|
|
* bbox.xMin = FLOOR(bbox.xMin);
|
|
|
|
* bbox.yMin = FLOOR(bbox.yMin);
|
|
|
|
* bbox.xMax = CEILING(bbox.xMax);
|
|
|
|
* bbox.yMax = CEILING(bbox.yMax);
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
* To get the bbox in pixel coordinates, set `bbox_mode' to
|
|
|
|
* @FT_GLYPH_BBOX_TRUNCATE.
|
|
|
|
*
|
|
|
|
* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode'
|
|
|
|
* to @FT_GLYPH_BBOX_PIXELS.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Glyph_Get_CBox( FT_Glyph glyph,
|
|
|
|
FT_UInt bbox_mode,
|
|
|
|
FT_BBox *acbox );
|
2000-07-10 02:06:22 +02:00
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Glyph_To_Bitmap
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Convert a given glyph object to a bitmap glyph object.
|
|
|
|
*
|
|
|
|
* @InOut:
|
|
|
|
* the_glyph ::
|
|
|
|
* A pointer to a handle to the target glyph.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* render_mode ::
|
|
|
|
* An enumeration that describes how the data is
|
|
|
|
* rendered.
|
|
|
|
*
|
|
|
|
* origin ::
|
|
|
|
* A pointer to a vector used to translate the glyph
|
|
|
|
* image before rendering. Can be~0 (if no
|
|
|
|
* translation). The origin is expressed in
|
|
|
|
* 26.6 pixels.
|
|
|
|
*
|
|
|
|
* destroy ::
|
|
|
|
* A boolean that indicates that the original glyph
|
|
|
|
* image should be destroyed by this function. It is
|
|
|
|
* never destroyed in case of error.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* FreeType error code. 0~means success.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* This function does nothing if the glyph format isn't scalable.
|
|
|
|
*
|
|
|
|
* The glyph image is translated with the `origin' vector before
|
|
|
|
* rendering.
|
|
|
|
*
|
|
|
|
* The first parameter is a pointer to an @FT_Glyph handle, that will
|
|
|
|
* be _replaced_ by this function (with newly allocated data).
|
|
|
|
* Typically, you would use (omitting error handling):
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* {
|
|
|
|
* FT_Glyph glyph;
|
|
|
|
* FT_BitmapGlyph glyph_bitmap;
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* // load glyph
|
|
|
|
* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT );
|
|
|
|
*
|
|
|
|
* // extract glyph image
|
|
|
|
* error = FT_Get_Glyph( face->glyph, &glyph );
|
|
|
|
*
|
|
|
|
* // convert to a bitmap (default render mode + destroying old)
|
|
|
|
* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
|
|
|
|
* {
|
|
|
|
* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
|
|
|
|
* 0, 1 );
|
|
|
|
* if ( error ) // `glyph' unchanged
|
|
|
|
* ...
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
* // access bitmap content by typecasting
|
|
|
|
* glyph_bitmap = (FT_BitmapGlyph)glyph;
|
|
|
|
*
|
|
|
|
* // do funny stuff with it, like blitting/drawing
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* // discard glyph image (bitmap or not)
|
|
|
|
* FT_Done_Glyph( glyph );
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Here another example, again without error handling:
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* {
|
|
|
|
* FT_Glyph glyphs[MAX_GLYPHS]
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* for ( idx = 0; i < MAX_GLYPHS; i++ )
|
|
|
|
* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
|
|
|
|
* FT_Get_Glyph ( face->glyph, &glyphs[idx] );
|
|
|
|
*
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* for ( idx = 0; i < MAX_GLYPHS; i++ )
|
|
|
|
* {
|
|
|
|
* FT_Glyph bitmap = glyphs[idx];
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* // after this call, `bitmap' no longer points into
|
|
|
|
* // the `glyphs' array (and the old value isn't destroyed)
|
|
|
|
* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );
|
|
|
|
*
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* FT_Done_Glyph( bitmap );
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
* ...
|
|
|
|
*
|
|
|
|
* for ( idx = 0; i < MAX_GLYPHS; i++ )
|
|
|
|
* FT_Done_Glyph( glyphs[idx] );
|
|
|
|
* }
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Error )
|
* src/sfnt/ttpost.c (load_post_names, tt_face_free_ps_names,
tt_face_get_ps_name): Replace switch statement with if clauses to
make it more portable.
* src/cff/cffobjs.c (cff_face_init): Ditto.
* include/freetype/ftmodule.h (FT_Module_Class): Use `FT_Long' for
`module_size'.
* include/freetype/ftrender.h (FT_Glyph_Class_): Use `FT_Long' for
`glyph_size'.
* src/base/ftobjs.c (FT_Render_Glyph): Change second parameter to
`FT_Render_Mode'.
(FT_Render_Glyph_Internal): Change third parameter to
`FT_Render_Mode'.
* src/base/ftglyph.c (FT_Glyph_To_Bitmap): Change second parameter
to `FT_Render_Mode'.
* src/raster/ftrend1.c (ft_raster1_render): Change third parameter
to `FT_Render_Mode'.
* src/smooth/ftsmooth.c (ft_smooth_render, ft_smooth_render_lcd,
ft_smooth_render_lcd_v): Ditto.
(ft_smooth_render_generic): Change third and fifth parameter to
`FT_Render_Mode'.
* include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
include/freetype/ftglyph.h: Updated.
* src/cff/cffdrivr.c (Load_Glyph), src/pcf/pcfdriver.c
(PCF_Glyph_Load), src/pfr/pfrobjs.c (pfr_slot_load),
src/winfonts/winfnt.c (FNT_Load_Glyph), src/t42/t42objs.c
(T42_GlyphSlot_Load), src/bdf/bdfdrivr.c (BDF_Glyph_Load): Change
fourth parameter to `FT_Int32'.
* src/pfr/pfrobjs.c (pfr_face_init): Add two missing parameters
and declare them as unused.
* src/cid/cidparse.h (CID_Parser): Use FT_Long for `postscript_len'.
* src/psnames/psnames.h (PS_Unicode_Value_Func): Change return
value to FT_UInt32.
* src/psnames/psmodule.c (ps_unicode_value, ps_build_unicode_table):
Updated accordingly.
* src/cff/cffdrivr.c (Get_Kerning): Use FT_Long for `middle'.
(cff_get_glyph_name): Use cast for result of ft_strlen.
* src/cff/cffparse.c (cff_parse_real): User cast for assigning
`exp'.
* src/cff/cffload.c (cff_index_get_pointers): Use FT_ULong for
some local variables.
(cff_charset_load, cff_encoding_load): Use casts to FT_UInt for some
switch statements.
(cff_font_load): Use cast in call to CFF_Load_FD_Select.
* src/cff/cffobjs.c (cff_size_init): Use more casts.
(cff_face_init): Use FT_Int32 for `flags'.
* src/cff/cffgload.c (cff_operator_seac): Use cast for assigning
`adx' and `ady'.
(cff_decoder_parse_charstrings): Use FT_ULong for third parameter.
Use more casts.
* src/cff/cffcmap.c (cff_cmap_unicode_init): Use cast for `count'.
* src/cid/cidload.c (cid_read_subrs): Use FT_ULong for `len'.
* src/cid/cidgload.c (cid_load_glyph): Add missing cast for
`cid_get_offset'.
* src/psaux/t1decode.c (t1_decoder_parse_charstrings) <18>: Use
cast for `num_points'.
(t1_decoder_init): Use cast for assigning `decoder->num_glyphs'.
* src/base/ftdebug.c (ft_debug_init): Use FT_Int.
* include/freetype/internal/ftdriver.h (FT_Slot_LoadFunc): Use
`FT_Int32' for fourth parameter.
* src/base/ftobjs.c (open_face): Use cast for calling
clazz->init_face.
* src/raster/ftraster.c (Set_High_Precision): Use `1' instead of
`1L'.
(Finalize_Profile_Table, Line_Up, ft_black_init): Use casts.
* src/raster/ftrend1.c (ft_raster1_render): Ditto.
* src/sfnt/sfnt_dir_check: Compare `magic' with unsigned long
constant.
* builds/amiga/include/freetype/config/ftmodule.h: Updated.
2002-09-27 13:09:23 +02:00
|
|
|
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
|
|
|
|
FT_Render_Mode render_mode,
|
|
|
|
FT_Vector* origin,
|
|
|
|
FT_Bool destroy );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2000-07-10 02:06:22 +02:00
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Done_Glyph
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Destroy a given glyph.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* glyph ::
|
|
|
|
* A handle to the target glyph object.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
|
|
|
FT_Done_Glyph( FT_Glyph glyph );
|
2000-07-01 01:12:55 +02:00
|
|
|
|
2006-05-12 10:00:13 +02:00
|
|
|
/* */
|
|
|
|
|
2000-07-01 01:12:55 +02:00
|
|
|
|
|
|
|
/* other helpful functions */
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Section:
|
|
|
|
* computations
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Matrix_Multiply
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Perform the matrix operation `b = a*b'.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* a ::
|
|
|
|
* A pointer to matrix `a'.
|
|
|
|
*
|
|
|
|
* @InOut:
|
|
|
|
* b ::
|
|
|
|
* A pointer to matrix `b'.
|
|
|
|
*
|
|
|
|
* @Note:
|
|
|
|
* The result is undefined if either `a' or `b' is zero.
|
|
|
|
*
|
|
|
|
* Since the function uses wrap-around arithmetic, results become
|
|
|
|
* meaningless if the arguments are very large.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( void )
|
2003-01-14 16:53:33 +01:00
|
|
|
FT_Matrix_Multiply( const FT_Matrix* a,
|
2008-04-13 23:59:29 +02:00
|
|
|
FT_Matrix* b );
|
2000-07-01 01:12:55 +02:00
|
|
|
|
|
|
|
|
2018-06-03 22:00:42 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* FT_Matrix_Invert
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* Invert a 2x2 matrix. Return an error if it can't be inverted.
|
|
|
|
*
|
|
|
|
* @InOut:
|
|
|
|
* matrix ::
|
|
|
|
* A pointer to the target matrix. Remains untouched in
|
|
|
|
* case of error.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* FreeType error code. 0~means success.
|
|
|
|
*/
|
2001-06-28 09:17:51 +02:00
|
|
|
FT_EXPORT( FT_Error )
|
|
|
|
FT_Matrix_Invert( FT_Matrix* matrix );
|
2000-07-01 01:12:55 +02:00
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
|
|
|
|
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
FT_END_HEADER
|
2000-05-22 18:25:14 +02:00
|
|
|
|
2016-01-12 21:37:13 +01:00
|
|
|
#endif /* FTGLYPH_H_ */
|
2000-07-10 02:06:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|
2006-05-12 16:20:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* Local Variables: */
|
|
|
|
/* coding: utf-8 */
|
|
|
|
/* End: */
|