ftglyph.h revision ec0bab5697bb31ba980810145f62e3799946ec60
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***************************************************************************/
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*                                                                         */
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  ftglyph.h                                                              */
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*                                                                         */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*    FreeType convenience functions to handle glyphs (specification).     */
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*                                                                         */
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/*  Copyright 1996-2003, 2006, 2008, 2009, 2011, 2013 by                   */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/*                                                                         */
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  This file is part of the FreeType project, and may only be used,       */
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  modified, and distributed under the terms of the FreeType project      */
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
135e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)/*  this file you indicate that you have read the license and              */
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/*  understand and accept it fully.                                        */
155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)/*                                                                         */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/***************************************************************************/
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  /*                                                                       */
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* This file contains the definition of several convenience functions    */
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  /* that can be used by client applications to easily retrieve glyph      */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* bitmaps and outlines from a given face.                               */
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* These functions should be optional if you are writing a font server   */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* or text layout engine on top of FreeType.  However, they are pretty   */
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /* handy for many other simple uses of the library.                      */
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __FTGLYPH_H__
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define __FTGLYPH_H__
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <ft2build.h>
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include FT_FREETYPE_H
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifdef FREETYPE_H
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#error "freetype.h of FreeType 1 has been loaded!"
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#error "Please fix the directory search order for header files"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "so that freetype.h of FreeType 2 is found first."
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FT_BEGIN_HEADER
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Section>                                                             */
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    glyph_management                                                   */
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Title>                                                               */
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Glyph Management                                                   */
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Abstract>                                                            */
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Generic interface to manage individual glyph data.                 */
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    This section contains definitions used to manage glyph data        */
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    through generic FT_Glyph objects.  Each of them can contain a      */
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    bitmap, a vector outline, or even images in other formats.         */
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* forward declaration to a private type */
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct FT_Glyph_Class_  FT_Glyph_Class;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Type>                                                                */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Glyph                                                           */
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Handle to an object used to model generic glyph images.  It is a   */
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    pointer to the @FT_GlyphRec structure and can contain a glyph      */
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    bitmap or pointer.                                                 */
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Glyph objects are not owned by the library.  You must thus release */
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    them manually (through @FT_Done_Glyph) _before_ calling            */
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_Done_FreeType.                                                 */
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct FT_GlyphRec_*  FT_Glyph;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Struct>                                                              */
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GlyphRec                                                        */
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The root glyph structure contains a given glyph image plus its     */
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /*    advance width in 16.16 fixed-point format.                         */
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Fields>                                                              */
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    library :: A handle to the FreeType library object.                */
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    clazz   :: A pointer to the glyph's class.  Private.               */
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /*                                                                       */
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    format  :: The format of the glyph's image.                        */
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    advance :: A 16.16 vector that gives the glyph's advance width.    */
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct  FT_GlyphRec_
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Library             library;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FT_Glyph_Class*  clazz;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Glyph_Format        format;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Vector              advance;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } FT_GlyphRec;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Type>                                                                */
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_BitmapGlyph                                                     */
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    A handle to an object used to model a bitmap glyph image.  This is */
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.     */
126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /*                                                                       */
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Struct>                                                              */
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_BitmapGlyphRec                                                  */
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    A structure used for bitmap glyph images.  This really is a        */
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    `sub-class' of @FT_GlyphRec.                                       */
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Fields>                                                              */
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    root   :: The root @FT_Glyph fields.                               */
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    left   :: The left-side bearing, i.e., the horizontal distance     */
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*              from the current pen position to the left border of the  */
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*              glyph bitmap.                                            */
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /*    top    :: The top-side bearing, i.e., the vertical distance from   */
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*              the current pen position to the top border of the glyph  */
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*              bitmap.  This distance is positive for upwards~y!        */
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    bitmap :: A descriptor for the bitmap.                             */
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have       */
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    `glyph->format == FT_GLYPH_FORMAT_BITMAP'.  This lets you access   */
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    the bitmap's contents easily.                                      */
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The corresponding pixel buffer is always owned by @FT_BitmapGlyph  */
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    and is thus created and destroyed with it.                         */
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct  FT_BitmapGlyphRec_
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GlyphRec  root;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Int       left;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Int       top;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Bitmap    bitmap;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } FT_BitmapGlyphRec;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Type>                                                                */
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_OutlineGlyph                                                    */
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    A handle to an object used to model an outline glyph image.  This  */
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Struct>                                                              */
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_OutlineGlyphRec                                                 */
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    A structure used for outline (vectorial) glyph images.  This       */
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    really is a `sub-class' of @FT_GlyphRec.                           */
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Fields>                                                              */
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    root    :: The root @FT_Glyph fields.                              */
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    outline :: A descriptor for the outline.                           */
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have      */
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    `glyph->format == FT_GLYPH_FORMAT_OUTLINE'.  This lets you access  */
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    the outline's content easily.                                      */
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    As the outline is extracted from a glyph slot, its coordinates are */
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    expressed normally in 26.6 pixels, unless the flag                 */
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The outline's tables are always owned by the object and are        */
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    destroyed with it.                                                 */
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef struct  FT_OutlineGlyphRec_
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FT_GlyphRec  root;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_Outline   outline;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } FT_OutlineGlyphRec;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Get_Glyph                                                       */
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    A function used to extract a glyph image from a slot.  Note that   */
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    the created @FT_Glyph object must be released with @FT_Done_Glyph. */
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Input>                                                               */
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    slot   :: A handle to the source glyph slot.                       */
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Output>                                                              */
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    aglyph :: A handle to the glyph object.                            */
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Return>                                                              */
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FreeType error code.  0~means success.                             */
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( FT_Error )
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Get_Glyph( FT_GlyphSlot  slot,
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                FT_Glyph     *aglyph );
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*************************************************************************/
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Function>                                                            */
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    FT_Glyph_Copy                                                      */
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Description>                                                         */
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    A function used to copy a glyph image.  Note that the created      */
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    @FT_Glyph object must be released with @FT_Done_Glyph.             */
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /* <Input>                                                               */
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    source :: A handle to the source glyph object.                     */
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Output>                                                              */
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    target :: A handle to the target glyph object.  0~in case of       */
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*              error.                                                   */
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Return>                                                              */
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FreeType error code.  0~means success.                             */
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FT_EXPORT( FT_Error )
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Glyph_Copy( FT_Glyph   source,
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 FT_Glyph  *target );
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Glyph_Transform                                                 */
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Transform a glyph image if its format is scalable.                 */
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <InOut>                                                               */
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /*    glyph  :: A handle to the target glyph object.                     */
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /* <Input>                                                               */
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    matrix :: A pointer to a 2x2 matrix to apply.                      */
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /*                                                                       */
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    delta  :: A pointer to a 2d vector to apply.  Coordinates are      */
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*              expressed in 1/64th of a pixel.                          */
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Return>                                                              */
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FreeType error code (if not 0, the glyph format is not scalable).  */
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The 2x2 transformation matrix is also applied to the glyph's       */
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    advance vector.                                                    */
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( FT_Error )
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Glyph_Transform( FT_Glyph    glyph,
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      FT_Matrix*  matrix,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      FT_Vector*  delta );
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*************************************************************************/
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Enum>                                                                */
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Glyph_BBox_Mode                                                 */
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The mode how the values of @FT_Glyph_Get_CBox are returned.        */
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Values>                                                              */
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GLYPH_BBOX_UNSCALED ::                                          */
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*      Return unscaled font units.                                      */
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GLYPH_BBOX_SUBPIXELS ::                                         */
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      Return unfitted 26.6 coordinates.                                */
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GLYPH_BBOX_GRIDFIT ::                                           */
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      Return grid-fitted 26.6 coordinates.                             */
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GLYPH_BBOX_TRUNCATE ::                                          */
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      Return coordinates in integer pixels.                            */
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_GLYPH_BBOX_PIXELS ::                                            */
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*      Return grid-fitted pixel coordinates.                            */
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef enum  FT_Glyph_BBox_Mode_
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GLYPH_BBOX_UNSCALED  = 0,
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GLYPH_BBOX_SUBPIXELS = 0,
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GLYPH_BBOX_GRIDFIT   = 1,
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GLYPH_BBOX_TRUNCATE  = 2,
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FT_GLYPH_BBOX_PIXELS    = 3
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } FT_Glyph_BBox_Mode;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Enum>                                                                */
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    ft_glyph_bbox_xxx                                                  */
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /* <Description>                                                         */
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    These constants are deprecated.  Use the corresponding             */
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_Glyph_BBox_Mode values instead.                                */
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Values>                                                              */
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*   ft_glyph_bbox_unscaled  :: See @FT_GLYPH_BBOX_UNSCALED.             */
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*   ft_glyph_bbox_subpixels :: See @FT_GLYPH_BBOX_SUBPIXELS.            */
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*   ft_glyph_bbox_gridfit   :: See @FT_GLYPH_BBOX_GRIDFIT.              */
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*   ft_glyph_bbox_truncate  :: See @FT_GLYPH_BBOX_TRUNCATE.             */
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*   ft_glyph_bbox_pixels    :: See @FT_GLYPH_BBOX_PIXELS.               */
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ft_glyph_bbox_unscaled   FT_GLYPH_BBOX_UNSCALED
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ft_glyph_bbox_subpixels  FT_GLYPH_BBOX_SUBPIXELS
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ft_glyph_bbox_gridfit    FT_GLYPH_BBOX_GRIDFIT
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ft_glyph_bbox_truncate   FT_GLYPH_BBOX_TRUNCATE
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ft_glyph_bbox_pixels     FT_GLYPH_BBOX_PIXELS
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Function>                                                            */
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    FT_Glyph_Get_CBox                                                  */
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Description>                                                         */
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /*    Return a glyph's `control box'.  The control box encloses all the  */
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    outline's points, including Bézier control points.  Though it      */
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    coincides with the exact bounding box for most glyphs, it can be   */
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    slightly larger in some situations (like when rotating an outline  */
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    that contains Bézier outside arcs).                                */
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Computing the control box is very fast, while getting the bounding */
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    box can take much more time as it needs to walk over all segments  */
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    and arcs in the outline.  To get the latter, you can use the       */
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    `ftbbox' component, which is dedicated to this single task.        */
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Input>                                                               */
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    glyph :: A handle to the source glyph object.                      */
370a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  /*                                                                       */
371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /*    mode  :: The mode that indicates how to interpret the returned     */
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*             bounding box values.                                      */
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  /* <Output>                                                              */
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    acbox :: The glyph coordinate bounding box.  Coordinates are       */
376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /*             expressed in 1/64th of pixels if it is grid-fitted.       */
377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /*                                                                       */
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Coordinates are relative to the glyph origin, using the y~upwards  */
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    convention.                                                        */
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode'   */
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font        */
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    units in 26.6 pixel format.  The value @FT_GLYPH_BBOX_SUBPIXELS    */
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    is another name for this constant.                                 */
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    If the font is tricky and the glyph has been loaded with           */
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_LOAD_NO_SCALE, the resulting CBox is meaningless.  To get      */
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    reasonable values for the CBox it is necessary to load the glyph   */
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    at a large ppem value (so that the hinting instructions can        */
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    properly shift and scale the subglyphs), then extracting the CBox, */
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    which can be eventually converted back to font units.              */
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    Note that the maximum coordinates are exclusive, which means that  */
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    one can compute the width and height of the glyph image (be it in  */
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    integer or 26.6 pixels) as:                                        */
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    {                                                                  */
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      width  = bbox.xMax - bbox.xMin;                                  */
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      height = bbox.yMax - bbox.yMin;                                  */
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    }                                                                  */
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Note also that for 26.6 coordinates, if `bbox_mode' is set to      */
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,  */
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    which corresponds to:                                              */
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    {                                                                  */
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*      bbox.xMin = FLOOR(bbox.xMin);                                    */
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*      bbox.yMin = FLOOR(bbox.yMin);                                    */
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*      bbox.xMax = CEILING(bbox.xMax);                                  */
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      bbox.yMax = CEILING(bbox.yMax);                                  */
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    }                                                                  */
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    To get the bbox in pixel coordinates, set `bbox_mode' to           */
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    @FT_GLYPH_BBOX_TRUNCATE.                                           */
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    To get the bbox in grid-fitted pixel coordinates, set `bbox_mode'  */
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    to @FT_GLYPH_BBOX_PIXELS.                                          */
419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  /*                                                                       */
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( void )
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Glyph_Get_CBox( FT_Glyph  glyph,
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     FT_UInt   bbox_mode,
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     FT_BBox  *acbox );
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Glyph_To_Bitmap                                                 */
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /* <Description>                                                         */
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Convert a given glyph object to a bitmap glyph object.             */
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <InOut>                                                               */
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    the_glyph   :: A pointer to a handle to the target glyph.          */
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Input>                                                               */
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    render_mode :: An enumeration that describes how the data is       */
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                   rendered.                                           */
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    origin      :: A pointer to a vector used to translate the glyph   */
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                   image before rendering.  Can be~0 (if no            */
4434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  /*                   translation).  The origin is expressed in           */
444a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  /*                   26.6 pixels.                                        */
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    destroy     :: A boolean that indicates that the original glyph    */
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                   image should be destroyed by this function.  It is  */
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                   never destroyed in case of error.                   */
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Return>                                                              */
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FreeType error code.  0~means success.                             */
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /* <Note>                                                                */
4545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  /*    This function does nothing if the glyph format isn't scalable.     */
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The glyph image is translated with the `origin' vector before      */
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    rendering.                                                         */
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The first parameter is a pointer to an @FT_Glyph handle, that will */
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    be _replaced_ by this function (with newly allocated data).        */
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Typically, you would use (omitting error handling):                */
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      {                                                                */
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        FT_Glyph        glyph;                                         */
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        FT_BitmapGlyph  glyph_bitmap;                                  */
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // load glyph                                                  */
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT );     */
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // extract glyph image                                         */
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        error = FT_Get_Glyph( face->glyph, &glyph );                   */
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // convert to a bitmap (default render mode + destroying old)  */
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )                 */
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        {                                                              */
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,   */
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                      0, 1 );                          */
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          if ( error ) // `glyph' unchanged                            */
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*            ...                                                        */
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        }                                                              */
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // access bitmap content by typecasting                        */
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        glyph_bitmap = (FT_BitmapGlyph)glyph;                          */
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // do funny stuff with it, like blitting/drawing               */
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        ...                                                            */
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        // discard glyph image (bitmap or not)                         */
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        FT_Done_Glyph( glyph );                                        */
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      }                                                                */
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*                                                                       */
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    Here another example, again without error handling:                */
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      {                                                                */
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        FT_Glyph  glyphs[MAX_GLYPHS]                                   */
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        ...                                                            */
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||       */
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                  FT_Get_Glyph ( face->glyph, &glyph[idx] );           */
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        ...                                                            */
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        {                                                              */
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*          FT_Glyph  bitmap = glyphs[idx];                              */
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          ...                                                          */
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          // after this call, `bitmap' no longer points into           */
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          // the `glyphs' array (and the old value isn't destroyed)    */
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );    */
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          ...                                                          */
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*          FT_Done_Glyph( bitmap );                                     */
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        }                                                              */
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*        ...                                                            */
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*          FT_Done_Glyph( glyphs[idx] );                                */
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*      }                                                                */
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( FT_Error )
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      FT_Render_Mode  render_mode,
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      FT_Vector*      origin,
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      FT_Bool         destroy );
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*************************************************************************/
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Done_Glyph                                                      */
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Destroy a given glyph.                                             */
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Input>                                                               */
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    glyph :: A handle to the target glyph object.                      */
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( void )
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Done_Glyph( FT_Glyph  glyph );
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* */
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* other helpful functions */
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Section>                                                             */
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    computations                                                       */
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Matrix_Multiply                                                 */
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    Perform the matrix operation `b = a*b'.                            */
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Input>                                                               */
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    a :: A pointer to matrix `a'.                                      */
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <InOut>                                                               */
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    b :: A pointer to matrix `b'.                                      */
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Note>                                                                */
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    The result is undefined if either `a' or `b' is zero.              */
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( void )
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Matrix_Multiply( const FT_Matrix*  a,
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      FT_Matrix*        b );
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*************************************************************************/
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Function>                                                            */
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FT_Matrix_Invert                                                   */
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Description>                                                         */
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /*    Invert a 2x2 matrix.  Return an error if it can't be inverted.     */
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /* <InOut>                                                               */
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    matrix :: A pointer to the target matrix.  Remains untouched in    */
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*              case of error.                                           */
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* <Return>                                                              */
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*    FreeType error code.  0~means success.                             */
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*                                                                       */
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_EXPORT( FT_Error )
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FT_Matrix_Invert( FT_Matrix*  matrix );
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* */
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FT_END_HEADER
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* __FTGLYPH_H__ */
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* END */
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Local Variables: */
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* coding: utf-8    */
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* End:             */
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)