Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/freetype2/freetype/ftglyph.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /****************************************************************************
0002  *
0003  * ftglyph.h
0004  *
0005  *   FreeType convenience functions to handle glyphs (specification).
0006  *
0007  * Copyright (C) 1996-2023 by
0008  * David Turner, Robert Wilhelm, and Werner Lemberg.
0009  *
0010  * This file is part of the FreeType project, and may only be used,
0011  * modified, and distributed under the terms of the FreeType project
0012  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
0013  * this file you indicate that you have read the license and
0014  * understand and accept it fully.
0015  *
0016  */
0017 
0018 
0019   /**************************************************************************
0020    *
0021    * This file contains the definition of several convenience functions that
0022    * can be used by client applications to easily retrieve glyph bitmaps and
0023    * outlines from a given face.
0024    *
0025    * These functions should be optional if you are writing a font server or
0026    * text layout engine on top of FreeType.  However, they are pretty handy
0027    * for many other simple uses of the library.
0028    *
0029    */
0030 
0031 
0032 #ifndef FTGLYPH_H_
0033 #define FTGLYPH_H_
0034 
0035 
0036 #include <freetype/freetype.h>
0037 
0038 #ifdef FREETYPE_H
0039 #error "freetype.h of FreeType 1 has been loaded!"
0040 #error "Please fix the directory search order for header files"
0041 #error "so that freetype.h of FreeType 2 is found first."
0042 #endif
0043 
0044 
0045 FT_BEGIN_HEADER
0046 
0047 
0048   /**************************************************************************
0049    *
0050    * @section:
0051    *   glyph_management
0052    *
0053    * @title:
0054    *   Glyph Management
0055    *
0056    * @abstract:
0057    *   Generic interface to manage individual glyph data.
0058    *
0059    * @description:
0060    *   This section contains definitions used to manage glyph data through
0061    *   generic @FT_Glyph objects.  Each of them can contain a bitmap,
0062    *   a vector outline, or even images in other formats.  These objects are
0063    *   detached from @FT_Face, contrary to @FT_GlyphSlot.
0064    *
0065    */
0066 
0067 
0068   /* forward declaration to a private type */
0069   typedef struct FT_Glyph_Class_  FT_Glyph_Class;
0070 
0071 
0072   /**************************************************************************
0073    *
0074    * @type:
0075    *   FT_Glyph
0076    *
0077    * @description:
0078    *   Handle to an object used to model generic glyph images.  It is a
0079    *   pointer to the @FT_GlyphRec structure and can contain a glyph bitmap
0080    *   or pointer.
0081    *
0082    * @note:
0083    *   Glyph objects are not owned by the library.  You must thus release
0084    *   them manually (through @FT_Done_Glyph) _before_ calling
0085    *   @FT_Done_FreeType.
0086    */
0087   typedef struct FT_GlyphRec_*  FT_Glyph;
0088 
0089 
0090   /**************************************************************************
0091    *
0092    * @struct:
0093    *   FT_GlyphRec
0094    *
0095    * @description:
0096    *   The root glyph structure contains a given glyph image plus its advance
0097    *   width in 16.16 fixed-point format.
0098    *
0099    * @fields:
0100    *   library ::
0101    *     A handle to the FreeType library object.
0102    *
0103    *   clazz ::
0104    *     A pointer to the glyph's class.  Private.
0105    *
0106    *   format ::
0107    *     The format of the glyph's image.
0108    *
0109    *   advance ::
0110    *     A 16.16 vector that gives the glyph's advance width.
0111    */
0112   typedef struct  FT_GlyphRec_
0113   {
0114     FT_Library             library;
0115     const FT_Glyph_Class*  clazz;
0116     FT_Glyph_Format        format;
0117     FT_Vector              advance;
0118 
0119   } FT_GlyphRec;
0120 
0121 
0122   /**************************************************************************
0123    *
0124    * @type:
0125    *   FT_BitmapGlyph
0126    *
0127    * @description:
0128    *   A handle to an object used to model a bitmap glyph image.  This is a
0129    *   'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
0130    */
0131   typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
0132 
0133 
0134   /**************************************************************************
0135    *
0136    * @struct:
0137    *   FT_BitmapGlyphRec
0138    *
0139    * @description:
0140    *   A structure used for bitmap glyph images.  This really is a
0141    *   'sub-class' of @FT_GlyphRec.
0142    *
0143    * @fields:
0144    *   root ::
0145    *     The root fields of @FT_Glyph.
0146    *
0147    *   left ::
0148    *     The left-side bearing, i.e., the horizontal distance from the
0149    *     current pen position to the left border of the glyph bitmap.
0150    *
0151    *   top ::
0152    *     The top-side bearing, i.e., the vertical distance from the current
0153    *     pen position to the top border of the glyph bitmap.  This distance
0154    *     is positive for upwards~y!
0155    *
0156    *   bitmap ::
0157    *     A descriptor for the bitmap.
0158    *
0159    * @note:
0160    *   You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have
0161    *   `glyph->format == FT_GLYPH_FORMAT_BITMAP`.  This lets you access the
0162    *   bitmap's contents easily.
0163    *
0164    *   The corresponding pixel buffer is always owned by @FT_BitmapGlyph and
0165    *   is thus created and destroyed with it.
0166    */
0167   typedef struct  FT_BitmapGlyphRec_
0168   {
0169     FT_GlyphRec  root;
0170     FT_Int       left;
0171     FT_Int       top;
0172     FT_Bitmap    bitmap;
0173 
0174   } FT_BitmapGlyphRec;
0175 
0176 
0177   /**************************************************************************
0178    *
0179    * @type:
0180    *   FT_OutlineGlyph
0181    *
0182    * @description:
0183    *   A handle to an object used to model an outline glyph image.  This is a
0184    *   'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
0185    */
0186   typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
0187 
0188 
0189   /**************************************************************************
0190    *
0191    * @struct:
0192    *   FT_OutlineGlyphRec
0193    *
0194    * @description:
0195    *   A structure used for outline (vectorial) glyph images.  This really is
0196    *   a 'sub-class' of @FT_GlyphRec.
0197    *
0198    * @fields:
0199    *   root ::
0200    *     The root @FT_Glyph fields.
0201    *
0202    *   outline ::
0203    *     A descriptor for the outline.
0204    *
0205    * @note:
0206    *   You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have
0207    *   `glyph->format == FT_GLYPH_FORMAT_OUTLINE`.  This lets you access the
0208    *   outline's content easily.
0209    *
0210    *   As the outline is extracted from a glyph slot, its coordinates are
0211    *   expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE
0212    *   was used in @FT_Load_Glyph or @FT_Load_Char.
0213    *
0214    *   The outline's tables are always owned by the object and are destroyed
0215    *   with it.
0216    */
0217   typedef struct  FT_OutlineGlyphRec_
0218   {
0219     FT_GlyphRec  root;
0220     FT_Outline   outline;
0221 
0222   } FT_OutlineGlyphRec;
0223 
0224 
0225   /**************************************************************************
0226    *
0227    * @type:
0228    *   FT_SvgGlyph
0229    *
0230    * @description:
0231    *   A handle to an object used to model an SVG glyph.  This is a
0232    *   'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec.
0233    *
0234    * @since:
0235    *   2.12
0236    */
0237   typedef struct FT_SvgGlyphRec_*  FT_SvgGlyph;
0238 
0239 
0240   /**************************************************************************
0241    *
0242    * @struct:
0243    *   FT_SvgGlyphRec
0244    *
0245    * @description:
0246    *   A structure used for OT-SVG glyphs.  This is a 'sub-class' of
0247    *   @FT_GlyphRec.
0248    *
0249    * @fields:
0250    *   root ::
0251    *     The root @FT_GlyphRec fields.
0252    *
0253    *   svg_document ::
0254    *     A pointer to the SVG document.
0255    *
0256    *   svg_document_length ::
0257    *     The length of `svg_document`.
0258    *
0259    *   glyph_index ::
0260    *     The index of the glyph to be rendered.
0261    *
0262    *   metrics ::
0263    *     A metrics object storing the size information.
0264    *
0265    *   units_per_EM ::
0266    *     The size of the EM square.
0267    *
0268    *   start_glyph_id ::
0269    *     The first glyph ID in the glyph range covered by this document.
0270    *
0271    *   end_glyph_id ::
0272    *     The last glyph ID in the glyph range covered by this document.
0273    *
0274    *   transform ::
0275    *     A 2x2 transformation matrix to apply to the glyph while rendering
0276    *     it.
0277    *
0278    *   delta ::
0279    *     Translation to apply to the glyph while rendering.
0280    *
0281    * @note:
0282    *   The Glyph Management API requires @FT_Glyph or its 'sub-class' to have
0283    *   all the information needed to completely define the glyph's rendering.
0284    *   Outline-based glyphs can directly apply transformations to the outline
0285    *   but this is not possible for an SVG document that hasn't been parsed.
0286    *   Therefore, the transformation is stored along with the document.  In
0287    *   the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of
0288    *   the ViewPort should be assumed to be 'units_per_EM'.
0289    */
0290   typedef struct  FT_SvgGlyphRec_
0291   {
0292     FT_GlyphRec  root;
0293 
0294     FT_Byte*  svg_document;
0295     FT_ULong  svg_document_length;
0296 
0297     FT_UInt  glyph_index;
0298 
0299     FT_Size_Metrics  metrics;
0300     FT_UShort        units_per_EM;
0301 
0302     FT_UShort  start_glyph_id;
0303     FT_UShort  end_glyph_id;
0304 
0305     FT_Matrix  transform;
0306     FT_Vector  delta;
0307 
0308   } FT_SvgGlyphRec;
0309 
0310 
0311   /**************************************************************************
0312    *
0313    * @function:
0314    *   FT_New_Glyph
0315    *
0316    * @description:
0317    *   A function used to create a new empty glyph image.  Note that the
0318    *   created @FT_Glyph object must be released with @FT_Done_Glyph.
0319    *
0320    * @input:
0321    *   library ::
0322    *     A handle to the FreeType library object.
0323    *
0324    *   format ::
0325    *     The format of the glyph's image.
0326    *
0327    * @output:
0328    *   aglyph ::
0329    *     A handle to the glyph object.
0330    *
0331    * @return:
0332    *   FreeType error code.  0~means success.
0333    *
0334    * @since:
0335    *   2.10
0336    */
0337   FT_EXPORT( FT_Error )
0338   FT_New_Glyph( FT_Library       library,
0339                 FT_Glyph_Format  format,
0340                 FT_Glyph         *aglyph );
0341 
0342 
0343   /**************************************************************************
0344    *
0345    * @function:
0346    *   FT_Get_Glyph
0347    *
0348    * @description:
0349    *   A function used to extract a glyph image from a slot.  Note that the
0350    *   created @FT_Glyph object must be released with @FT_Done_Glyph.
0351    *
0352    * @input:
0353    *   slot ::
0354    *     A handle to the source glyph slot.
0355    *
0356    * @output:
0357    *   aglyph ::
0358    *     A handle to the glyph object.  `NULL` in case of error.
0359    *
0360    * @return:
0361    *   FreeType error code.  0~means success.
0362    *
0363    * @note:
0364    *   Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16
0365    *   fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which
0366    *   are in 26.6 fixed-point format) must be in the range ]-32768;32768[.
0367    */
0368   FT_EXPORT( FT_Error )
0369   FT_Get_Glyph( FT_GlyphSlot  slot,
0370                 FT_Glyph     *aglyph );
0371 
0372 
0373   /**************************************************************************
0374    *
0375    * @function:
0376    *   FT_Glyph_Copy
0377    *
0378    * @description:
0379    *   A function used to copy a glyph image.  Note that the created
0380    *   @FT_Glyph object must be released with @FT_Done_Glyph.
0381    *
0382    * @input:
0383    *   source ::
0384    *     A handle to the source glyph object.
0385    *
0386    * @output:
0387    *   target ::
0388    *     A handle to the target glyph object.  `NULL` in case of error.
0389    *
0390    * @return:
0391    *   FreeType error code.  0~means success.
0392    */
0393   FT_EXPORT( FT_Error )
0394   FT_Glyph_Copy( FT_Glyph   source,
0395                  FT_Glyph  *target );
0396 
0397 
0398   /**************************************************************************
0399    *
0400    * @function:
0401    *   FT_Glyph_Transform
0402    *
0403    * @description:
0404    *   Transform a glyph image if its format is scalable.
0405    *
0406    * @inout:
0407    *   glyph ::
0408    *     A handle to the target glyph object.
0409    *
0410    * @input:
0411    *   matrix ::
0412    *     A pointer to a 2x2 matrix to apply.
0413    *
0414    *   delta ::
0415    *     A pointer to a 2d vector to apply.  Coordinates are expressed in
0416    *     1/64 of a pixel.
0417    *
0418    * @return:
0419    *   FreeType error code (if not 0, the glyph format is not scalable).
0420    *
0421    * @note:
0422    *   The 2x2 transformation matrix is also applied to the glyph's advance
0423    *   vector.
0424    */
0425   FT_EXPORT( FT_Error )
0426   FT_Glyph_Transform( FT_Glyph          glyph,
0427                       const FT_Matrix*  matrix,
0428                       const FT_Vector*  delta );
0429 
0430 
0431   /**************************************************************************
0432    *
0433    * @enum:
0434    *   FT_Glyph_BBox_Mode
0435    *
0436    * @description:
0437    *   The mode how the values of @FT_Glyph_Get_CBox are returned.
0438    *
0439    * @values:
0440    *   FT_GLYPH_BBOX_UNSCALED ::
0441    *     Return unscaled font units.
0442    *
0443    *   FT_GLYPH_BBOX_SUBPIXELS ::
0444    *     Return unfitted 26.6 coordinates.
0445    *
0446    *   FT_GLYPH_BBOX_GRIDFIT ::
0447    *     Return grid-fitted 26.6 coordinates.
0448    *
0449    *   FT_GLYPH_BBOX_TRUNCATE ::
0450    *     Return coordinates in integer pixels.
0451    *
0452    *   FT_GLYPH_BBOX_PIXELS ::
0453    *     Return grid-fitted pixel coordinates.
0454    */
0455   typedef enum  FT_Glyph_BBox_Mode_
0456   {
0457     FT_GLYPH_BBOX_UNSCALED  = 0,
0458     FT_GLYPH_BBOX_SUBPIXELS = 0,
0459     FT_GLYPH_BBOX_GRIDFIT   = 1,
0460     FT_GLYPH_BBOX_TRUNCATE  = 2,
0461     FT_GLYPH_BBOX_PIXELS    = 3
0462 
0463   } FT_Glyph_BBox_Mode;
0464 
0465 
0466   /* these constants are deprecated; use the corresponding */
0467   /* `FT_Glyph_BBox_Mode` values instead                   */
0468 #define ft_glyph_bbox_unscaled   FT_GLYPH_BBOX_UNSCALED
0469 #define ft_glyph_bbox_subpixels  FT_GLYPH_BBOX_SUBPIXELS
0470 #define ft_glyph_bbox_gridfit    FT_GLYPH_BBOX_GRIDFIT
0471 #define ft_glyph_bbox_truncate   FT_GLYPH_BBOX_TRUNCATE
0472 #define ft_glyph_bbox_pixels     FT_GLYPH_BBOX_PIXELS
0473 
0474 
0475   /**************************************************************************
0476    *
0477    * @function:
0478    *   FT_Glyph_Get_CBox
0479    *
0480    * @description:
0481    *   Return a glyph's 'control box'.  The control box encloses all the
0482    *   outline's points, including Bezier control points.  Though it
0483    *   coincides with the exact bounding box for most glyphs, it can be
0484    *   slightly larger in some situations (like when rotating an outline that
0485    *   contains Bezier outside arcs).
0486    *
0487    *   Computing the control box is very fast, while getting the bounding box
0488    *   can take much more time as it needs to walk over all segments and arcs
0489    *   in the outline.  To get the latter, you can use the 'ftbbox'
0490    *   component, which is dedicated to this single task.
0491    *
0492    * @input:
0493    *   glyph ::
0494    *     A handle to the source glyph object.
0495    *
0496    *   mode ::
0497    *     The mode that indicates how to interpret the returned bounding box
0498    *     values.
0499    *
0500    * @output:
0501    *   acbox ::
0502    *     The glyph coordinate bounding box.  Coordinates are expressed in
0503    *     1/64 of pixels if it is grid-fitted.
0504    *
0505    * @note:
0506    *   Coordinates are relative to the glyph origin, using the y~upwards
0507    *   convention.
0508    *
0509    *   If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must
0510    *   be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6
0511    *   pixel format.  The value @FT_GLYPH_BBOX_SUBPIXELS is another name for
0512    *   this constant.
0513    *
0514    *   If the font is tricky and the glyph has been loaded with
0515    *   @FT_LOAD_NO_SCALE, the resulting CBox is meaningless.  To get
0516    *   reasonable values for the CBox it is necessary to load the glyph at a
0517    *   large ppem value (so that the hinting instructions can properly shift
0518    *   and scale the subglyphs), then extracting the CBox, which can be
0519    *   eventually converted back to font units.
0520    *
0521    *   Note that the maximum coordinates are exclusive, which means that one
0522    *   can compute the width and height of the glyph image (be it in integer
0523    *   or 26.6 pixels) as:
0524    *
0525    *   ```
0526    *     width  = bbox.xMax - bbox.xMin;
0527    *     height = bbox.yMax - bbox.yMin;
0528    *   ```
0529    *
0530    *   Note also that for 26.6 coordinates, if `bbox_mode` is set to
0531    *   @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,
0532    *   which corresponds to:
0533    *
0534    *   ```
0535    *     bbox.xMin = FLOOR(bbox.xMin);
0536    *     bbox.yMin = FLOOR(bbox.yMin);
0537    *     bbox.xMax = CEILING(bbox.xMax);
0538    *     bbox.yMax = CEILING(bbox.yMax);
0539    *   ```
0540    *
0541    *   To get the bbox in pixel coordinates, set `bbox_mode` to
0542    *   @FT_GLYPH_BBOX_TRUNCATE.
0543    *
0544    *   To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to
0545    *   @FT_GLYPH_BBOX_PIXELS.
0546    */
0547   FT_EXPORT( void )
0548   FT_Glyph_Get_CBox( FT_Glyph  glyph,
0549                      FT_UInt   bbox_mode,
0550                      FT_BBox  *acbox );
0551 
0552 
0553   /**************************************************************************
0554    *
0555    * @function:
0556    *   FT_Glyph_To_Bitmap
0557    *
0558    * @description:
0559    *   Convert a given glyph object to a bitmap glyph object.
0560    *
0561    * @inout:
0562    *   the_glyph ::
0563    *     A pointer to a handle to the target glyph.
0564    *
0565    * @input:
0566    *   render_mode ::
0567    *     An enumeration that describes how the data is rendered.
0568    *
0569    *   origin ::
0570    *     A pointer to a vector used to translate the glyph image before
0571    *     rendering.  Can be~0 (if no translation).  The origin is expressed
0572    *     in 26.6 pixels.
0573    *
0574    *   destroy ::
0575    *     A boolean that indicates that the original glyph image should be
0576    *     destroyed by this function.  It is never destroyed in case of error.
0577    *
0578    * @return:
0579    *   FreeType error code.  0~means success.
0580    *
0581    * @note:
0582    *   This function does nothing if the glyph format isn't scalable.
0583    *
0584    *   The glyph image is translated with the `origin` vector before
0585    *   rendering.
0586    *
0587    *   The first parameter is a pointer to an @FT_Glyph handle that will be
0588    *   _replaced_ by this function (with newly allocated data).  Typically,
0589    *   you would do something like the following (omitting error handling).
0590    *
0591    *   ```
0592    *     FT_Glyph        glyph;
0593    *     FT_BitmapGlyph  glyph_bitmap;
0594    *
0595    *
0596    *     // load glyph
0597    *     error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT );
0598    *
0599    *     // extract glyph image
0600    *     error = FT_Get_Glyph( face->glyph, &glyph );
0601    *
0602    *     // convert to a bitmap (default render mode + destroying old)
0603    *     if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
0604    *     {
0605    *       error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
0606    *                                   0, 1 );
0607    *       if ( error ) // `glyph' unchanged
0608    *         ...
0609    *     }
0610    *
0611    *     // access bitmap content by typecasting
0612    *     glyph_bitmap = (FT_BitmapGlyph)glyph;
0613    *
0614    *     // do funny stuff with it, like blitting/drawing
0615    *     ...
0616    *
0617    *     // discard glyph image (bitmap or not)
0618    *     FT_Done_Glyph( glyph );
0619    *   ```
0620    *
0621    *   Here is another example, again without error handling.
0622    *
0623    *   ```
0624    *     FT_Glyph  glyphs[MAX_GLYPHS]
0625    *
0626    *
0627    *     ...
0628    *
0629    *     for ( idx = 0; i < MAX_GLYPHS; i++ )
0630    *       error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||
0631    *               FT_Get_Glyph ( face->glyph, &glyphs[idx] );
0632    *
0633    *     ...
0634    *
0635    *     for ( idx = 0; i < MAX_GLYPHS; i++ )
0636    *     {
0637    *       FT_Glyph  bitmap = glyphs[idx];
0638    *
0639    *
0640    *       ...
0641    *
0642    *       // after this call, `bitmap' no longer points into
0643    *       // the `glyphs' array (and the old value isn't destroyed)
0644    *       FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );
0645    *
0646    *       ...
0647    *
0648    *       FT_Done_Glyph( bitmap );
0649    *     }
0650    *
0651    *     ...
0652    *
0653    *     for ( idx = 0; i < MAX_GLYPHS; i++ )
0654    *       FT_Done_Glyph( glyphs[idx] );
0655    *   ```
0656    */
0657   FT_EXPORT( FT_Error )
0658   FT_Glyph_To_Bitmap( FT_Glyph*         the_glyph,
0659                       FT_Render_Mode    render_mode,
0660                       const FT_Vector*  origin,
0661                       FT_Bool           destroy );
0662 
0663 
0664   /**************************************************************************
0665    *
0666    * @function:
0667    *   FT_Done_Glyph
0668    *
0669    * @description:
0670    *   Destroy a given glyph.
0671    *
0672    * @input:
0673    *   glyph ::
0674    *     A handle to the target glyph object.  Can be `NULL`.
0675    */
0676   FT_EXPORT( void )
0677   FT_Done_Glyph( FT_Glyph  glyph );
0678 
0679   /* */
0680 
0681 
0682   /* other helpful functions */
0683 
0684   /**************************************************************************
0685    *
0686    * @section:
0687    *   computations
0688    *
0689    */
0690 
0691 
0692   /**************************************************************************
0693    *
0694    * @function:
0695    *   FT_Matrix_Multiply
0696    *
0697    * @description:
0698    *   Perform the matrix operation `b = a*b`.
0699    *
0700    * @input:
0701    *   a ::
0702    *     A pointer to matrix `a`.
0703    *
0704    * @inout:
0705    *   b ::
0706    *     A pointer to matrix `b`.
0707    *
0708    * @note:
0709    *   The result is undefined if either `a` or `b` is zero.
0710    *
0711    *   Since the function uses wrap-around arithmetic, results become
0712    *   meaningless if the arguments are very large.
0713    */
0714   FT_EXPORT( void )
0715   FT_Matrix_Multiply( const FT_Matrix*  a,
0716                       FT_Matrix*        b );
0717 
0718 
0719   /**************************************************************************
0720    *
0721    * @function:
0722    *   FT_Matrix_Invert
0723    *
0724    * @description:
0725    *   Invert a 2x2 matrix.  Return an error if it can't be inverted.
0726    *
0727    * @inout:
0728    *   matrix ::
0729    *     A pointer to the target matrix.  Remains untouched in case of error.
0730    *
0731    * @return:
0732    *   FreeType error code.  0~means success.
0733    */
0734   FT_EXPORT( FT_Error )
0735   FT_Matrix_Invert( FT_Matrix*  matrix );
0736 
0737   /* */
0738 
0739 
0740 FT_END_HEADER
0741 
0742 #endif /* FTGLYPH_H_ */
0743 
0744 
0745 /* END */
0746 
0747 
0748 /* Local Variables: */
0749 /* coding: utf-8    */
0750 /* End:             */