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)