1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* freetype.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* FreeType high-level API and common types (specification only). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 1996-2001, 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #ifndef __FREETYPE_H__ 20*37da2899SCharles.Forsyth #define __FREETYPE_H__ 21*37da2899SCharles.Forsyth #pragma incomplete _off_ /* it's too hard */ 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth /*************************************************************************/ 25*37da2899SCharles.Forsyth /* */ 26*37da2899SCharles.Forsyth /* The `raster' component duplicates some of the declarations in */ 27*37da2899SCharles.Forsyth /* freetype.h for stand-alone use if _FREETYPE_ isn't defined. */ 28*37da2899SCharles.Forsyth /* */ 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth /*************************************************************************/ 32*37da2899SCharles.Forsyth /* */ 33*37da2899SCharles.Forsyth /* The FREETYPE_MAJOR and FREETYPE_MINOR macros are used to version the */ 34*37da2899SCharles.Forsyth /* new FreeType design, which is able to host several kinds of font */ 35*37da2899SCharles.Forsyth /* drivers. It starts at 2.0. */ 36*37da2899SCharles.Forsyth /* */ 37*37da2899SCharles.Forsyth #define FREETYPE_MAJOR 2 38*37da2899SCharles.Forsyth #define FREETYPE_MINOR 1 39*37da2899SCharles.Forsyth #define FREETYPE_PATCH 3 40*37da2899SCharles.Forsyth 41*37da2899SCharles.Forsyth 42*37da2899SCharles.Forsyth #include <ft2build.h> 43*37da2899SCharles.Forsyth #include FT_CONFIG_CONFIG_H 44*37da2899SCharles.Forsyth #include FT_ERRORS_H 45*37da2899SCharles.Forsyth #include FT_TYPES_H 46*37da2899SCharles.Forsyth 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth FT_BEGIN_HEADER 49*37da2899SCharles.Forsyth 50*37da2899SCharles.Forsyth 51*37da2899SCharles.Forsyth /*************************************************************************/ 52*37da2899SCharles.Forsyth /*************************************************************************/ 53*37da2899SCharles.Forsyth /* */ 54*37da2899SCharles.Forsyth /* B A S I C T Y P E S */ 55*37da2899SCharles.Forsyth /* */ 56*37da2899SCharles.Forsyth /*************************************************************************/ 57*37da2899SCharles.Forsyth /*************************************************************************/ 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth 60*37da2899SCharles.Forsyth /*************************************************************************/ 61*37da2899SCharles.Forsyth /* */ 62*37da2899SCharles.Forsyth /* <Section> */ 63*37da2899SCharles.Forsyth /* base_interface */ 64*37da2899SCharles.Forsyth /* */ 65*37da2899SCharles.Forsyth /* <Title> */ 66*37da2899SCharles.Forsyth /* Base Interface */ 67*37da2899SCharles.Forsyth /* */ 68*37da2899SCharles.Forsyth /* <Abstract> */ 69*37da2899SCharles.Forsyth /* The FreeType 2 base font interface. */ 70*37da2899SCharles.Forsyth /* */ 71*37da2899SCharles.Forsyth /* <Description> */ 72*37da2899SCharles.Forsyth /* This section describes the public high-level API of FreeType 2. */ 73*37da2899SCharles.Forsyth /* */ 74*37da2899SCharles.Forsyth /* <Order> */ 75*37da2899SCharles.Forsyth /* FT_Library */ 76*37da2899SCharles.Forsyth /* FT_Face */ 77*37da2899SCharles.Forsyth /* FT_Size */ 78*37da2899SCharles.Forsyth /* FT_GlyphSlot */ 79*37da2899SCharles.Forsyth /* FT_CharMap */ 80*37da2899SCharles.Forsyth /* FT_Encoding */ 81*37da2899SCharles.Forsyth /* */ 82*37da2899SCharles.Forsyth /* FT_FaceRec */ 83*37da2899SCharles.Forsyth /* */ 84*37da2899SCharles.Forsyth /* FT_FACE_FLAG_SCALABLE */ 85*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FIXED_SIZES */ 86*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FIXED_WIDTH */ 87*37da2899SCharles.Forsyth /* FT_FACE_FLAG_HORIZONTAL */ 88*37da2899SCharles.Forsyth /* FT_FACE_FLAG_VERTICAL */ 89*37da2899SCharles.Forsyth /* FT_FACE_FLAG_SFNT */ 90*37da2899SCharles.Forsyth /* FT_FACE_FLAG_KERNING */ 91*37da2899SCharles.Forsyth /* FT_FACE_FLAG_MULTIPLE_MASTERS */ 92*37da2899SCharles.Forsyth /* FT_FACE_FLAG_GLYPH_NAMES */ 93*37da2899SCharles.Forsyth /* FT_FACE_FLAG_EXTERNAL_STREAM */ 94*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FAST_GLYPHS */ 95*37da2899SCharles.Forsyth /* */ 96*37da2899SCharles.Forsyth /* FT_STYLE_FLAG_BOLD */ 97*37da2899SCharles.Forsyth /* FT_STYLE_FLAG_ITALIC */ 98*37da2899SCharles.Forsyth /* */ 99*37da2899SCharles.Forsyth /* FT_SizeRec */ 100*37da2899SCharles.Forsyth /* FT_Size_Metrics */ 101*37da2899SCharles.Forsyth /* */ 102*37da2899SCharles.Forsyth /* FT_GlyphSlotRec */ 103*37da2899SCharles.Forsyth /* FT_Glyph_Metrics */ 104*37da2899SCharles.Forsyth /* FT_SubGlyph */ 105*37da2899SCharles.Forsyth /* */ 106*37da2899SCharles.Forsyth /* FT_Bitmap_Size */ 107*37da2899SCharles.Forsyth /* */ 108*37da2899SCharles.Forsyth /* FT_Init_FreeType */ 109*37da2899SCharles.Forsyth /* FT_Done_FreeType */ 110*37da2899SCharles.Forsyth /* FT_Library_Version */ 111*37da2899SCharles.Forsyth /* */ 112*37da2899SCharles.Forsyth /* FT_New_Face */ 113*37da2899SCharles.Forsyth /* FT_Done_Face */ 114*37da2899SCharles.Forsyth /* FT_New_Memory_Face */ 115*37da2899SCharles.Forsyth /* FT_Open_Face */ 116*37da2899SCharles.Forsyth /* FT_Open_Args */ 117*37da2899SCharles.Forsyth /* FT_Open_Flags */ 118*37da2899SCharles.Forsyth /* FT_Parameter */ 119*37da2899SCharles.Forsyth /* FT_Attach_File */ 120*37da2899SCharles.Forsyth /* FT_Attach_Stream */ 121*37da2899SCharles.Forsyth /* */ 122*37da2899SCharles.Forsyth /* FT_Set_Char_Size */ 123*37da2899SCharles.Forsyth /* FT_Set_Pixel_Sizes */ 124*37da2899SCharles.Forsyth /* FT_Set_Transform */ 125*37da2899SCharles.Forsyth /* FT_Load_Glyph */ 126*37da2899SCharles.Forsyth /* FT_Get_Char_Index */ 127*37da2899SCharles.Forsyth /* FT_Get_Name_Index */ 128*37da2899SCharles.Forsyth /* FT_Load_Char */ 129*37da2899SCharles.Forsyth /* */ 130*37da2899SCharles.Forsyth /* FT_LOAD_DEFAULT */ 131*37da2899SCharles.Forsyth /* FT_LOAD_RENDER */ 132*37da2899SCharles.Forsyth /* FT_LOAD_MONOCHROME */ 133*37da2899SCharles.Forsyth /* FT_LOAD_LINEAR_DESIGN */ 134*37da2899SCharles.Forsyth /* FT_LOAD_NO_SCALE */ 135*37da2899SCharles.Forsyth /* FT_LOAD_NO_HINTING */ 136*37da2899SCharles.Forsyth /* FT_LOAD_NO_BITMAP */ 137*37da2899SCharles.Forsyth /* FT_LOAD_CROP_BITMAP */ 138*37da2899SCharles.Forsyth /* */ 139*37da2899SCharles.Forsyth /* FT_LOAD_VERTICAL_LAYOUT */ 140*37da2899SCharles.Forsyth /* FT_LOAD_IGNORE_TRANSFORM */ 141*37da2899SCharles.Forsyth /* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */ 142*37da2899SCharles.Forsyth /* FT_LOAD_FORCE_AUTOHINT */ 143*37da2899SCharles.Forsyth /* FT_LOAD_NO_RECURSE */ 144*37da2899SCharles.Forsyth /* FT_LOAD_PEDANTIC */ 145*37da2899SCharles.Forsyth /* */ 146*37da2899SCharles.Forsyth /* FT_Render_Glyph */ 147*37da2899SCharles.Forsyth /* FT_Render_Mode */ 148*37da2899SCharles.Forsyth /* FT_Get_Kerning */ 149*37da2899SCharles.Forsyth /* FT_Kerning_Mode */ 150*37da2899SCharles.Forsyth /* FT_Get_Glyph_Name */ 151*37da2899SCharles.Forsyth /* FT_Get_Postscript_Name */ 152*37da2899SCharles.Forsyth /* */ 153*37da2899SCharles.Forsyth /* FT_CharMapRec */ 154*37da2899SCharles.Forsyth /* FT_Select_Charmap */ 155*37da2899SCharles.Forsyth /* FT_Set_Charmap */ 156*37da2899SCharles.Forsyth /* */ 157*37da2899SCharles.Forsyth /*************************************************************************/ 158*37da2899SCharles.Forsyth 159*37da2899SCharles.Forsyth 160*37da2899SCharles.Forsyth /*************************************************************************/ 161*37da2899SCharles.Forsyth /* */ 162*37da2899SCharles.Forsyth /* <Struct> */ 163*37da2899SCharles.Forsyth /* FT_Glyph_Metrics */ 164*37da2899SCharles.Forsyth /* */ 165*37da2899SCharles.Forsyth /* <Description> */ 166*37da2899SCharles.Forsyth /* A structure used to model the metrics of a single glyph. Note */ 167*37da2899SCharles.Forsyth /* that values are expressed in 26.6 fractional pixel format or in */ 168*37da2899SCharles.Forsyth /* font units, depending on context. */ 169*37da2899SCharles.Forsyth /* */ 170*37da2899SCharles.Forsyth /* <Fields> */ 171*37da2899SCharles.Forsyth /* width :: The glyph's width. */ 172*37da2899SCharles.Forsyth /* */ 173*37da2899SCharles.Forsyth /* height :: The glyph's height. */ 174*37da2899SCharles.Forsyth /* */ 175*37da2899SCharles.Forsyth /* horiBearingX :: Horizontal left side bearing. */ 176*37da2899SCharles.Forsyth /* */ 177*37da2899SCharles.Forsyth /* horiBearingY :: Horizontal top side bearing. */ 178*37da2899SCharles.Forsyth /* */ 179*37da2899SCharles.Forsyth /* horiAdvance :: Horizontal advance width. */ 180*37da2899SCharles.Forsyth /* */ 181*37da2899SCharles.Forsyth /* vertBearingX :: Vertical left side bearing. */ 182*37da2899SCharles.Forsyth /* */ 183*37da2899SCharles.Forsyth /* vertBearingY :: Vertical top side bearing. */ 184*37da2899SCharles.Forsyth /* */ 185*37da2899SCharles.Forsyth /* vertAdvance :: Vertical advance height. */ 186*37da2899SCharles.Forsyth /* */ 187*37da2899SCharles.Forsyth typedef struct FT_Glyph_Metrics_ 188*37da2899SCharles.Forsyth { 189*37da2899SCharles.Forsyth FT_Pos width; /* glyph width */ 190*37da2899SCharles.Forsyth FT_Pos height; /* glyph height */ 191*37da2899SCharles.Forsyth 192*37da2899SCharles.Forsyth FT_Pos horiBearingX; /* left side bearing in horizontal layouts */ 193*37da2899SCharles.Forsyth FT_Pos horiBearingY; /* top side bearing in horizontal layouts */ 194*37da2899SCharles.Forsyth FT_Pos horiAdvance; /* advance width for horizontal layout */ 195*37da2899SCharles.Forsyth 196*37da2899SCharles.Forsyth FT_Pos vertBearingX; /* left side bearing in vertical layouts */ 197*37da2899SCharles.Forsyth FT_Pos vertBearingY; /* top side bearing in vertical layouts */ 198*37da2899SCharles.Forsyth FT_Pos vertAdvance; /* advance height for vertical layout */ 199*37da2899SCharles.Forsyth 200*37da2899SCharles.Forsyth } FT_Glyph_Metrics; 201*37da2899SCharles.Forsyth 202*37da2899SCharles.Forsyth 203*37da2899SCharles.Forsyth /*************************************************************************/ 204*37da2899SCharles.Forsyth /* */ 205*37da2899SCharles.Forsyth /* <Struct> */ 206*37da2899SCharles.Forsyth /* FT_Bitmap_Size */ 207*37da2899SCharles.Forsyth /* */ 208*37da2899SCharles.Forsyth /* <Description> */ 209*37da2899SCharles.Forsyth /* An extremely simple structure used to model the size of a bitmap */ 210*37da2899SCharles.Forsyth /* strike (i.e., a bitmap instance of the font for a given */ 211*37da2899SCharles.Forsyth /* resolution) in a fixed-size font face. This is used for the */ 212*37da2899SCharles.Forsyth /* `available_sizes' field of the FT_Face_Properties structure. */ 213*37da2899SCharles.Forsyth /* */ 214*37da2899SCharles.Forsyth /* <Fields> */ 215*37da2899SCharles.Forsyth /* height :: The character height in pixels. */ 216*37da2899SCharles.Forsyth /* */ 217*37da2899SCharles.Forsyth /* width :: The character width in pixels. */ 218*37da2899SCharles.Forsyth /* */ 219*37da2899SCharles.Forsyth typedef struct FT_Bitmap_Size_ 220*37da2899SCharles.Forsyth { 221*37da2899SCharles.Forsyth FT_Short height; 222*37da2899SCharles.Forsyth FT_Short width; 223*37da2899SCharles.Forsyth 224*37da2899SCharles.Forsyth } FT_Bitmap_Size; 225*37da2899SCharles.Forsyth 226*37da2899SCharles.Forsyth 227*37da2899SCharles.Forsyth /*************************************************************************/ 228*37da2899SCharles.Forsyth /*************************************************************************/ 229*37da2899SCharles.Forsyth /* */ 230*37da2899SCharles.Forsyth /* O B J E C T C L A S S E S */ 231*37da2899SCharles.Forsyth /* */ 232*37da2899SCharles.Forsyth /*************************************************************************/ 233*37da2899SCharles.Forsyth /*************************************************************************/ 234*37da2899SCharles.Forsyth 235*37da2899SCharles.Forsyth /*************************************************************************/ 236*37da2899SCharles.Forsyth /* */ 237*37da2899SCharles.Forsyth /* <Type> */ 238*37da2899SCharles.Forsyth /* FT_Library */ 239*37da2899SCharles.Forsyth /* */ 240*37da2899SCharles.Forsyth /* <Description> */ 241*37da2899SCharles.Forsyth /* A handle to a FreeType library instance. Each `library' is */ 242*37da2899SCharles.Forsyth /* completely independent from the others; it is the `root' of a set */ 243*37da2899SCharles.Forsyth /* of objects like fonts, faces, sizes, etc. */ 244*37da2899SCharles.Forsyth /* */ 245*37da2899SCharles.Forsyth /* It also embeds a memory manager (see @FT_Memory), as well as a */ 246*37da2899SCharles.Forsyth /* scan-line converter object (see @FT_Raster). */ 247*37da2899SCharles.Forsyth /* */ 248*37da2899SCharles.Forsyth /* <Note> */ 249*37da2899SCharles.Forsyth /* Library objects are normally created by @FT_Init_FreeType, and */ 250*37da2899SCharles.Forsyth /* destroyed with @FT_Done_FreeType. */ 251*37da2899SCharles.Forsyth /* */ 252*37da2899SCharles.Forsyth typedef struct FT_LibraryRec_ *FT_Library; 253*37da2899SCharles.Forsyth 254*37da2899SCharles.Forsyth 255*37da2899SCharles.Forsyth /*************************************************************************/ 256*37da2899SCharles.Forsyth /* */ 257*37da2899SCharles.Forsyth /* <Type> */ 258*37da2899SCharles.Forsyth /* FT_Module */ 259*37da2899SCharles.Forsyth /* */ 260*37da2899SCharles.Forsyth /* <Description> */ 261*37da2899SCharles.Forsyth /* A handle to a given FreeType module object. Each module can be a */ 262*37da2899SCharles.Forsyth /* font driver, a renderer, or anything else that provides services */ 263*37da2899SCharles.Forsyth /* to the formers. */ 264*37da2899SCharles.Forsyth /* */ 265*37da2899SCharles.Forsyth typedef struct FT_ModuleRec_* FT_Module; 266*37da2899SCharles.Forsyth 267*37da2899SCharles.Forsyth 268*37da2899SCharles.Forsyth /*************************************************************************/ 269*37da2899SCharles.Forsyth /* */ 270*37da2899SCharles.Forsyth /* <Type> */ 271*37da2899SCharles.Forsyth /* FT_Driver */ 272*37da2899SCharles.Forsyth /* */ 273*37da2899SCharles.Forsyth /* <Description> */ 274*37da2899SCharles.Forsyth /* A handle to a given FreeType font driver object. Each font driver */ 275*37da2899SCharles.Forsyth /* is a special module capable of creating faces from font files. */ 276*37da2899SCharles.Forsyth /* */ 277*37da2899SCharles.Forsyth typedef struct FT_DriverRec_* FT_Driver; 278*37da2899SCharles.Forsyth 279*37da2899SCharles.Forsyth 280*37da2899SCharles.Forsyth /*************************************************************************/ 281*37da2899SCharles.Forsyth /* */ 282*37da2899SCharles.Forsyth /* <Type> */ 283*37da2899SCharles.Forsyth /* FT_Renderer */ 284*37da2899SCharles.Forsyth /* */ 285*37da2899SCharles.Forsyth /* <Description> */ 286*37da2899SCharles.Forsyth /* A handle to a given FreeType renderer. A renderer is a special */ 287*37da2899SCharles.Forsyth /* module in charge of converting a glyph image to a bitmap, when */ 288*37da2899SCharles.Forsyth /* necessary. Each renderer supports a given glyph image format, and */ 289*37da2899SCharles.Forsyth /* one or more target surface depths. */ 290*37da2899SCharles.Forsyth /* */ 291*37da2899SCharles.Forsyth typedef struct FT_RendererRec_* FT_Renderer; 292*37da2899SCharles.Forsyth 293*37da2899SCharles.Forsyth 294*37da2899SCharles.Forsyth /*************************************************************************/ 295*37da2899SCharles.Forsyth /* */ 296*37da2899SCharles.Forsyth /* <Type> */ 297*37da2899SCharles.Forsyth /* FT_Face */ 298*37da2899SCharles.Forsyth /* */ 299*37da2899SCharles.Forsyth /* <Description> */ 300*37da2899SCharles.Forsyth /* A handle to a given typographic face object. A face object models */ 301*37da2899SCharles.Forsyth /* a given typeface, in a given style. */ 302*37da2899SCharles.Forsyth /* */ 303*37da2899SCharles.Forsyth /* <Note> */ 304*37da2899SCharles.Forsyth /* Each face object also owns a single @FT_GlyphSlot object, as well */ 305*37da2899SCharles.Forsyth /* as one or more @FT_Size objects. */ 306*37da2899SCharles.Forsyth /* */ 307*37da2899SCharles.Forsyth /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */ 308*37da2899SCharles.Forsyth /* a given filepathname or a custom input stream. */ 309*37da2899SCharles.Forsyth /* */ 310*37da2899SCharles.Forsyth /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */ 311*37da2899SCharles.Forsyth /* */ 312*37da2899SCharles.Forsyth /* <Also> */ 313*37da2899SCharles.Forsyth /* The @FT_FaceRec details the publicly accessible fields of a given */ 314*37da2899SCharles.Forsyth /* face object. */ 315*37da2899SCharles.Forsyth /* */ 316*37da2899SCharles.Forsyth typedef struct FT_FaceRec_* FT_Face; 317*37da2899SCharles.Forsyth 318*37da2899SCharles.Forsyth 319*37da2899SCharles.Forsyth /*************************************************************************/ 320*37da2899SCharles.Forsyth /* */ 321*37da2899SCharles.Forsyth /* <Type> */ 322*37da2899SCharles.Forsyth /* FT_Size */ 323*37da2899SCharles.Forsyth /* */ 324*37da2899SCharles.Forsyth /* <Description> */ 325*37da2899SCharles.Forsyth /* A handle to a given size object. Such an object models the data */ 326*37da2899SCharles.Forsyth /* that depends on the current _resolution_ and _character size_ in a */ 327*37da2899SCharles.Forsyth /* given @FT_Face. */ 328*37da2899SCharles.Forsyth /* */ 329*37da2899SCharles.Forsyth /* <Note> */ 330*37da2899SCharles.Forsyth /* Each face object owns one or more sizes. There is however a */ 331*37da2899SCharles.Forsyth /* single _active_ size for the face at any time that will be used by */ 332*37da2899SCharles.Forsyth /* functions like @FT_Load_Glyph, @FT_Get_Kerning, etc. */ 333*37da2899SCharles.Forsyth /* */ 334*37da2899SCharles.Forsyth /* You can use the @FT_Activate_Size API to change the current */ 335*37da2899SCharles.Forsyth /* active size of any given face. */ 336*37da2899SCharles.Forsyth /* */ 337*37da2899SCharles.Forsyth /* <Also> */ 338*37da2899SCharles.Forsyth /* The @FT_SizeRec structure details the publicly accessible fields */ 339*37da2899SCharles.Forsyth /* of a given face object. */ 340*37da2899SCharles.Forsyth /* */ 341*37da2899SCharles.Forsyth typedef struct FT_SizeRec_* FT_Size; 342*37da2899SCharles.Forsyth 343*37da2899SCharles.Forsyth 344*37da2899SCharles.Forsyth /*************************************************************************/ 345*37da2899SCharles.Forsyth /* */ 346*37da2899SCharles.Forsyth /* <Type> */ 347*37da2899SCharles.Forsyth /* FT_GlyphSlot */ 348*37da2899SCharles.Forsyth /* */ 349*37da2899SCharles.Forsyth /* <Description> */ 350*37da2899SCharles.Forsyth /* A handle to a given `glyph slot'. A slot is a container where it */ 351*37da2899SCharles.Forsyth /* is possible to load any one of the glyphs contained in its parent */ 352*37da2899SCharles.Forsyth /* face. */ 353*37da2899SCharles.Forsyth /* */ 354*37da2899SCharles.Forsyth /* In other words, each time you call @FT_Load_Glyph or */ 355*37da2899SCharles.Forsyth /* @FT_Load_Char, the slot's content is erased by the new glyph data, */ 356*37da2899SCharles.Forsyth /* i.e. the glyph's metrics, its image (bitmap or outline), and */ 357*37da2899SCharles.Forsyth /* other control information. */ 358*37da2899SCharles.Forsyth /* */ 359*37da2899SCharles.Forsyth /* <Also> */ 360*37da2899SCharles.Forsyth /* @FT_GlyphSlotRec details the publicly accessible glyph fields. */ 361*37da2899SCharles.Forsyth /* */ 362*37da2899SCharles.Forsyth typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; 363*37da2899SCharles.Forsyth 364*37da2899SCharles.Forsyth 365*37da2899SCharles.Forsyth /*************************************************************************/ 366*37da2899SCharles.Forsyth /* */ 367*37da2899SCharles.Forsyth /* <Type> */ 368*37da2899SCharles.Forsyth /* FT_CharMap */ 369*37da2899SCharles.Forsyth /* */ 370*37da2899SCharles.Forsyth /* <Description> */ 371*37da2899SCharles.Forsyth /* A handle to a given character map. A charmap is used to translate */ 372*37da2899SCharles.Forsyth /* character codes in a given encoding into glyph indexes for its */ 373*37da2899SCharles.Forsyth /* parent's face. Some font formats may provide several charmaps per */ 374*37da2899SCharles.Forsyth /* font. */ 375*37da2899SCharles.Forsyth /* */ 376*37da2899SCharles.Forsyth /* Each face object owns zero or more charmaps, but only one of them */ 377*37da2899SCharles.Forsyth /* can be "active" and used by @FT_Get_Char_Index or @FT_Load_Char. */ 378*37da2899SCharles.Forsyth /* */ 379*37da2899SCharles.Forsyth /* The list of available charmaps in a face is available through the */ 380*37da2899SCharles.Forsyth /* "face->num_charmaps" and "face->charmaps" fields of @FT_FaceRec. */ 381*37da2899SCharles.Forsyth /* */ 382*37da2899SCharles.Forsyth /* The currently active charmap is available as "face->charmap". */ 383*37da2899SCharles.Forsyth /* You should call @FT_Set_Charmap to change it. */ 384*37da2899SCharles.Forsyth /* */ 385*37da2899SCharles.Forsyth /* <Note> */ 386*37da2899SCharles.Forsyth /* When a new face is created (either through @FT_New_Face or */ 387*37da2899SCharles.Forsyth /* @FT_Open_Face), the library looks for a Unicode charmap within */ 388*37da2899SCharles.Forsyth /* the list and automatically activates it. */ 389*37da2899SCharles.Forsyth /* */ 390*37da2899SCharles.Forsyth typedef struct FT_CharMapRec_* FT_CharMap; 391*37da2899SCharles.Forsyth 392*37da2899SCharles.Forsyth 393*37da2899SCharles.Forsyth /*************************************************************************/ 394*37da2899SCharles.Forsyth /* */ 395*37da2899SCharles.Forsyth /* <Macro> */ 396*37da2899SCharles.Forsyth /* FT_ENC_TAG */ 397*37da2899SCharles.Forsyth /* */ 398*37da2899SCharles.Forsyth /* <Description> */ 399*37da2899SCharles.Forsyth /* This macro converts four letter tags into an unsigned long. It is */ 400*37da2899SCharles.Forsyth /* used to define "encoding" identifiers (see @FT_Encoding). */ 401*37da2899SCharles.Forsyth /* */ 402*37da2899SCharles.Forsyth /* <Note> */ 403*37da2899SCharles.Forsyth /* Since many 16bit compilers don't like 32bit enumerations, you */ 404*37da2899SCharles.Forsyth /* should redefine this macro in case of problems to something like */ 405*37da2899SCharles.Forsyth /* this: */ 406*37da2899SCharles.Forsyth /* */ 407*37da2899SCharles.Forsyth /* #define FT_ENC_TAG( value, a, b, c, d ) (value) */ 408*37da2899SCharles.Forsyth /* */ 409*37da2899SCharles.Forsyth /* to get a simple enumeration without assigning special numbers. */ 410*37da2899SCharles.Forsyth /* */ 411*37da2899SCharles.Forsyth 412*37da2899SCharles.Forsyth #ifndef FT_ENC_TAG 413*37da2899SCharles.Forsyth #define FT_ENC_TAG( value, a, b, c, d ) \ 414*37da2899SCharles.Forsyth value = ( ( (FT_UInt32)(a) << 24 ) | \ 415*37da2899SCharles.Forsyth ( (FT_UInt32)(b) << 16 ) | \ 416*37da2899SCharles.Forsyth ( (FT_UInt32)(c) << 8 ) | \ 417*37da2899SCharles.Forsyth (FT_UInt32)(d) ) 418*37da2899SCharles.Forsyth 419*37da2899SCharles.Forsyth #endif /* FT_ENC_TAG */ 420*37da2899SCharles.Forsyth 421*37da2899SCharles.Forsyth 422*37da2899SCharles.Forsyth /*************************************************************************/ 423*37da2899SCharles.Forsyth /* */ 424*37da2899SCharles.Forsyth /* <Enum> */ 425*37da2899SCharles.Forsyth /* FT_Encoding */ 426*37da2899SCharles.Forsyth /* */ 427*37da2899SCharles.Forsyth /* <Description> */ 428*37da2899SCharles.Forsyth /* An enumeration used to specify encodings supported by charmaps. */ 429*37da2899SCharles.Forsyth /* Used in the @FT_Select_Charmap API function. */ 430*37da2899SCharles.Forsyth /* */ 431*37da2899SCharles.Forsyth /* <Note> */ 432*37da2899SCharles.Forsyth /* Because of 32-bit charcodes defined in Unicode (i.e., surrogates), */ 433*37da2899SCharles.Forsyth /* all character codes must be expressed as FT_Longs. */ 434*37da2899SCharles.Forsyth /* */ 435*37da2899SCharles.Forsyth /* The values of this type correspond to specific character */ 436*37da2899SCharles.Forsyth /* repertories (i.e. charsets), and not to text encoding methods */ 437*37da2899SCharles.Forsyth /* (like UTF-8, UTF-16, GB2312_EUC, etc.). */ 438*37da2899SCharles.Forsyth /* */ 439*37da2899SCharles.Forsyth /* Other encodings might be defined in the future. */ 440*37da2899SCharles.Forsyth /* */ 441*37da2899SCharles.Forsyth /* <Values> */ 442*37da2899SCharles.Forsyth /* FT_ENCODING_NONE :: */ 443*37da2899SCharles.Forsyth /* The encoding value 0 is reserved. */ 444*37da2899SCharles.Forsyth /* */ 445*37da2899SCharles.Forsyth /* FT_ENCODING_UNICODE :: */ 446*37da2899SCharles.Forsyth /* Corresponds to the Unicode character set. This value covers */ 447*37da2899SCharles.Forsyth /* all versions of the Unicode repertoire, including ASCII and */ 448*37da2899SCharles.Forsyth /* Latin-1. Most fonts include a Unicode charmap, but not all */ 449*37da2899SCharles.Forsyth /* of them. */ 450*37da2899SCharles.Forsyth /* */ 451*37da2899SCharles.Forsyth /* FT_ENCODING_MS_SYMBOL :: */ 452*37da2899SCharles.Forsyth /* Corresponds to the Microsoft Symbol encoding, used to encode */ 453*37da2899SCharles.Forsyth /* mathematical symbols in the 32..255 character code range. For */ 454*37da2899SCharles.Forsyth /* more information, see `http://www.ceviz.net/symbol.htm'. */ 455*37da2899SCharles.Forsyth /* */ 456*37da2899SCharles.Forsyth /* FT_ENCODING_MS_SJIS :: */ 457*37da2899SCharles.Forsyth /* Corresponds to Microsoft's Japanese SJIS encoding. More info */ 458*37da2899SCharles.Forsyth /* at `http://langsupport.japanreference.com/encoding.shtml'. */ 459*37da2899SCharles.Forsyth /* See note on multi-byte encodings below. */ 460*37da2899SCharles.Forsyth /* */ 461*37da2899SCharles.Forsyth /* FT_ENCODING_MS_GB2312 :: */ 462*37da2899SCharles.Forsyth /* Corresponds to the encoding system for Simplified Chinese, as */ 463*37da2899SCharles.Forsyth /* used in China. Only found in some TrueType fonts. */ 464*37da2899SCharles.Forsyth /* */ 465*37da2899SCharles.Forsyth /* FT_ENCODING_MS_BIG5 :: */ 466*37da2899SCharles.Forsyth /* Corresponds to the encoding system for Traditional Chinese, as */ 467*37da2899SCharles.Forsyth /* used in Taiwan and Hong Kong. Only found in some TrueType fonts. */ 468*37da2899SCharles.Forsyth /* */ 469*37da2899SCharles.Forsyth /* FT_ENCODING_MS_WANSUNG :: */ 470*37da2899SCharles.Forsyth /* Corresponds to the Korean encoding system known as Wansung. */ 471*37da2899SCharles.Forsyth /* This is a Microsoft encoding that is only found in some TrueType */ 472*37da2899SCharles.Forsyth /* fonts. For more information, see */ 473*37da2899SCharles.Forsyth /* `http://www.microsoft.com/typography/unicode/949.txt'. */ 474*37da2899SCharles.Forsyth /* */ 475*37da2899SCharles.Forsyth /* FT_ENCODING_MS_JOHAB :: */ 476*37da2899SCharles.Forsyth /* The Korean standard character set (KS C-5601-1992), which */ 477*37da2899SCharles.Forsyth /* corresponds to Windows code page 1361. This character set */ 478*37da2899SCharles.Forsyth /* includes all possible Hangeul character combinations. */ 479*37da2899SCharles.Forsyth /* Only found on some rare TrueType fonts. */ 480*37da2899SCharles.Forsyth /* */ 481*37da2899SCharles.Forsyth /* FT_ENCODING_ADOBE_LATIN_1 :: */ 482*37da2899SCharles.Forsyth /* Corresponds to a Latin-1 encoding as defined in a Type 1 */ 483*37da2899SCharles.Forsyth /* Postscript font. It is limited to 256 character codes. */ 484*37da2899SCharles.Forsyth /* */ 485*37da2899SCharles.Forsyth /* FT_ENCODING_ADOBE_STANDARD :: */ 486*37da2899SCharles.Forsyth /* Corresponds to the Adobe Standard encoding, as found in Type 1, */ 487*37da2899SCharles.Forsyth /* CFF, and OpenType/CFF fonts. It is limited to 256character */ 488*37da2899SCharles.Forsyth /* codes. */ 489*37da2899SCharles.Forsyth /* */ 490*37da2899SCharles.Forsyth /* FT_ENCODING_ADOBE_EXPERT :: */ 491*37da2899SCharles.Forsyth /* Corresponds to the Adobe Expert encoding, as found in Type 1, */ 492*37da2899SCharles.Forsyth /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ 493*37da2899SCharles.Forsyth /* codes. */ 494*37da2899SCharles.Forsyth /* */ 495*37da2899SCharles.Forsyth /* FT_ENCODING_ADOBE_CUSTOM :: */ 496*37da2899SCharles.Forsyth /* Corresponds to a custom encoding, as found in Type 1, CFF, and */ 497*37da2899SCharles.Forsyth /* OpenType/CFF fonts. It is limited to 256 character codes. */ 498*37da2899SCharles.Forsyth /* */ 499*37da2899SCharles.Forsyth /* FT_ENCODING_APPLE_ROMAN :: */ 500*37da2899SCharles.Forsyth /* Corresponds to the 8-bit Apple roman encoding. Many TrueType and */ 501*37da2899SCharles.Forsyth /* OpenType fonts contain a charmap for this encoding, since older */ 502*37da2899SCharles.Forsyth /* versions of Mac OS are able to use it. */ 503*37da2899SCharles.Forsyth /* */ 504*37da2899SCharles.Forsyth /* FT_ENCODING_OLD_LATIN_2 :: */ 505*37da2899SCharles.Forsyth /* This value is deprecated and was never used nor reported by */ 506*37da2899SCharles.Forsyth /* FreeType. Don't use or test for it. */ 507*37da2899SCharles.Forsyth /* */ 508*37da2899SCharles.Forsyth /* <Note> */ 509*37da2899SCharles.Forsyth /* By default, FreeType automatically synthetizes a Unicode charmap */ 510*37da2899SCharles.Forsyth /* for Postscript fonts, using their glyph names dictionaries. */ 511*37da2899SCharles.Forsyth /* However, it will also report the encodings defined explicitly in */ 512*37da2899SCharles.Forsyth /* the font file, for the cases when they are needed, with the Adobe */ 513*37da2899SCharles.Forsyth /* values as well. */ 514*37da2899SCharles.Forsyth /* */ 515*37da2899SCharles.Forsyth typedef enum FT_Encoding_ 516*37da2899SCharles.Forsyth { 517*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), 518*37da2899SCharles.Forsyth 519*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ), 520*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), 521*37da2899SCharles.Forsyth 522*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_SJIS, 's', 'j', 'i', 's' ), 523*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_GB2312, 'g', 'b', ' ', ' ' ), 524*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_BIG5, 'b', 'i', 'g', '5' ), 525*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_WANSUNG, 'w', 'a', 'n', 's' ), 526*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_MS_JOHAB, 'j', 'o', 'h', 'a' ), 527*37da2899SCharles.Forsyth 528*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ), 529*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ), 530*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ), 531*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ), 532*37da2899SCharles.Forsyth 533*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ), 534*37da2899SCharles.Forsyth 535*37da2899SCharles.Forsyth FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' ) 536*37da2899SCharles.Forsyth 537*37da2899SCharles.Forsyth } FT_Encoding; 538*37da2899SCharles.Forsyth 539*37da2899SCharles.Forsyth 540*37da2899SCharles.Forsyth /*************************************************************************/ 541*37da2899SCharles.Forsyth /* */ 542*37da2899SCharles.Forsyth /* <Enum> */ 543*37da2899SCharles.Forsyth /* ft_encoding_xxx */ 544*37da2899SCharles.Forsyth /* */ 545*37da2899SCharles.Forsyth /* <Description> */ 546*37da2899SCharles.Forsyth /* These constants are deprecated; use the corresponding @FT_Encoding */ 547*37da2899SCharles.Forsyth /* values instead. */ 548*37da2899SCharles.Forsyth /* */ 549*37da2899SCharles.Forsyth /* <Values> */ 550*37da2899SCharles.Forsyth /* ft_encoding_none :: see @FT_ENCODING_NONE */ 551*37da2899SCharles.Forsyth /* ft_encoding_unicode :: see @FT_ENCODING_UNICODE */ 552*37da2899SCharles.Forsyth /* ft_encoding_latin_2 :: see @FT_ENCODING_OLD_LATIN_2 */ 553*37da2899SCharles.Forsyth /* ft_encoding_symbol :: see @FT_ENCODING_MS_SYMBOL */ 554*37da2899SCharles.Forsyth /* ft_encoding_sjis :: see @FT_ENCODING_MS_SJIS */ 555*37da2899SCharles.Forsyth /* ft_encoding_gb2312 :: see @FT_ENCODING_MS_GB2312 */ 556*37da2899SCharles.Forsyth /* ft_encoding_big5 :: see @FT_ENCODING_MS_BIG5 */ 557*37da2899SCharles.Forsyth /* ft_encoding_wansung :: see @FT_ENCODING_MS_WANSUNG */ 558*37da2899SCharles.Forsyth /* ft_encoding_johab :: see @FT_ENCODING_MS_JOHAB */ 559*37da2899SCharles.Forsyth /* */ 560*37da2899SCharles.Forsyth /* ft_encoding_adobe_standard :: see @FT_ENCODING_ADOBE_STANDARD */ 561*37da2899SCharles.Forsyth /* ft_encoding_adobe_expert :: see @FT_ENCODING_ADOBE_EXPERT */ 562*37da2899SCharles.Forsyth /* ft_encoding_adobe_custom :: see @FT_ENCODING_ADOBE_CUSTOM */ 563*37da2899SCharles.Forsyth /* ft_encoding_latin_1 :: see @FT_ENCODING_ADOBE_LATIN_1 */ 564*37da2899SCharles.Forsyth /* */ 565*37da2899SCharles.Forsyth /* ft_encoding_apple_roman :: see @FT_ENCODING_APPLE_ROMAN */ 566*37da2899SCharles.Forsyth /* */ 567*37da2899SCharles.Forsyth #define ft_encoding_none FT_ENCODING_NONE 568*37da2899SCharles.Forsyth #define ft_encoding_unicode FT_ENCODING_UNICODE 569*37da2899SCharles.Forsyth #define ft_encoding_symbol FT_ENCODING_MS_SYMBOL 570*37da2899SCharles.Forsyth #define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 571*37da2899SCharles.Forsyth #define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 572*37da2899SCharles.Forsyth #define ft_encoding_sjis FT_ENCODING_MS_SJIS 573*37da2899SCharles.Forsyth #define ft_encoding_gb2312 FT_ENCODING_MS_GB2312 574*37da2899SCharles.Forsyth #define ft_encoding_big5 FT_ENCODING_MS_BIG5 575*37da2899SCharles.Forsyth #define ft_encoding_wansung FT_ENCODING_MS_WANSUNG 576*37da2899SCharles.Forsyth #define ft_encoding_johab FT_ENCODING_MS_JOHAB 577*37da2899SCharles.Forsyth 578*37da2899SCharles.Forsyth #define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD 579*37da2899SCharles.Forsyth #define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT 580*37da2899SCharles.Forsyth #define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM 581*37da2899SCharles.Forsyth #define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN 582*37da2899SCharles.Forsyth 583*37da2899SCharles.Forsyth 584*37da2899SCharles.Forsyth /*************************************************************************/ 585*37da2899SCharles.Forsyth /* */ 586*37da2899SCharles.Forsyth /* <Struct> */ 587*37da2899SCharles.Forsyth /* FT_CharMapRec */ 588*37da2899SCharles.Forsyth /* */ 589*37da2899SCharles.Forsyth /* <Description> */ 590*37da2899SCharles.Forsyth /* The base charmap structure. */ 591*37da2899SCharles.Forsyth /* */ 592*37da2899SCharles.Forsyth /* <Fields> */ 593*37da2899SCharles.Forsyth /* face :: A handle to the parent face object. */ 594*37da2899SCharles.Forsyth /* */ 595*37da2899SCharles.Forsyth /* encoding :: An @FT_Encoding tag identifying the charmap. Use */ 596*37da2899SCharles.Forsyth /* this with @FT_Select_Charmap. */ 597*37da2899SCharles.Forsyth /* */ 598*37da2899SCharles.Forsyth /* platform_id :: An ID number describing the platform for the */ 599*37da2899SCharles.Forsyth /* following encoding ID. This comes directly from */ 600*37da2899SCharles.Forsyth /* the TrueType specification and should be emulated */ 601*37da2899SCharles.Forsyth /* for other formats. */ 602*37da2899SCharles.Forsyth /* */ 603*37da2899SCharles.Forsyth /* encoding_id :: A platform specific encoding number. This also */ 604*37da2899SCharles.Forsyth /* comes from the TrueType specification and should be */ 605*37da2899SCharles.Forsyth /* emulated similarly. */ 606*37da2899SCharles.Forsyth /* */ 607*37da2899SCharles.Forsyth typedef struct FT_CharMapRec_ 608*37da2899SCharles.Forsyth { 609*37da2899SCharles.Forsyth FT_Face face; 610*37da2899SCharles.Forsyth FT_Encoding encoding; 611*37da2899SCharles.Forsyth FT_UShort platform_id; 612*37da2899SCharles.Forsyth FT_UShort encoding_id; 613*37da2899SCharles.Forsyth 614*37da2899SCharles.Forsyth } FT_CharMapRec; 615*37da2899SCharles.Forsyth 616*37da2899SCharles.Forsyth 617*37da2899SCharles.Forsyth /*************************************************************************/ 618*37da2899SCharles.Forsyth /*************************************************************************/ 619*37da2899SCharles.Forsyth /* */ 620*37da2899SCharles.Forsyth /* B A S E O B J E C T C L A S S E S */ 621*37da2899SCharles.Forsyth /* */ 622*37da2899SCharles.Forsyth /*************************************************************************/ 623*37da2899SCharles.Forsyth /*************************************************************************/ 624*37da2899SCharles.Forsyth 625*37da2899SCharles.Forsyth 626*37da2899SCharles.Forsyth /*************************************************************************/ 627*37da2899SCharles.Forsyth /* */ 628*37da2899SCharles.Forsyth /* <Type> */ 629*37da2899SCharles.Forsyth /* FT_Face_Internal */ 630*37da2899SCharles.Forsyth /* */ 631*37da2899SCharles.Forsyth /* <Description> */ 632*37da2899SCharles.Forsyth /* An opaque handle to an FT_Face_InternalRec structure, used to */ 633*37da2899SCharles.Forsyth /* model private data of a given @FT_Face object. */ 634*37da2899SCharles.Forsyth /* */ 635*37da2899SCharles.Forsyth /* This structure might change between releases of FreeType 2 and is */ 636*37da2899SCharles.Forsyth /* not generally available to client applications. */ 637*37da2899SCharles.Forsyth /* */ 638*37da2899SCharles.Forsyth typedef struct FT_Face_InternalRec_* FT_Face_Internal; 639*37da2899SCharles.Forsyth 640*37da2899SCharles.Forsyth 641*37da2899SCharles.Forsyth /*************************************************************************/ 642*37da2899SCharles.Forsyth /* */ 643*37da2899SCharles.Forsyth /* <Struct> */ 644*37da2899SCharles.Forsyth /* FT_FaceRec */ 645*37da2899SCharles.Forsyth /* */ 646*37da2899SCharles.Forsyth /* <Description> */ 647*37da2899SCharles.Forsyth /* FreeType root face class structure. A face object models the */ 648*37da2899SCharles.Forsyth /* resolution and point-size independent data found in a font file. */ 649*37da2899SCharles.Forsyth /* */ 650*37da2899SCharles.Forsyth /* <Fields> */ 651*37da2899SCharles.Forsyth /* num_faces :: In the case where the face is located in a */ 652*37da2899SCharles.Forsyth /* collection (i.e., a file which embeds */ 653*37da2899SCharles.Forsyth /* several faces), this is the total number of */ 654*37da2899SCharles.Forsyth /* faces found in the resource. 1 by default. */ 655*37da2899SCharles.Forsyth /* */ 656*37da2899SCharles.Forsyth /* face_index :: The index of the face in its font file. */ 657*37da2899SCharles.Forsyth /* Usually, this is 0 for all normal font */ 658*37da2899SCharles.Forsyth /* formats. It can be more in the case of */ 659*37da2899SCharles.Forsyth /* collections (which embed several fonts in a */ 660*37da2899SCharles.Forsyth /* single resource/file). */ 661*37da2899SCharles.Forsyth /* */ 662*37da2899SCharles.Forsyth /* face_flags :: A set of bit flags that give important */ 663*37da2899SCharles.Forsyth /* information about the face; see the */ 664*37da2899SCharles.Forsyth /* @FT_FACE_FLAG_XXX constants for details. */ 665*37da2899SCharles.Forsyth /* */ 666*37da2899SCharles.Forsyth /* style_flags :: A set of bit flags indicating the style of */ 667*37da2899SCharles.Forsyth /* the face (i.e., italic, bold, underline, */ 668*37da2899SCharles.Forsyth /* etc). See the @FT_STYLE_FLAG_XXX */ 669*37da2899SCharles.Forsyth /* constants. */ 670*37da2899SCharles.Forsyth /* */ 671*37da2899SCharles.Forsyth /* num_glyphs :: The total number of glyphs in the face. */ 672*37da2899SCharles.Forsyth /* */ 673*37da2899SCharles.Forsyth /* family_name :: The face's family name. This is an ASCII */ 674*37da2899SCharles.Forsyth /* string, usually in English, which describes */ 675*37da2899SCharles.Forsyth /* the typeface's family (like `Times New */ 676*37da2899SCharles.Forsyth /* Roman', `Bodoni', `Garamond', etc). This */ 677*37da2899SCharles.Forsyth /* is a least common denominator used to list */ 678*37da2899SCharles.Forsyth /* fonts. Some formats (TrueType & OpenType) */ 679*37da2899SCharles.Forsyth /* provide localized and Unicode versions of */ 680*37da2899SCharles.Forsyth /* this string. Applications should use the */ 681*37da2899SCharles.Forsyth /* format specific interface to access them. */ 682*37da2899SCharles.Forsyth /* */ 683*37da2899SCharles.Forsyth /* style_name :: The face's style name. This is an ASCII */ 684*37da2899SCharles.Forsyth /* string, usually in English, which describes */ 685*37da2899SCharles.Forsyth /* the typeface's style (like `Italic', */ 686*37da2899SCharles.Forsyth /* `Bold', `Condensed', etc). Not all font */ 687*37da2899SCharles.Forsyth /* formats provide a style name, so this field */ 688*37da2899SCharles.Forsyth /* is optional, and can be set to NULL. As */ 689*37da2899SCharles.Forsyth /* for `family_name', some formats provide */ 690*37da2899SCharles.Forsyth /* localized/Unicode versions of this string. */ 691*37da2899SCharles.Forsyth /* Applications should use the format specific */ 692*37da2899SCharles.Forsyth /* interface to access them. */ 693*37da2899SCharles.Forsyth /* */ 694*37da2899SCharles.Forsyth /* num_fixed_sizes :: The number of fixed sizes available in this */ 695*37da2899SCharles.Forsyth /* face. This should be set to 0 for scalable */ 696*37da2899SCharles.Forsyth /* fonts, unless its face includes a complete */ 697*37da2899SCharles.Forsyth /* set of glyphs (called a `strike') for the */ 698*37da2899SCharles.Forsyth /* specified sizes. */ 699*37da2899SCharles.Forsyth /* */ 700*37da2899SCharles.Forsyth /* available_sizes :: An array of sizes specifying the available */ 701*37da2899SCharles.Forsyth /* bitmap/graymap sizes that are contained in */ 702*37da2899SCharles.Forsyth /* in the font face. Should be set to NULL if */ 703*37da2899SCharles.Forsyth /* the field `num_fixed_sizes' is set to 0. */ 704*37da2899SCharles.Forsyth /* */ 705*37da2899SCharles.Forsyth /* num_charmaps :: The total number of character maps in the */ 706*37da2899SCharles.Forsyth /* face. */ 707*37da2899SCharles.Forsyth /* */ 708*37da2899SCharles.Forsyth /* charmaps :: A table of pointers to the face's charmaps. */ 709*37da2899SCharles.Forsyth /* Used to scan the list of available charmaps */ 710*37da2899SCharles.Forsyth /* -- this table might change after a call to */ 711*37da2899SCharles.Forsyth /* @FT_Attach_File or @FT_Attach_Stream (e.g. */ 712*37da2899SCharles.Forsyth /* if used to hook an additional encoding or */ 713*37da2899SCharles.Forsyth /* CMap to the face object). */ 714*37da2899SCharles.Forsyth /* */ 715*37da2899SCharles.Forsyth /* generic :: A field reserved for client uses. See the */ 716*37da2899SCharles.Forsyth /* @FT_Generic type description. */ 717*37da2899SCharles.Forsyth /* */ 718*37da2899SCharles.Forsyth /* bbox :: The font bounding box. Coordinates are */ 719*37da2899SCharles.Forsyth /* expressed in font units (see units_per_EM). */ 720*37da2899SCharles.Forsyth /* The box is large enough to contain any */ 721*37da2899SCharles.Forsyth /* glyph from the font. Thus, bbox.yMax can */ 722*37da2899SCharles.Forsyth /* be seen as the `maximal ascender', */ 723*37da2899SCharles.Forsyth /* bbox.yMin as the `minimal descender', and */ 724*37da2899SCharles.Forsyth /* the maximal glyph width is given by */ 725*37da2899SCharles.Forsyth /* `bbox.xMax-bbox.xMin' (not to be confused */ 726*37da2899SCharles.Forsyth /* with the maximal _advance_width_). Only */ 727*37da2899SCharles.Forsyth /* relevant for scalable formats. */ 728*37da2899SCharles.Forsyth /* */ 729*37da2899SCharles.Forsyth /* units_per_EM :: The number of font units per EM square for */ 730*37da2899SCharles.Forsyth /* this face. This is typically 2048 for */ 731*37da2899SCharles.Forsyth /* TrueType fonts, 1000 for Type1 fonts, and */ 732*37da2899SCharles.Forsyth /* should be set to the (unrealistic) value 1 */ 733*37da2899SCharles.Forsyth /* for fixed-sizes fonts. Only relevant for */ 734*37da2899SCharles.Forsyth /* scalable formats. */ 735*37da2899SCharles.Forsyth /* */ 736*37da2899SCharles.Forsyth /* ascender :: The face's ascender is the vertical */ 737*37da2899SCharles.Forsyth /* distance from the baseline to the topmost */ 738*37da2899SCharles.Forsyth /* point of any glyph in the face. This */ 739*37da2899SCharles.Forsyth /* field's value is positive, expressed in */ 740*37da2899SCharles.Forsyth /* font units. Some font designs use a value */ 741*37da2899SCharles.Forsyth /* different from `bbox.yMax'. Only relevant */ 742*37da2899SCharles.Forsyth /* for scalable formats. */ 743*37da2899SCharles.Forsyth /* */ 744*37da2899SCharles.Forsyth /* descender :: The face's descender is the vertical */ 745*37da2899SCharles.Forsyth /* distance from the baseline to the */ 746*37da2899SCharles.Forsyth /* bottommost point of any glyph in the face. */ 747*37da2899SCharles.Forsyth /* This field's value is *negative*, expressed */ 748*37da2899SCharles.Forsyth /* in font units. Some font designs use a */ 749*37da2899SCharles.Forsyth /* value different from `bbox.yMin'. Only */ 750*37da2899SCharles.Forsyth /* relevant for scalable formats. */ 751*37da2899SCharles.Forsyth /* */ 752*37da2899SCharles.Forsyth /* height :: The face's height is the vertical distance */ 753*37da2899SCharles.Forsyth /* from one baseline to the next when writing */ 754*37da2899SCharles.Forsyth /* several lines of text. Its value is always */ 755*37da2899SCharles.Forsyth /* positive, expressed in font units. The */ 756*37da2899SCharles.Forsyth /* value can be computed as */ 757*37da2899SCharles.Forsyth /* `ascender+descender+line_gap' where the */ 758*37da2899SCharles.Forsyth /* value of `line_gap' is also called */ 759*37da2899SCharles.Forsyth /* `external leading'. Only relevant for */ 760*37da2899SCharles.Forsyth /* scalable formats. */ 761*37da2899SCharles.Forsyth /* */ 762*37da2899SCharles.Forsyth /* max_advance_width :: The maximal advance width, in font units, */ 763*37da2899SCharles.Forsyth /* for all glyphs in this face. This can be */ 764*37da2899SCharles.Forsyth /* used to make word wrapping computations */ 765*37da2899SCharles.Forsyth /* faster. Only relevant for scalable */ 766*37da2899SCharles.Forsyth /* formats. */ 767*37da2899SCharles.Forsyth /* */ 768*37da2899SCharles.Forsyth /* max_advance_height :: The maximal advance height, in font units, */ 769*37da2899SCharles.Forsyth /* for all glyphs in this face. This is only */ 770*37da2899SCharles.Forsyth /* relevant for vertical layouts, and should */ 771*37da2899SCharles.Forsyth /* be set to the `height' for fonts that do */ 772*37da2899SCharles.Forsyth /* not provide vertical metrics. Only */ 773*37da2899SCharles.Forsyth /* relevant for scalable formats. */ 774*37da2899SCharles.Forsyth /* */ 775*37da2899SCharles.Forsyth /* underline_position :: The position, in font units, of the */ 776*37da2899SCharles.Forsyth /* underline line for this face. It's the */ 777*37da2899SCharles.Forsyth /* center of the underlining stem. Only */ 778*37da2899SCharles.Forsyth /* relevant for scalable formats. */ 779*37da2899SCharles.Forsyth /* */ 780*37da2899SCharles.Forsyth /* underline_thickness :: The thickness, in font units, of the */ 781*37da2899SCharles.Forsyth /* underline for this face. Only relevant for */ 782*37da2899SCharles.Forsyth /* scalable formats. */ 783*37da2899SCharles.Forsyth /* */ 784*37da2899SCharles.Forsyth /* glyph :: The face's associated glyph slot(s). This */ 785*37da2899SCharles.Forsyth /* object is created automatically with a new */ 786*37da2899SCharles.Forsyth /* face object. However, certain kinds of */ 787*37da2899SCharles.Forsyth /* applications (mainly tools like converters) */ 788*37da2899SCharles.Forsyth /* can need more than one slot to ease their */ 789*37da2899SCharles.Forsyth /* task. */ 790*37da2899SCharles.Forsyth /* */ 791*37da2899SCharles.Forsyth /* size :: The current active size for this face. */ 792*37da2899SCharles.Forsyth /* */ 793*37da2899SCharles.Forsyth /* charmap :: The current active charmap for this face. */ 794*37da2899SCharles.Forsyth /* */ 795*37da2899SCharles.Forsyth typedef struct FT_FaceRec_ 796*37da2899SCharles.Forsyth { 797*37da2899SCharles.Forsyth FT_Long num_faces; 798*37da2899SCharles.Forsyth FT_Long face_index; 799*37da2899SCharles.Forsyth 800*37da2899SCharles.Forsyth FT_Long face_flags; 801*37da2899SCharles.Forsyth FT_Long style_flags; 802*37da2899SCharles.Forsyth 803*37da2899SCharles.Forsyth FT_Long num_glyphs; 804*37da2899SCharles.Forsyth 805*37da2899SCharles.Forsyth FT_String* family_name; 806*37da2899SCharles.Forsyth FT_String* style_name; 807*37da2899SCharles.Forsyth 808*37da2899SCharles.Forsyth FT_Int num_fixed_sizes; 809*37da2899SCharles.Forsyth FT_Bitmap_Size* available_sizes; 810*37da2899SCharles.Forsyth 811*37da2899SCharles.Forsyth FT_Int num_charmaps; 812*37da2899SCharles.Forsyth FT_CharMap* charmaps; 813*37da2899SCharles.Forsyth 814*37da2899SCharles.Forsyth FT_Generic generic; 815*37da2899SCharles.Forsyth 816*37da2899SCharles.Forsyth /*# the following are only relevant to scalable outlines */ 817*37da2899SCharles.Forsyth FT_BBox bbox; 818*37da2899SCharles.Forsyth 819*37da2899SCharles.Forsyth FT_UShort units_per_EM; 820*37da2899SCharles.Forsyth FT_Short ascender; 821*37da2899SCharles.Forsyth FT_Short descender; 822*37da2899SCharles.Forsyth FT_Short height; 823*37da2899SCharles.Forsyth 824*37da2899SCharles.Forsyth FT_Short max_advance_width; 825*37da2899SCharles.Forsyth FT_Short max_advance_height; 826*37da2899SCharles.Forsyth 827*37da2899SCharles.Forsyth FT_Short underline_position; 828*37da2899SCharles.Forsyth FT_Short underline_thickness; 829*37da2899SCharles.Forsyth 830*37da2899SCharles.Forsyth FT_GlyphSlot glyph; 831*37da2899SCharles.Forsyth FT_Size size; 832*37da2899SCharles.Forsyth FT_CharMap charmap; 833*37da2899SCharles.Forsyth 834*37da2899SCharles.Forsyth /*@private begin */ 835*37da2899SCharles.Forsyth 836*37da2899SCharles.Forsyth FT_Driver driver; 837*37da2899SCharles.Forsyth FT_Memory memory; 838*37da2899SCharles.Forsyth FT_Stream stream; 839*37da2899SCharles.Forsyth 840*37da2899SCharles.Forsyth FT_ListRec sizes_list; 841*37da2899SCharles.Forsyth 842*37da2899SCharles.Forsyth FT_Generic autohint; 843*37da2899SCharles.Forsyth void* extensions; 844*37da2899SCharles.Forsyth 845*37da2899SCharles.Forsyth FT_Face_Internal internal; 846*37da2899SCharles.Forsyth 847*37da2899SCharles.Forsyth /*@private end */ 848*37da2899SCharles.Forsyth 849*37da2899SCharles.Forsyth } FT_FaceRec; 850*37da2899SCharles.Forsyth 851*37da2899SCharles.Forsyth 852*37da2899SCharles.Forsyth /*************************************************************************/ 853*37da2899SCharles.Forsyth /* */ 854*37da2899SCharles.Forsyth /* <Enum> */ 855*37da2899SCharles.Forsyth /* FT_FACE_FLAG_XXX */ 856*37da2899SCharles.Forsyth /* */ 857*37da2899SCharles.Forsyth /* <Description> */ 858*37da2899SCharles.Forsyth /* A list of bit flags used in the 'face_flags' field of the */ 859*37da2899SCharles.Forsyth /* @FT_FaceRec structure. They inform client applications of */ 860*37da2899SCharles.Forsyth /* properties of the corresponding face. */ 861*37da2899SCharles.Forsyth /* */ 862*37da2899SCharles.Forsyth /* <Values> */ 863*37da2899SCharles.Forsyth /* FT_FACE_FLAG_SCALABLE :: */ 864*37da2899SCharles.Forsyth /* Indicates that the face provides vectorial outlines. This */ 865*37da2899SCharles.Forsyth /* doesn't prevent embedded bitmaps, i.e., a face can have both */ 866*37da2899SCharles.Forsyth /* this bit and @FT_FACE_FLAG_FIXED_SIZES set */ 867*37da2899SCharles.Forsyth /* */ 868*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FIXED_SIZES :: */ 869*37da2899SCharles.Forsyth /* Indicates that the face contains `fixed sizes', i.e., bitmap */ 870*37da2899SCharles.Forsyth /* strikes for some given pixel sizes. See the `num_fixed_sizes' */ 871*37da2899SCharles.Forsyth /* and `available_sizes' fields of @FT_FaceRec. */ 872*37da2899SCharles.Forsyth /* */ 873*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FIXED_WIDTH :: */ 874*37da2899SCharles.Forsyth /* Indicates that the face contains fixed-width characters (like */ 875*37da2899SCharles.Forsyth /* Courier, Lucido, MonoType, etc.). */ 876*37da2899SCharles.Forsyth /* */ 877*37da2899SCharles.Forsyth /* FT_FACE_FLAG_SFNT :: */ 878*37da2899SCharles.Forsyth /* Indicates that the face uses the `sfnt' storage scheme. For */ 879*37da2899SCharles.Forsyth /* now, this means TrueType and OpenType. */ 880*37da2899SCharles.Forsyth /* */ 881*37da2899SCharles.Forsyth /* FT_FACE_FLAG_HORIZONTAL :: */ 882*37da2899SCharles.Forsyth /* Indicates that the face contains horizontal glyph metrics. This */ 883*37da2899SCharles.Forsyth /* should be set for all common formats. */ 884*37da2899SCharles.Forsyth /* */ 885*37da2899SCharles.Forsyth /* FT_FACE_FLAG_VERTICAL :: */ 886*37da2899SCharles.Forsyth /* Indicates that the face contains vertical glyph metrics. This */ 887*37da2899SCharles.Forsyth /* is only available in some formats, not all of them. */ 888*37da2899SCharles.Forsyth /* */ 889*37da2899SCharles.Forsyth /* FT_FACE_FLAG_KERNING :: */ 890*37da2899SCharles.Forsyth /* Indicates that the face contains kerning information. If set, */ 891*37da2899SCharles.Forsyth /* the kerning distance can be retrieved through the function */ 892*37da2899SCharles.Forsyth /* @FT_Get_Kerning. Note that if unset, this function will always */ 893*37da2899SCharles.Forsyth /* return the vector (0,0). */ 894*37da2899SCharles.Forsyth /* */ 895*37da2899SCharles.Forsyth /* FT_FACE_FLAG_FAST_GLYPHS :: */ 896*37da2899SCharles.Forsyth /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */ 897*37da2899SCharles.Forsyth /* */ 898*37da2899SCharles.Forsyth /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */ 899*37da2899SCharles.Forsyth /* Indicates that the font contains multiple masters and is capable */ 900*37da2899SCharles.Forsyth /* of interpolating between them. See the multiple-masters */ 901*37da2899SCharles.Forsyth /* specific API for details. */ 902*37da2899SCharles.Forsyth /* */ 903*37da2899SCharles.Forsyth /* FT_FACE_FLAG_GLYPH_NAMES :: */ 904*37da2899SCharles.Forsyth /* Indicates that the font contains glyph names that can be */ 905*37da2899SCharles.Forsyth /* retrieved through @FT_Get_Glyph_Names. Note that some TrueType */ 906*37da2899SCharles.Forsyth /* fonts contain broken glyph name tables. Use the function */ 907*37da2899SCharles.Forsyth /* @FT_Has_PS_Glyph_Name when needed. */ 908*37da2899SCharles.Forsyth /* */ 909*37da2899SCharles.Forsyth /* FT_FACE_FLAG_EXTERNAL_STREAM :: */ 910*37da2899SCharles.Forsyth /* Used internally by FreeType to indicate that a face's stream was */ 911*37da2899SCharles.Forsyth /* provided by the client application and should not be destroyed */ 912*37da2899SCharles.Forsyth /* when @FT_Done_Face is called. Don't read or test this flag. */ 913*37da2899SCharles.Forsyth /* */ 914*37da2899SCharles.Forsyth #define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) 915*37da2899SCharles.Forsyth #define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) 916*37da2899SCharles.Forsyth #define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) 917*37da2899SCharles.Forsyth #define FT_FACE_FLAG_SFNT ( 1L << 3 ) 918*37da2899SCharles.Forsyth #define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 ) 919*37da2899SCharles.Forsyth #define FT_FACE_FLAG_VERTICAL ( 1L << 5 ) 920*37da2899SCharles.Forsyth #define FT_FACE_FLAG_KERNING ( 1L << 6 ) 921*37da2899SCharles.Forsyth #define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 ) 922*37da2899SCharles.Forsyth #define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 ) 923*37da2899SCharles.Forsyth #define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 ) 924*37da2899SCharles.Forsyth #define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 ) 925*37da2899SCharles.Forsyth 926*37da2899SCharles.Forsyth /* */ 927*37da2899SCharles.Forsyth 928*37da2899SCharles.Forsyth 929*37da2899SCharles.Forsyth /*************************************************************************/ 930*37da2899SCharles.Forsyth /* */ 931*37da2899SCharles.Forsyth /* @macro: */ 932*37da2899SCharles.Forsyth /* FT_HAS_HORIZONTAL( face ) */ 933*37da2899SCharles.Forsyth /* */ 934*37da2899SCharles.Forsyth /* @description: */ 935*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains */ 936*37da2899SCharles.Forsyth /* horizontal metrics (this is true for all font formats though). */ 937*37da2899SCharles.Forsyth /* */ 938*37da2899SCharles.Forsyth /* @also: */ 939*37da2899SCharles.Forsyth /* @FT_HAS_VERTICAL can be used to check for vertical metrics. */ 940*37da2899SCharles.Forsyth /* */ 941*37da2899SCharles.Forsyth #define FT_HAS_HORIZONTAL( face ) \ 942*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_HORIZONTAL ) 943*37da2899SCharles.Forsyth 944*37da2899SCharles.Forsyth 945*37da2899SCharles.Forsyth /*************************************************************************/ 946*37da2899SCharles.Forsyth /* */ 947*37da2899SCharles.Forsyth /* @macro: */ 948*37da2899SCharles.Forsyth /* FT_HAS_VERTICAL( face ) */ 949*37da2899SCharles.Forsyth /* */ 950*37da2899SCharles.Forsyth /* @description: */ 951*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains vertical */ 952*37da2899SCharles.Forsyth /* metrics. */ 953*37da2899SCharles.Forsyth /* */ 954*37da2899SCharles.Forsyth #define FT_HAS_VERTICAL( face ) \ 955*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_VERTICAL ) 956*37da2899SCharles.Forsyth 957*37da2899SCharles.Forsyth 958*37da2899SCharles.Forsyth /*************************************************************************/ 959*37da2899SCharles.Forsyth /* */ 960*37da2899SCharles.Forsyth /* @macro: */ 961*37da2899SCharles.Forsyth /* FT_HAS_KERNING( face ) */ 962*37da2899SCharles.Forsyth /* */ 963*37da2899SCharles.Forsyth /* @description: */ 964*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains kerning */ 965*37da2899SCharles.Forsyth /* data that can be accessed with @FT_Get_Kerning. */ 966*37da2899SCharles.Forsyth /* */ 967*37da2899SCharles.Forsyth #define FT_HAS_KERNING( face ) \ 968*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_KERNING ) 969*37da2899SCharles.Forsyth 970*37da2899SCharles.Forsyth 971*37da2899SCharles.Forsyth /*************************************************************************/ 972*37da2899SCharles.Forsyth /* */ 973*37da2899SCharles.Forsyth /* @macro: */ 974*37da2899SCharles.Forsyth /* FT_IS_SCALABLE( face ) */ 975*37da2899SCharles.Forsyth /* */ 976*37da2899SCharles.Forsyth /* @description: */ 977*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains a */ 978*37da2899SCharles.Forsyth /* scalable font face (true for TrueType, Type 1, CID, and */ 979*37da2899SCharles.Forsyth /* OpenType/CFF font formats. */ 980*37da2899SCharles.Forsyth /* */ 981*37da2899SCharles.Forsyth #define FT_IS_SCALABLE( face ) \ 982*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_SCALABLE ) 983*37da2899SCharles.Forsyth 984*37da2899SCharles.Forsyth 985*37da2899SCharles.Forsyth /*************************************************************************/ 986*37da2899SCharles.Forsyth /* */ 987*37da2899SCharles.Forsyth /* @macro: */ 988*37da2899SCharles.Forsyth /* FT_IS_SFNT( face ) */ 989*37da2899SCharles.Forsyth /* */ 990*37da2899SCharles.Forsyth /* @description: */ 991*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains a font */ 992*37da2899SCharles.Forsyth /* whose format is based on the SFNT storage scheme. This usually */ 993*37da2899SCharles.Forsyth /* means: TrueType fonts, OpenType fonts, as well as SFNT-based */ 994*37da2899SCharles.Forsyth /* embedded bitmap fonts. */ 995*37da2899SCharles.Forsyth /* */ 996*37da2899SCharles.Forsyth /* If this macro is true, all functions defined in @FT_SFNT_NAMES_H */ 997*37da2899SCharles.Forsyth /* and @FT_TRUETYPE_TABLES_H are available. */ 998*37da2899SCharles.Forsyth /* */ 999*37da2899SCharles.Forsyth #define FT_IS_SFNT( face ) \ 1000*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_SFNT ) 1001*37da2899SCharles.Forsyth 1002*37da2899SCharles.Forsyth 1003*37da2899SCharles.Forsyth /*************************************************************************/ 1004*37da2899SCharles.Forsyth /* */ 1005*37da2899SCharles.Forsyth /* @macro: */ 1006*37da2899SCharles.Forsyth /* FT_IS_FIXED_WIDTH( face ) */ 1007*37da2899SCharles.Forsyth /* */ 1008*37da2899SCharles.Forsyth /* @description: */ 1009*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains a font */ 1010*37da2899SCharles.Forsyth /* face that contains fixed-width (or "monospace", "fixed-pitch", */ 1011*37da2899SCharles.Forsyth /* etc.) glyphs. */ 1012*37da2899SCharles.Forsyth /* */ 1013*37da2899SCharles.Forsyth #define FT_IS_FIXED_WIDTH( face ) \ 1014*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) 1015*37da2899SCharles.Forsyth 1016*37da2899SCharles.Forsyth 1017*37da2899SCharles.Forsyth /*************************************************************************/ 1018*37da2899SCharles.Forsyth /* */ 1019*37da2899SCharles.Forsyth /* @macro: */ 1020*37da2899SCharles.Forsyth /* FT_IS_FIXED_SIZES( face ) */ 1021*37da2899SCharles.Forsyth /* */ 1022*37da2899SCharles.Forsyth /* @description: */ 1023*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains some */ 1024*37da2899SCharles.Forsyth /* embedded bitmaps. See the `fixed_sizes' field of the @FT_FaceRec */ 1025*37da2899SCharles.Forsyth /* structure. */ 1026*37da2899SCharles.Forsyth /* */ 1027*37da2899SCharles.Forsyth #define FT_HAS_FIXED_SIZES( face ) \ 1028*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES ) 1029*37da2899SCharles.Forsyth 1030*37da2899SCharles.Forsyth 1031*37da2899SCharles.Forsyth /* */ 1032*37da2899SCharles.Forsyth 1033*37da2899SCharles.Forsyth 1034*37da2899SCharles.Forsyth /*************************************************************************/ 1035*37da2899SCharles.Forsyth /* */ 1036*37da2899SCharles.Forsyth /* @macro: */ 1037*37da2899SCharles.Forsyth /* FT_HAS_FAST_GLYPHS( face ) */ 1038*37da2899SCharles.Forsyth /* */ 1039*37da2899SCharles.Forsyth /* @description: */ 1040*37da2899SCharles.Forsyth /* Deprecated; indicates that the face contains so-called "fast" */ 1041*37da2899SCharles.Forsyth /* glyph bitmaps. */ 1042*37da2899SCharles.Forsyth /* */ 1043*37da2899SCharles.Forsyth #define FT_HAS_FAST_GLYPHS( face ) \ 1044*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_FAST_GLYPHS ) 1045*37da2899SCharles.Forsyth 1046*37da2899SCharles.Forsyth 1047*37da2899SCharles.Forsyth /*************************************************************************/ 1048*37da2899SCharles.Forsyth /* */ 1049*37da2899SCharles.Forsyth /* @macro: */ 1050*37da2899SCharles.Forsyth /* FT_HAS_GLYPH_NAMES( face ) */ 1051*37da2899SCharles.Forsyth /* */ 1052*37da2899SCharles.Forsyth /* @description: */ 1053*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains some */ 1054*37da2899SCharles.Forsyth /* glyph names that can be accessed through @FT_Get_Glyph_Names. */ 1055*37da2899SCharles.Forsyth /* */ 1056*37da2899SCharles.Forsyth #define FT_HAS_GLYPH_NAMES( face ) \ 1057*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) 1058*37da2899SCharles.Forsyth 1059*37da2899SCharles.Forsyth 1060*37da2899SCharles.Forsyth /*************************************************************************/ 1061*37da2899SCharles.Forsyth /* */ 1062*37da2899SCharles.Forsyth /* @macro: */ 1063*37da2899SCharles.Forsyth /* FT_HAS_MULTIPLE_MASTERS( face ) */ 1064*37da2899SCharles.Forsyth /* */ 1065*37da2899SCharles.Forsyth /* @description: */ 1066*37da2899SCharles.Forsyth /* A macro that returns true whenever a face object contains some */ 1067*37da2899SCharles.Forsyth /* multiple masters. The functions provided by */ 1068*37da2899SCharles.Forsyth /* @FT_MULTIPLE_MASTERS_H are then available to choose the exact */ 1069*37da2899SCharles.Forsyth /* design you want. */ 1070*37da2899SCharles.Forsyth /* */ 1071*37da2899SCharles.Forsyth #define FT_HAS_MULTIPLE_MASTERS( face ) \ 1072*37da2899SCharles.Forsyth ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) 1073*37da2899SCharles.Forsyth 1074*37da2899SCharles.Forsyth 1075*37da2899SCharles.Forsyth /*************************************************************************/ 1076*37da2899SCharles.Forsyth /* */ 1077*37da2899SCharles.Forsyth /* <Constant> */ 1078*37da2899SCharles.Forsyth /* FT_STYLE_FLAG_XXX */ 1079*37da2899SCharles.Forsyth /* */ 1080*37da2899SCharles.Forsyth /* <Description> */ 1081*37da2899SCharles.Forsyth /* A list of bit-flags used to indicate the style of a given face. */ 1082*37da2899SCharles.Forsyth /* These are used in the `style_flags' field of @FT_FaceRec. */ 1083*37da2899SCharles.Forsyth /* */ 1084*37da2899SCharles.Forsyth /* <Values> */ 1085*37da2899SCharles.Forsyth /* FT_STYLE_FLAG_ITALIC :: */ 1086*37da2899SCharles.Forsyth /* Indicates that a given face is italicized. */ 1087*37da2899SCharles.Forsyth /* */ 1088*37da2899SCharles.Forsyth /* FT_STYLE_FLAG_BOLD :: */ 1089*37da2899SCharles.Forsyth /* Indicates that a given face is bold. */ 1090*37da2899SCharles.Forsyth /* */ 1091*37da2899SCharles.Forsyth #define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) 1092*37da2899SCharles.Forsyth #define FT_STYLE_FLAG_BOLD ( 1 << 1 ) 1093*37da2899SCharles.Forsyth 1094*37da2899SCharles.Forsyth 1095*37da2899SCharles.Forsyth /*************************************************************************/ 1096*37da2899SCharles.Forsyth /* */ 1097*37da2899SCharles.Forsyth /* <Type> */ 1098*37da2899SCharles.Forsyth /* FT_Size_Internal */ 1099*37da2899SCharles.Forsyth /* */ 1100*37da2899SCharles.Forsyth /* <Description> */ 1101*37da2899SCharles.Forsyth /* An opaque handle to an FT_Size_InternalRec structure, used to */ 1102*37da2899SCharles.Forsyth /* model private data of a given FT_Size object. */ 1103*37da2899SCharles.Forsyth /* */ 1104*37da2899SCharles.Forsyth typedef struct FT_Size_InternalRec_* FT_Size_Internal; 1105*37da2899SCharles.Forsyth 1106*37da2899SCharles.Forsyth 1107*37da2899SCharles.Forsyth /*************************************************************************/ 1108*37da2899SCharles.Forsyth /* */ 1109*37da2899SCharles.Forsyth /* FreeType base size metrics */ 1110*37da2899SCharles.Forsyth /* */ 1111*37da2899SCharles.Forsyth /* <Struct> */ 1112*37da2899SCharles.Forsyth /* FT_Size_Metrics */ 1113*37da2899SCharles.Forsyth /* */ 1114*37da2899SCharles.Forsyth /* <Description> */ 1115*37da2899SCharles.Forsyth /* The size metrics structure returned scaled important distances for */ 1116*37da2899SCharles.Forsyth /* a given size object. */ 1117*37da2899SCharles.Forsyth /* */ 1118*37da2899SCharles.Forsyth /* <Fields> */ 1119*37da2899SCharles.Forsyth /* x_ppem :: The character width, expressed in integer pixels. */ 1120*37da2899SCharles.Forsyth /* This is the width of the EM square expressed in */ 1121*37da2899SCharles.Forsyth /* pixels, hence the term `ppem' (pixels per EM). */ 1122*37da2899SCharles.Forsyth /* */ 1123*37da2899SCharles.Forsyth /* y_ppem :: The character height, expressed in integer pixels. */ 1124*37da2899SCharles.Forsyth /* This is the height of the EM square expressed in */ 1125*37da2899SCharles.Forsyth /* pixels, hence the term `ppem' (pixels per EM). */ 1126*37da2899SCharles.Forsyth /* */ 1127*37da2899SCharles.Forsyth /* x_scale :: A simple 16.16 fixed point format coefficient used */ 1128*37da2899SCharles.Forsyth /* to scale horizontal distances expressed in font */ 1129*37da2899SCharles.Forsyth /* units to fractional (26.6) pixel coordinates. */ 1130*37da2899SCharles.Forsyth /* */ 1131*37da2899SCharles.Forsyth /* y_scale :: A simple 16.16 fixed point format coefficient used */ 1132*37da2899SCharles.Forsyth /* to scale vertical distances expressed in font */ 1133*37da2899SCharles.Forsyth /* units to fractional (26.6) pixel coordinates. */ 1134*37da2899SCharles.Forsyth /* */ 1135*37da2899SCharles.Forsyth /* ascender :: The ascender, expressed in 26.6 fixed point */ 1136*37da2899SCharles.Forsyth /* pixels. Always positive. */ 1137*37da2899SCharles.Forsyth /* */ 1138*37da2899SCharles.Forsyth /* descender :: The descender, expressed in 26.6 fixed point */ 1139*37da2899SCharles.Forsyth /* pixels. Always positive. */ 1140*37da2899SCharles.Forsyth /* */ 1141*37da2899SCharles.Forsyth /* height :: The text height, expressed in 26.6 fixed point */ 1142*37da2899SCharles.Forsyth /* pixels. Always positive. */ 1143*37da2899SCharles.Forsyth /* */ 1144*37da2899SCharles.Forsyth /* max_advance :: Maximum horizontal advance, expressed in 26.6 */ 1145*37da2899SCharles.Forsyth /* fixed point pixels. Always positive. */ 1146*37da2899SCharles.Forsyth /* */ 1147*37da2899SCharles.Forsyth /* <Note> */ 1148*37da2899SCharles.Forsyth /* The values of `ascender', `descender', and `height' are only the */ 1149*37da2899SCharles.Forsyth /* scaled versions of `face->ascender', `face->descender', and */ 1150*37da2899SCharles.Forsyth /* `face->height'. */ 1151*37da2899SCharles.Forsyth /* */ 1152*37da2899SCharles.Forsyth /* Unfortunately, due to glyph hinting, these values might not be */ 1153*37da2899SCharles.Forsyth /* exact for certain fonts, they thus must be treated as unreliable */ 1154*37da2899SCharles.Forsyth /* with an error margin of at least one pixel! */ 1155*37da2899SCharles.Forsyth /* */ 1156*37da2899SCharles.Forsyth /* Indeed, the only way to get the exact pixel ascender and descender */ 1157*37da2899SCharles.Forsyth /* is to render _all_ glyphs. As this would be a definite */ 1158*37da2899SCharles.Forsyth /* performance hit, it is up to client applications to perform such */ 1159*37da2899SCharles.Forsyth /* computations. */ 1160*37da2899SCharles.Forsyth /* */ 1161*37da2899SCharles.Forsyth typedef struct FT_Size_Metrics_ 1162*37da2899SCharles.Forsyth { 1163*37da2899SCharles.Forsyth FT_UShort x_ppem; /* horizontal pixels per EM */ 1164*37da2899SCharles.Forsyth FT_UShort y_ppem; /* vertical pixels per EM */ 1165*37da2899SCharles.Forsyth 1166*37da2899SCharles.Forsyth FT_Fixed x_scale; /* two scales used to convert font units */ 1167*37da2899SCharles.Forsyth FT_Fixed y_scale; /* to 26.6 frac. pixel coordinates.. */ 1168*37da2899SCharles.Forsyth 1169*37da2899SCharles.Forsyth FT_Pos ascender; /* ascender in 26.6 frac. pixels */ 1170*37da2899SCharles.Forsyth FT_Pos descender; /* descender in 26.6 frac. pixels */ 1171*37da2899SCharles.Forsyth FT_Pos height; /* text height in 26.6 frac. pixels */ 1172*37da2899SCharles.Forsyth FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */ 1173*37da2899SCharles.Forsyth 1174*37da2899SCharles.Forsyth } FT_Size_Metrics; 1175*37da2899SCharles.Forsyth 1176*37da2899SCharles.Forsyth 1177*37da2899SCharles.Forsyth /*************************************************************************/ 1178*37da2899SCharles.Forsyth /* */ 1179*37da2899SCharles.Forsyth /* <Struct> */ 1180*37da2899SCharles.Forsyth /* FT_SizeRec */ 1181*37da2899SCharles.Forsyth /* */ 1182*37da2899SCharles.Forsyth /* <Description> */ 1183*37da2899SCharles.Forsyth /* FreeType root size class structure. A size object models the */ 1184*37da2899SCharles.Forsyth /* resolution and pointsize dependent data of a given face. */ 1185*37da2899SCharles.Forsyth /* */ 1186*37da2899SCharles.Forsyth /* <Fields> */ 1187*37da2899SCharles.Forsyth /* face :: Handle to the parent face object. */ 1188*37da2899SCharles.Forsyth /* */ 1189*37da2899SCharles.Forsyth /* generic :: A typeless pointer, which is unused by the FreeType */ 1190*37da2899SCharles.Forsyth /* library or any of its drivers. It can be used by */ 1191*37da2899SCharles.Forsyth /* client applications to link their own data to each size */ 1192*37da2899SCharles.Forsyth /* object. */ 1193*37da2899SCharles.Forsyth /* */ 1194*37da2899SCharles.Forsyth /* metrics :: Metrics for this size object. This field is read-only. */ 1195*37da2899SCharles.Forsyth /* */ 1196*37da2899SCharles.Forsyth typedef struct FT_SizeRec_ 1197*37da2899SCharles.Forsyth { 1198*37da2899SCharles.Forsyth FT_Face face; /* parent face object */ 1199*37da2899SCharles.Forsyth FT_Generic generic; /* generic pointer for client uses */ 1200*37da2899SCharles.Forsyth FT_Size_Metrics metrics; /* size metrics */ 1201*37da2899SCharles.Forsyth FT_Size_Internal internal; 1202*37da2899SCharles.Forsyth 1203*37da2899SCharles.Forsyth } FT_SizeRec; 1204*37da2899SCharles.Forsyth 1205*37da2899SCharles.Forsyth 1206*37da2899SCharles.Forsyth /*************************************************************************/ 1207*37da2899SCharles.Forsyth /* */ 1208*37da2899SCharles.Forsyth /* <Struct> */ 1209*37da2899SCharles.Forsyth /* FT_SubGlyph */ 1210*37da2899SCharles.Forsyth /* */ 1211*37da2899SCharles.Forsyth /* <Description> */ 1212*37da2899SCharles.Forsyth /* The subglyph structure is an internal object used to describe */ 1213*37da2899SCharles.Forsyth /* subglyphs (for example, in the case of composites). */ 1214*37da2899SCharles.Forsyth /* */ 1215*37da2899SCharles.Forsyth /* <Note> */ 1216*37da2899SCharles.Forsyth /* The subglyph implementation is not part of the high-level API, */ 1217*37da2899SCharles.Forsyth /* hence the forward structure declaration. */ 1218*37da2899SCharles.Forsyth /* */ 1219*37da2899SCharles.Forsyth typedef struct FT_SubGlyphRec_* FT_SubGlyph; 1220*37da2899SCharles.Forsyth 1221*37da2899SCharles.Forsyth 1222*37da2899SCharles.Forsyth /*************************************************************************/ 1223*37da2899SCharles.Forsyth /* */ 1224*37da2899SCharles.Forsyth /* <Type> */ 1225*37da2899SCharles.Forsyth /* FT_Slot_Internal */ 1226*37da2899SCharles.Forsyth /* */ 1227*37da2899SCharles.Forsyth /* <Description> */ 1228*37da2899SCharles.Forsyth /* An opaque handle to an FT_Slot_InternalRec structure, used to */ 1229*37da2899SCharles.Forsyth /* model private data of a given FT_GlyphSlot object. */ 1230*37da2899SCharles.Forsyth /* */ 1231*37da2899SCharles.Forsyth typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; 1232*37da2899SCharles.Forsyth 1233*37da2899SCharles.Forsyth 1234*37da2899SCharles.Forsyth /*************************************************************************/ 1235*37da2899SCharles.Forsyth /* */ 1236*37da2899SCharles.Forsyth /* <Struct> */ 1237*37da2899SCharles.Forsyth /* FT_GlyphSlotRec */ 1238*37da2899SCharles.Forsyth /* */ 1239*37da2899SCharles.Forsyth /* <Description> */ 1240*37da2899SCharles.Forsyth /* FreeType root glyph slot class structure. A glyph slot is a */ 1241*37da2899SCharles.Forsyth /* container where individual glyphs can be loaded, be they */ 1242*37da2899SCharles.Forsyth /* vectorial or bitmap/graymaps. */ 1243*37da2899SCharles.Forsyth /* */ 1244*37da2899SCharles.Forsyth /* <Fields> */ 1245*37da2899SCharles.Forsyth /* library :: A handle to the FreeType library instance */ 1246*37da2899SCharles.Forsyth /* this slot belongs to. */ 1247*37da2899SCharles.Forsyth /* */ 1248*37da2899SCharles.Forsyth /* face :: A handle to the parent face object. */ 1249*37da2899SCharles.Forsyth /* */ 1250*37da2899SCharles.Forsyth /* next :: In some cases (like some font tools), several */ 1251*37da2899SCharles.Forsyth /* glyph slots per face object can be a good */ 1252*37da2899SCharles.Forsyth /* thing. As this is rare, the glyph slots are */ 1253*37da2899SCharles.Forsyth /* listed through a direct, single-linked list */ 1254*37da2899SCharles.Forsyth /* using its `next' field. */ 1255*37da2899SCharles.Forsyth /* */ 1256*37da2899SCharles.Forsyth /* generic :: A typeless pointer which is unused by the */ 1257*37da2899SCharles.Forsyth /* FreeType library or any of its drivers. It */ 1258*37da2899SCharles.Forsyth /* can be used by client applications to link */ 1259*37da2899SCharles.Forsyth /* their own data to each glyph slot object. */ 1260*37da2899SCharles.Forsyth /* */ 1261*37da2899SCharles.Forsyth /* metrics :: The metrics of the last loaded glyph in the */ 1262*37da2899SCharles.Forsyth /* slot. The returned values depend on the last */ 1263*37da2899SCharles.Forsyth /* load flags (see the @FT_Load_Glyph API */ 1264*37da2899SCharles.Forsyth /* function) and can be expressed either in 26.6 */ 1265*37da2899SCharles.Forsyth /* fractional pixels or font units. */ 1266*37da2899SCharles.Forsyth /* */ 1267*37da2899SCharles.Forsyth /* Note that even when the glyph image is */ 1268*37da2899SCharles.Forsyth /* transformed, the metrics are not. */ 1269*37da2899SCharles.Forsyth /* */ 1270*37da2899SCharles.Forsyth /* linearHoriAdvance :: For scalable formats only, this field holds */ 1271*37da2899SCharles.Forsyth /* the linearly scaled horizontal advance width */ 1272*37da2899SCharles.Forsyth /* for the glyph (i.e. the scaled and unhinted */ 1273*37da2899SCharles.Forsyth /* value of the hori advance). This can be */ 1274*37da2899SCharles.Forsyth /* important to perform correct WYSIWYG layout. */ 1275*37da2899SCharles.Forsyth /* */ 1276*37da2899SCharles.Forsyth /* Note that this value is expressed by default */ 1277*37da2899SCharles.Forsyth /* in 16.16 pixels. However, when the glyph is */ 1278*37da2899SCharles.Forsyth /* loaded with the FT_LOAD_LINEAR_DESIGN flag, */ 1279*37da2899SCharles.Forsyth /* this field contains simply the value of the */ 1280*37da2899SCharles.Forsyth /* advance in original font units. */ 1281*37da2899SCharles.Forsyth /* */ 1282*37da2899SCharles.Forsyth /* linearVertAdvance :: For scalable formats only, this field holds */ 1283*37da2899SCharles.Forsyth /* the linearly scaled vertical advance height */ 1284*37da2899SCharles.Forsyth /* for the glyph. See linearHoriAdvance for */ 1285*37da2899SCharles.Forsyth /* comments. */ 1286*37da2899SCharles.Forsyth /* */ 1287*37da2899SCharles.Forsyth /* advance :: This is the transformed advance width for the */ 1288*37da2899SCharles.Forsyth /* glyph. */ 1289*37da2899SCharles.Forsyth /* */ 1290*37da2899SCharles.Forsyth /* format :: This field indicates the format of the image */ 1291*37da2899SCharles.Forsyth /* contained in the glyph slot. Typically */ 1292*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_BITMAP, */ 1293*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_OUTLINE, and */ 1294*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_COMPOSITE, but others are */ 1295*37da2899SCharles.Forsyth /* possible. */ 1296*37da2899SCharles.Forsyth /* */ 1297*37da2899SCharles.Forsyth /* bitmap :: This field is used as a bitmap descriptor */ 1298*37da2899SCharles.Forsyth /* when the slot format is */ 1299*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_BITMAP. Note that the */ 1300*37da2899SCharles.Forsyth /* address and content of the bitmap buffer can */ 1301*37da2899SCharles.Forsyth /* change between calls of @FT_Load_Glyph and a */ 1302*37da2899SCharles.Forsyth /* few other functions. */ 1303*37da2899SCharles.Forsyth /* */ 1304*37da2899SCharles.Forsyth /* bitmap_left :: This is the bitmap's left bearing expressed */ 1305*37da2899SCharles.Forsyth /* in integer pixels. Of course, this is only */ 1306*37da2899SCharles.Forsyth /* valid if the format is */ 1307*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_BITMAP. */ 1308*37da2899SCharles.Forsyth /* */ 1309*37da2899SCharles.Forsyth /* bitmap_top :: This is the bitmap's top bearing expressed in */ 1310*37da2899SCharles.Forsyth /* integer pixels. Remember that this is the */ 1311*37da2899SCharles.Forsyth /* distance from the baseline to the top-most */ 1312*37da2899SCharles.Forsyth /* glyph scanline, upwards y-coordinates being */ 1313*37da2899SCharles.Forsyth /* *positive*. */ 1314*37da2899SCharles.Forsyth /* */ 1315*37da2899SCharles.Forsyth /* outline :: The outline descriptor for the current glyph */ 1316*37da2899SCharles.Forsyth /* image if its format is */ 1317*37da2899SCharles.Forsyth /* ft_glyph_bitmap_outline. */ 1318*37da2899SCharles.Forsyth /* */ 1319*37da2899SCharles.Forsyth /* num_subglyphs :: The number of subglyphs in a composite glyph. */ 1320*37da2899SCharles.Forsyth /* This format is only valid for the composite */ 1321*37da2899SCharles.Forsyth /* glyph format, that should normally only be */ 1322*37da2899SCharles.Forsyth /* loaded with the FT_LOAD_NO_RECURSE flag. */ 1323*37da2899SCharles.Forsyth /* */ 1324*37da2899SCharles.Forsyth /* subglyphs :: An array of subglyph descriptors for */ 1325*37da2899SCharles.Forsyth /* composite glyphs. There are `num_subglyphs' */ 1326*37da2899SCharles.Forsyth /* elements in there. */ 1327*37da2899SCharles.Forsyth /* */ 1328*37da2899SCharles.Forsyth /* control_data :: Certain font drivers can also return the */ 1329*37da2899SCharles.Forsyth /* control data for a given glyph image (e.g. */ 1330*37da2899SCharles.Forsyth /* TrueType bytecode, Type 1 charstrings, etc.). */ 1331*37da2899SCharles.Forsyth /* This field is a pointer to such data. */ 1332*37da2899SCharles.Forsyth /* */ 1333*37da2899SCharles.Forsyth /* control_len :: This is the length in bytes of the control */ 1334*37da2899SCharles.Forsyth /* data. */ 1335*37da2899SCharles.Forsyth /* */ 1336*37da2899SCharles.Forsyth /* other :: Really wicked formats can use this pointer to */ 1337*37da2899SCharles.Forsyth /* present their own glyph image to client apps. */ 1338*37da2899SCharles.Forsyth /* Note that the app will need to know about the */ 1339*37da2899SCharles.Forsyth /* image format. */ 1340*37da2899SCharles.Forsyth /* */ 1341*37da2899SCharles.Forsyth /* <Note> */ 1342*37da2899SCharles.Forsyth /* If @FT_Load_Glyph is called with default flags (see */ 1343*37da2899SCharles.Forsyth /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */ 1344*37da2899SCharles.Forsyth /* its native format (e.g. a vectorial outline for TrueType and */ 1345*37da2899SCharles.Forsyth /* Type 1 formats). */ 1346*37da2899SCharles.Forsyth /* */ 1347*37da2899SCharles.Forsyth /* This image can later be converted into a bitmap by calling */ 1348*37da2899SCharles.Forsyth /* @FT_Render_Glyph. This function finds the current renderer for */ 1349*37da2899SCharles.Forsyth /* the native image's format then invokes it. */ 1350*37da2899SCharles.Forsyth /* */ 1351*37da2899SCharles.Forsyth /* The renderer is in charge of transforming the native image through */ 1352*37da2899SCharles.Forsyth /* the slot's face transformation fields, then convert it into a */ 1353*37da2899SCharles.Forsyth /* bitmap that is returned in `slot->bitmap'. */ 1354*37da2899SCharles.Forsyth /* */ 1355*37da2899SCharles.Forsyth /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */ 1356*37da2899SCharles.Forsyth /* to specify the position of the bitmap relative to the current pen */ 1357*37da2899SCharles.Forsyth /* position (e.g. coordinates [0,0] on the baseline). Of course, */ 1358*37da2899SCharles.Forsyth /* `slot->format' is also changed to `FT_GLYPH_FORMAT_BITMAP' . */ 1359*37da2899SCharles.Forsyth /* */ 1360*37da2899SCharles.Forsyth typedef struct FT_GlyphSlotRec_ 1361*37da2899SCharles.Forsyth { 1362*37da2899SCharles.Forsyth FT_Library library; 1363*37da2899SCharles.Forsyth FT_Face face; 1364*37da2899SCharles.Forsyth FT_GlyphSlot next; 1365*37da2899SCharles.Forsyth FT_UInt flags; 1366*37da2899SCharles.Forsyth FT_Generic generic; 1367*37da2899SCharles.Forsyth 1368*37da2899SCharles.Forsyth FT_Glyph_Metrics metrics; 1369*37da2899SCharles.Forsyth FT_Fixed linearHoriAdvance; 1370*37da2899SCharles.Forsyth FT_Fixed linearVertAdvance; 1371*37da2899SCharles.Forsyth FT_Vector advance; 1372*37da2899SCharles.Forsyth 1373*37da2899SCharles.Forsyth FT_Glyph_Format format; 1374*37da2899SCharles.Forsyth 1375*37da2899SCharles.Forsyth FT_Bitmap bitmap; 1376*37da2899SCharles.Forsyth FT_Int bitmap_left; 1377*37da2899SCharles.Forsyth FT_Int bitmap_top; 1378*37da2899SCharles.Forsyth 1379*37da2899SCharles.Forsyth FT_Outline outline; 1380*37da2899SCharles.Forsyth 1381*37da2899SCharles.Forsyth FT_UInt num_subglyphs; 1382*37da2899SCharles.Forsyth FT_SubGlyph subglyphs; 1383*37da2899SCharles.Forsyth 1384*37da2899SCharles.Forsyth void* control_data; 1385*37da2899SCharles.Forsyth long control_len; 1386*37da2899SCharles.Forsyth 1387*37da2899SCharles.Forsyth void* other; 1388*37da2899SCharles.Forsyth 1389*37da2899SCharles.Forsyth FT_Slot_Internal internal; 1390*37da2899SCharles.Forsyth 1391*37da2899SCharles.Forsyth } FT_GlyphSlotRec; 1392*37da2899SCharles.Forsyth 1393*37da2899SCharles.Forsyth 1394*37da2899SCharles.Forsyth /*************************************************************************/ 1395*37da2899SCharles.Forsyth /*************************************************************************/ 1396*37da2899SCharles.Forsyth /* */ 1397*37da2899SCharles.Forsyth /* F U N C T I O N S */ 1398*37da2899SCharles.Forsyth /* */ 1399*37da2899SCharles.Forsyth /*************************************************************************/ 1400*37da2899SCharles.Forsyth /*************************************************************************/ 1401*37da2899SCharles.Forsyth 1402*37da2899SCharles.Forsyth 1403*37da2899SCharles.Forsyth /*************************************************************************/ 1404*37da2899SCharles.Forsyth /* */ 1405*37da2899SCharles.Forsyth /* <Function> */ 1406*37da2899SCharles.Forsyth /* FT_Init_FreeType */ 1407*37da2899SCharles.Forsyth /* */ 1408*37da2899SCharles.Forsyth /* <Description> */ 1409*37da2899SCharles.Forsyth /* Initializes a new FreeType library object. The set of modules */ 1410*37da2899SCharles.Forsyth /* that are registered by this function is determined at build time. */ 1411*37da2899SCharles.Forsyth /* */ 1412*37da2899SCharles.Forsyth /* <Output> */ 1413*37da2899SCharles.Forsyth /* alibrary :: A handle to a new library object. */ 1414*37da2899SCharles.Forsyth /* */ 1415*37da2899SCharles.Forsyth /* <Return> */ 1416*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1417*37da2899SCharles.Forsyth /* */ 1418*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1419*37da2899SCharles.Forsyth FT_Init_FreeType( FT_Library *alibrary ); 1420*37da2899SCharles.Forsyth 1421*37da2899SCharles.Forsyth 1422*37da2899SCharles.Forsyth /*************************************************************************/ 1423*37da2899SCharles.Forsyth /* */ 1424*37da2899SCharles.Forsyth /* <Function> */ 1425*37da2899SCharles.Forsyth /* FT_Library_Version */ 1426*37da2899SCharles.Forsyth /* */ 1427*37da2899SCharles.Forsyth /* <Description> */ 1428*37da2899SCharles.Forsyth /* Return the version of the FreeType library being used. This is */ 1429*37da2899SCharles.Forsyth /* useful when dynamically linking to the library, since one cannot */ 1430*37da2899SCharles.Forsyth /* use the macros FT_FREETYPE_MAJOR, FT_FREETYPE_MINOR, and */ 1431*37da2899SCharles.Forsyth /* FT_FREETYPE_PATCH. */ 1432*37da2899SCharles.Forsyth /* */ 1433*37da2899SCharles.Forsyth /* <Input> */ 1434*37da2899SCharles.Forsyth /* library :: A source library handle. */ 1435*37da2899SCharles.Forsyth /* */ 1436*37da2899SCharles.Forsyth /* <Output> */ 1437*37da2899SCharles.Forsyth /* amajor :: The major version number. */ 1438*37da2899SCharles.Forsyth /* */ 1439*37da2899SCharles.Forsyth /* aminor :: The minor version number. */ 1440*37da2899SCharles.Forsyth /* */ 1441*37da2899SCharles.Forsyth /* apatch :: The patch version number. */ 1442*37da2899SCharles.Forsyth /* */ 1443*37da2899SCharles.Forsyth /* <Note> */ 1444*37da2899SCharles.Forsyth /* The reason why this function takes a 'library' argument is because */ 1445*37da2899SCharles.Forsyth /* certain programs implement library initialization in a custom way */ 1446*37da2899SCharles.Forsyth /* that doesn't use `FT_Init_FreeType'. */ 1447*37da2899SCharles.Forsyth /* */ 1448*37da2899SCharles.Forsyth /* In such cases, the library version might not be available before */ 1449*37da2899SCharles.Forsyth /* the library object has been created. */ 1450*37da2899SCharles.Forsyth /* */ 1451*37da2899SCharles.Forsyth FT_EXPORT( void ) 1452*37da2899SCharles.Forsyth FT_Library_Version( FT_Library library, 1453*37da2899SCharles.Forsyth FT_Int *amajor, 1454*37da2899SCharles.Forsyth FT_Int *aminor, 1455*37da2899SCharles.Forsyth FT_Int *apatch ); 1456*37da2899SCharles.Forsyth 1457*37da2899SCharles.Forsyth 1458*37da2899SCharles.Forsyth /*************************************************************************/ 1459*37da2899SCharles.Forsyth /* */ 1460*37da2899SCharles.Forsyth /* <Function> */ 1461*37da2899SCharles.Forsyth /* FT_Done_FreeType */ 1462*37da2899SCharles.Forsyth /* */ 1463*37da2899SCharles.Forsyth /* <Description> */ 1464*37da2899SCharles.Forsyth /* Destroys a given FreeType library object and all of its childs, */ 1465*37da2899SCharles.Forsyth /* including resources, drivers, faces, sizes, etc. */ 1466*37da2899SCharles.Forsyth /* */ 1467*37da2899SCharles.Forsyth /* <Input> */ 1468*37da2899SCharles.Forsyth /* library :: A handle to the target library object. */ 1469*37da2899SCharles.Forsyth /* */ 1470*37da2899SCharles.Forsyth /* <Return> */ 1471*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1472*37da2899SCharles.Forsyth /* */ 1473*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1474*37da2899SCharles.Forsyth FT_Done_FreeType( FT_Library library ); 1475*37da2899SCharles.Forsyth 1476*37da2899SCharles.Forsyth 1477*37da2899SCharles.Forsyth /*************************************************************************/ 1478*37da2899SCharles.Forsyth /* */ 1479*37da2899SCharles.Forsyth /* <Enum> */ 1480*37da2899SCharles.Forsyth /* FT_Open_Flags */ 1481*37da2899SCharles.Forsyth /* */ 1482*37da2899SCharles.Forsyth /* <Description> */ 1483*37da2899SCharles.Forsyth /* An enumeration used to list the bit flags used within the */ 1484*37da2899SCharles.Forsyth /* `flags' field of the @FT_Open_Args structure. */ 1485*37da2899SCharles.Forsyth /* */ 1486*37da2899SCharles.Forsyth /* <Fields> */ 1487*37da2899SCharles.Forsyth /* FT_OPEN_MEMORY :: This is a memory-based stream. */ 1488*37da2899SCharles.Forsyth /* */ 1489*37da2899SCharles.Forsyth /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */ 1490*37da2899SCharles.Forsyth /* */ 1491*37da2899SCharles.Forsyth /* FT_OPEN_PATHNAME :: Create a new input stream from a C */ 1492*37da2899SCharles.Forsyth /* path name. */ 1493*37da2899SCharles.Forsyth /* */ 1494*37da2899SCharles.Forsyth /* FT_OPEN_DRIVER :: Use the `driver' field. */ 1495*37da2899SCharles.Forsyth /* */ 1496*37da2899SCharles.Forsyth /* FT_OPEN_PARAMS :: Use the `num_params' & `params' field. */ 1497*37da2899SCharles.Forsyth /* */ 1498*37da2899SCharles.Forsyth /* <Note> */ 1499*37da2899SCharles.Forsyth /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */ 1500*37da2899SCharles.Forsyth /* flags are mutually exclusive. */ 1501*37da2899SCharles.Forsyth /* */ 1502*37da2899SCharles.Forsyth typedef enum 1503*37da2899SCharles.Forsyth { 1504*37da2899SCharles.Forsyth FT_OPEN_MEMORY = 1, 1505*37da2899SCharles.Forsyth FT_OPEN_STREAM = 2, 1506*37da2899SCharles.Forsyth FT_OPEN_PATHNAME = 4, 1507*37da2899SCharles.Forsyth FT_OPEN_DRIVER = 8, 1508*37da2899SCharles.Forsyth FT_OPEN_PARAMS = 16 1509*37da2899SCharles.Forsyth 1510*37da2899SCharles.Forsyth } FT_Open_Flags; 1511*37da2899SCharles.Forsyth 1512*37da2899SCharles.Forsyth #define FT_OPEN_MEMORY FT_OPEN_MEMORY 1513*37da2899SCharles.Forsyth #define FT_OPEN_STREAM FT_OPEN_STREAM 1514*37da2899SCharles.Forsyth #define FT_OPEN_PATHNAME FT_OPEN_PATHNAME 1515*37da2899SCharles.Forsyth #define FT_OPEN_DRIVER FT_OPEN_DRIVER 1516*37da2899SCharles.Forsyth #define FT_OPEN_PARAMS FT_OPEN_PARAMS 1517*37da2899SCharles.Forsyth 1518*37da2899SCharles.Forsyth 1519*37da2899SCharles.Forsyth /*************************************************************************/ 1520*37da2899SCharles.Forsyth /* */ 1521*37da2899SCharles.Forsyth /* <Struct> */ 1522*37da2899SCharles.Forsyth /* FT_Parameter */ 1523*37da2899SCharles.Forsyth /* */ 1524*37da2899SCharles.Forsyth /* <Description> */ 1525*37da2899SCharles.Forsyth /* A simple structure used to pass more or less generic parameters */ 1526*37da2899SCharles.Forsyth /* to @FT_Open_Face. */ 1527*37da2899SCharles.Forsyth /* */ 1528*37da2899SCharles.Forsyth /* <Fields> */ 1529*37da2899SCharles.Forsyth /* tag :: A 4-byte identification tag. */ 1530*37da2899SCharles.Forsyth /* */ 1531*37da2899SCharles.Forsyth /* data :: A pointer to the parameter data. */ 1532*37da2899SCharles.Forsyth /* */ 1533*37da2899SCharles.Forsyth /* <Note> */ 1534*37da2899SCharles.Forsyth /* The id and function of parameters are driver-specific. */ 1535*37da2899SCharles.Forsyth /* */ 1536*37da2899SCharles.Forsyth typedef struct FT_Parameter_ 1537*37da2899SCharles.Forsyth { 1538*37da2899SCharles.Forsyth FT_ULong tag; 1539*37da2899SCharles.Forsyth FT_Pointer data; 1540*37da2899SCharles.Forsyth 1541*37da2899SCharles.Forsyth } FT_Parameter; 1542*37da2899SCharles.Forsyth 1543*37da2899SCharles.Forsyth 1544*37da2899SCharles.Forsyth /*************************************************************************/ 1545*37da2899SCharles.Forsyth /* */ 1546*37da2899SCharles.Forsyth /* <Struct> */ 1547*37da2899SCharles.Forsyth /* FT_Open_Args */ 1548*37da2899SCharles.Forsyth /* */ 1549*37da2899SCharles.Forsyth /* <Description> */ 1550*37da2899SCharles.Forsyth /* A structure used to indicate how to open a new font file/stream. */ 1551*37da2899SCharles.Forsyth /* A pointer to such a structure can be used as a parameter for the */ 1552*37da2899SCharles.Forsyth /* functions @FT_Open_Face and @FT_Attach_Stream. */ 1553*37da2899SCharles.Forsyth /* */ 1554*37da2899SCharles.Forsyth /* <Fields> */ 1555*37da2899SCharles.Forsyth /* flags :: A set of bit flags indicating how to use the */ 1556*37da2899SCharles.Forsyth /* structure. */ 1557*37da2899SCharles.Forsyth /* */ 1558*37da2899SCharles.Forsyth /* memory_base :: The first byte of the file in memory. */ 1559*37da2899SCharles.Forsyth /* */ 1560*37da2899SCharles.Forsyth /* memory_size :: The size in bytes of the file in memory. */ 1561*37da2899SCharles.Forsyth /* */ 1562*37da2899SCharles.Forsyth /* pathname :: A pointer to an 8-bit file pathname. */ 1563*37da2899SCharles.Forsyth /* */ 1564*37da2899SCharles.Forsyth /* stream :: A handle to a source stream object. */ 1565*37da2899SCharles.Forsyth /* */ 1566*37da2899SCharles.Forsyth /* driver :: This field is exclusively used by @FT_Open_Face; */ 1567*37da2899SCharles.Forsyth /* it simply specifies the font driver to use to open */ 1568*37da2899SCharles.Forsyth /* the face. If set to 0, FreeType will try to load */ 1569*37da2899SCharles.Forsyth /* the face with each one of the drivers in its list. */ 1570*37da2899SCharles.Forsyth /* */ 1571*37da2899SCharles.Forsyth /* num_params :: The number of extra parameters. */ 1572*37da2899SCharles.Forsyth /* */ 1573*37da2899SCharles.Forsyth /* params :: Extra parameters passed to the font driver when */ 1574*37da2899SCharles.Forsyth /* opening a new face. */ 1575*37da2899SCharles.Forsyth /* */ 1576*37da2899SCharles.Forsyth /* <Note> */ 1577*37da2899SCharles.Forsyth /* The stream type is determined by the contents of `flags' which */ 1578*37da2899SCharles.Forsyth /* are tested in the following order by @FT_Open_Face: */ 1579*37da2899SCharles.Forsyth /* */ 1580*37da2899SCharles.Forsyth /* If the `FT_OPEN_MEMORY' bit is set, assume that this is a */ 1581*37da2899SCharles.Forsyth /* memory file of `memory_size' bytes,located at `memory_address'. */ 1582*37da2899SCharles.Forsyth /* */ 1583*37da2899SCharles.Forsyth /* Otherwise, if the `FT_OPEN_STREAM' bit is set, assume that a */ 1584*37da2899SCharles.Forsyth /* custom input stream `stream' is used. */ 1585*37da2899SCharles.Forsyth /* */ 1586*37da2899SCharles.Forsyth /* Otherwise, if the `FT_OPEN_PATHNAME' bit is set, assume that this */ 1587*37da2899SCharles.Forsyth /* is a normal file and use `pathname' to open it. */ 1588*37da2899SCharles.Forsyth /* */ 1589*37da2899SCharles.Forsyth /* If the `FT_OPEN_DRIVER' bit is set, @FT_Open_Face will only try to */ 1590*37da2899SCharles.Forsyth /* open the file with the driver whose handler is in `driver'. */ 1591*37da2899SCharles.Forsyth /* */ 1592*37da2899SCharles.Forsyth /* If the `FT_OPEN_PARAMS' bit is set, the parameters given by */ 1593*37da2899SCharles.Forsyth /* `num_params' and `params' will be used. They are ignored */ 1594*37da2899SCharles.Forsyth /* otherwise. */ 1595*37da2899SCharles.Forsyth /* */ 1596*37da2899SCharles.Forsyth typedef struct FT_Open_Args_ 1597*37da2899SCharles.Forsyth { 1598*37da2899SCharles.Forsyth FT_Open_Flags flags; 1599*37da2899SCharles.Forsyth const FT_Byte* memory_base; 1600*37da2899SCharles.Forsyth FT_Long memory_size; 1601*37da2899SCharles.Forsyth FT_String* pathname; 1602*37da2899SCharles.Forsyth FT_Stream stream; 1603*37da2899SCharles.Forsyth FT_Module driver; 1604*37da2899SCharles.Forsyth FT_Int num_params; 1605*37da2899SCharles.Forsyth FT_Parameter* params; 1606*37da2899SCharles.Forsyth 1607*37da2899SCharles.Forsyth } FT_Open_Args; 1608*37da2899SCharles.Forsyth 1609*37da2899SCharles.Forsyth 1610*37da2899SCharles.Forsyth /*************************************************************************/ 1611*37da2899SCharles.Forsyth /* */ 1612*37da2899SCharles.Forsyth /* <Function> */ 1613*37da2899SCharles.Forsyth /* FT_New_Face */ 1614*37da2899SCharles.Forsyth /* */ 1615*37da2899SCharles.Forsyth /* <Description> */ 1616*37da2899SCharles.Forsyth /* Creates a new face object from a given resource and typeface index */ 1617*37da2899SCharles.Forsyth /* using a pathname to the font file. */ 1618*37da2899SCharles.Forsyth /* */ 1619*37da2899SCharles.Forsyth /* <InOut> */ 1620*37da2899SCharles.Forsyth /* library :: A handle to the library resource. */ 1621*37da2899SCharles.Forsyth /* */ 1622*37da2899SCharles.Forsyth /* <Input> */ 1623*37da2899SCharles.Forsyth /* pathname :: A path to the font file. */ 1624*37da2899SCharles.Forsyth /* */ 1625*37da2899SCharles.Forsyth /* face_index :: The index of the face within the resource. The */ 1626*37da2899SCharles.Forsyth /* first face has index 0. */ 1627*37da2899SCharles.Forsyth /* <Output> */ 1628*37da2899SCharles.Forsyth /* aface :: A handle to a new face object. */ 1629*37da2899SCharles.Forsyth /* */ 1630*37da2899SCharles.Forsyth /* <Return> */ 1631*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1632*37da2899SCharles.Forsyth /* */ 1633*37da2899SCharles.Forsyth /* <Note> */ 1634*37da2899SCharles.Forsyth /* Unlike FreeType 1.x, this function automatically creates a glyph */ 1635*37da2899SCharles.Forsyth /* slot for the face object which can be accessed directly through */ 1636*37da2899SCharles.Forsyth /* `face->glyph'. */ 1637*37da2899SCharles.Forsyth /* */ 1638*37da2899SCharles.Forsyth /* @FT_New_Face can be used to determine and/or check the font format */ 1639*37da2899SCharles.Forsyth /* of a given font resource. If the `face_index' field is negative, */ 1640*37da2899SCharles.Forsyth /* the function will _not_ return any face handle in `aface'. Its */ 1641*37da2899SCharles.Forsyth /* return value should be 0 if the font format is recognized, or */ 1642*37da2899SCharles.Forsyth /* non-zero otherwise. */ 1643*37da2899SCharles.Forsyth /* */ 1644*37da2899SCharles.Forsyth /* Each new face object created with this function also owns a */ 1645*37da2899SCharles.Forsyth /* default @FT_Size object, accessible as `face->size'. */ 1646*37da2899SCharles.Forsyth /* */ 1647*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1648*37da2899SCharles.Forsyth FT_New_Face( FT_Library library, 1649*37da2899SCharles.Forsyth const char* filepathname, 1650*37da2899SCharles.Forsyth FT_Long face_index, 1651*37da2899SCharles.Forsyth FT_Face *aface ); 1652*37da2899SCharles.Forsyth 1653*37da2899SCharles.Forsyth 1654*37da2899SCharles.Forsyth /*************************************************************************/ 1655*37da2899SCharles.Forsyth /* */ 1656*37da2899SCharles.Forsyth /* <Function> */ 1657*37da2899SCharles.Forsyth /* FT_New_Memory_Face */ 1658*37da2899SCharles.Forsyth /* */ 1659*37da2899SCharles.Forsyth /* <Description> */ 1660*37da2899SCharles.Forsyth /* Creates a new face object from a given resource and typeface index */ 1661*37da2899SCharles.Forsyth /* using a font file already loaded into memory. */ 1662*37da2899SCharles.Forsyth /* */ 1663*37da2899SCharles.Forsyth /* <InOut> */ 1664*37da2899SCharles.Forsyth /* library :: A handle to the library resource. */ 1665*37da2899SCharles.Forsyth /* */ 1666*37da2899SCharles.Forsyth /* <Input> */ 1667*37da2899SCharles.Forsyth /* file_base :: A pointer to the beginning of the font data. */ 1668*37da2899SCharles.Forsyth /* */ 1669*37da2899SCharles.Forsyth /* file_size :: The size of the memory chunk used by the font data. */ 1670*37da2899SCharles.Forsyth /* */ 1671*37da2899SCharles.Forsyth /* face_index :: The index of the face within the resource. The */ 1672*37da2899SCharles.Forsyth /* first face has index 0. */ 1673*37da2899SCharles.Forsyth /* <Output> */ 1674*37da2899SCharles.Forsyth /* aface :: A handle to a new face object. */ 1675*37da2899SCharles.Forsyth /* */ 1676*37da2899SCharles.Forsyth /* <Return> */ 1677*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1678*37da2899SCharles.Forsyth /* */ 1679*37da2899SCharles.Forsyth /* <Note> */ 1680*37da2899SCharles.Forsyth /* The font data bytes are used _directly_ by the @FT_Face object. */ 1681*37da2899SCharles.Forsyth /* This means that they are not copied, and that the client is */ 1682*37da2899SCharles.Forsyth /* responsible for releasing/destroying them _after_ the */ 1683*37da2899SCharles.Forsyth /* corresponding call to @FT_Done_Face . */ 1684*37da2899SCharles.Forsyth /* */ 1685*37da2899SCharles.Forsyth /* Unlike FreeType 1.x, this function automatically creates a glyph */ 1686*37da2899SCharles.Forsyth /* slot for the face object which can be accessed directly through */ 1687*37da2899SCharles.Forsyth /* `face->glyph'. */ 1688*37da2899SCharles.Forsyth /* */ 1689*37da2899SCharles.Forsyth /* @FT_New_Memory_Face can be used to determine and/or check the font */ 1690*37da2899SCharles.Forsyth /* format of a given font resource. If the `face_index' field is */ 1691*37da2899SCharles.Forsyth /* negative, the function will _not_ return any face handle in */ 1692*37da2899SCharles.Forsyth /* `aface'. Its return value should be 0 if the font format is */ 1693*37da2899SCharles.Forsyth /* recognized, or non-zero otherwise. */ 1694*37da2899SCharles.Forsyth /* */ 1695*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1696*37da2899SCharles.Forsyth FT_New_Memory_Face( FT_Library library, 1697*37da2899SCharles.Forsyth const FT_Byte* file_base, 1698*37da2899SCharles.Forsyth FT_Long file_size, 1699*37da2899SCharles.Forsyth FT_Long face_index, 1700*37da2899SCharles.Forsyth FT_Face *aface ); 1701*37da2899SCharles.Forsyth 1702*37da2899SCharles.Forsyth 1703*37da2899SCharles.Forsyth /*************************************************************************/ 1704*37da2899SCharles.Forsyth /* */ 1705*37da2899SCharles.Forsyth /* <Function> */ 1706*37da2899SCharles.Forsyth /* FT_Open_Face */ 1707*37da2899SCharles.Forsyth /* */ 1708*37da2899SCharles.Forsyth /* <Description> */ 1709*37da2899SCharles.Forsyth /* Opens a face object from a given resource and typeface index using */ 1710*37da2899SCharles.Forsyth /* an `FT_Open_Args' structure. If the face object doesn't exist, it */ 1711*37da2899SCharles.Forsyth /* will be created. */ 1712*37da2899SCharles.Forsyth /* */ 1713*37da2899SCharles.Forsyth /* <InOut> */ 1714*37da2899SCharles.Forsyth /* library :: A handle to the library resource. */ 1715*37da2899SCharles.Forsyth /* */ 1716*37da2899SCharles.Forsyth /* <Input> */ 1717*37da2899SCharles.Forsyth /* args :: A pointer to an `FT_Open_Args' structure which must */ 1718*37da2899SCharles.Forsyth /* be filled by the caller. */ 1719*37da2899SCharles.Forsyth /* */ 1720*37da2899SCharles.Forsyth /* face_index :: The index of the face within the resource. The */ 1721*37da2899SCharles.Forsyth /* first face has index 0. */ 1722*37da2899SCharles.Forsyth /* <Output> */ 1723*37da2899SCharles.Forsyth /* aface :: A handle to a new face object. */ 1724*37da2899SCharles.Forsyth /* */ 1725*37da2899SCharles.Forsyth /* <Return> */ 1726*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1727*37da2899SCharles.Forsyth /* */ 1728*37da2899SCharles.Forsyth /* <Note> */ 1729*37da2899SCharles.Forsyth /* Unlike FreeType 1.x, this function automatically creates a glyph */ 1730*37da2899SCharles.Forsyth /* slot for the face object which can be accessed directly through */ 1731*37da2899SCharles.Forsyth /* `face->glyph'. */ 1732*37da2899SCharles.Forsyth /* */ 1733*37da2899SCharles.Forsyth /* @FT_Open_Face can be used to determine and/or check the font */ 1734*37da2899SCharles.Forsyth /* format of a given font resource. If the `face_index' field is */ 1735*37da2899SCharles.Forsyth /* negative, the function will _not_ return any face handle in */ 1736*37da2899SCharles.Forsyth /* `*face'. Its return value should be 0 if the font format is */ 1737*37da2899SCharles.Forsyth /* recognized, or non-zero otherwise. */ 1738*37da2899SCharles.Forsyth /* */ 1739*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1740*37da2899SCharles.Forsyth FT_Open_Face( FT_Library library, 1741*37da2899SCharles.Forsyth const FT_Open_Args* args, 1742*37da2899SCharles.Forsyth FT_Long face_index, 1743*37da2899SCharles.Forsyth FT_Face *aface ); 1744*37da2899SCharles.Forsyth 1745*37da2899SCharles.Forsyth 1746*37da2899SCharles.Forsyth /*************************************************************************/ 1747*37da2899SCharles.Forsyth /* */ 1748*37da2899SCharles.Forsyth /* <Function> */ 1749*37da2899SCharles.Forsyth /* FT_Attach_File */ 1750*37da2899SCharles.Forsyth /* */ 1751*37da2899SCharles.Forsyth /* <Description> */ 1752*37da2899SCharles.Forsyth /* `Attaches' a given font file to an existing face. This is usually */ 1753*37da2899SCharles.Forsyth /* to read additional information for a single face object. For */ 1754*37da2899SCharles.Forsyth /* example, it is used to read the AFM files that come with Type 1 */ 1755*37da2899SCharles.Forsyth /* fonts in order to add kerning data and other metrics. */ 1756*37da2899SCharles.Forsyth /* */ 1757*37da2899SCharles.Forsyth /* <InOut> */ 1758*37da2899SCharles.Forsyth /* face :: The target face object. */ 1759*37da2899SCharles.Forsyth /* */ 1760*37da2899SCharles.Forsyth /* <Input> */ 1761*37da2899SCharles.Forsyth /* filepathname :: An 8-bit pathname naming the `metrics' file. */ 1762*37da2899SCharles.Forsyth /* */ 1763*37da2899SCharles.Forsyth /* <Return> */ 1764*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1765*37da2899SCharles.Forsyth /* */ 1766*37da2899SCharles.Forsyth /* <Note> */ 1767*37da2899SCharles.Forsyth /* If your font file is in memory, or if you want to provide your */ 1768*37da2899SCharles.Forsyth /* own input stream object, use @FT_Attach_Stream. */ 1769*37da2899SCharles.Forsyth /* */ 1770*37da2899SCharles.Forsyth /* The meaning of the `attach' action (i.e., what really happens when */ 1771*37da2899SCharles.Forsyth /* the new file is read) is not fixed by FreeType itself. It really */ 1772*37da2899SCharles.Forsyth /* depends on the font format (and thus the font driver). */ 1773*37da2899SCharles.Forsyth /* */ 1774*37da2899SCharles.Forsyth /* Client applications are expected to know what they are doing */ 1775*37da2899SCharles.Forsyth /* when invoking this function. Most drivers simply do not implement */ 1776*37da2899SCharles.Forsyth /* file attachments. */ 1777*37da2899SCharles.Forsyth /* */ 1778*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1779*37da2899SCharles.Forsyth FT_Attach_File( FT_Face face, 1780*37da2899SCharles.Forsyth const char* filepathname ); 1781*37da2899SCharles.Forsyth 1782*37da2899SCharles.Forsyth 1783*37da2899SCharles.Forsyth /*************************************************************************/ 1784*37da2899SCharles.Forsyth /* */ 1785*37da2899SCharles.Forsyth /* <Function> */ 1786*37da2899SCharles.Forsyth /* FT_Attach_Stream */ 1787*37da2899SCharles.Forsyth /* */ 1788*37da2899SCharles.Forsyth /* <Description> */ 1789*37da2899SCharles.Forsyth /* This function is similar to @FT_Attach_File with the exception */ 1790*37da2899SCharles.Forsyth /* that it reads the attachment from an arbitrary stream. */ 1791*37da2899SCharles.Forsyth /* */ 1792*37da2899SCharles.Forsyth /* <InOut> */ 1793*37da2899SCharles.Forsyth /* face :: The target face object. */ 1794*37da2899SCharles.Forsyth /* */ 1795*37da2899SCharles.Forsyth /* <Input> */ 1796*37da2899SCharles.Forsyth /* parameters :: A pointer to an FT_Open_Args structure used to */ 1797*37da2899SCharles.Forsyth /* describe the input stream to FreeType. */ 1798*37da2899SCharles.Forsyth /* <Return> */ 1799*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1800*37da2899SCharles.Forsyth /* */ 1801*37da2899SCharles.Forsyth /* <Note> */ 1802*37da2899SCharles.Forsyth /* The meaning of the `attach' (i.e. what really happens when the */ 1803*37da2899SCharles.Forsyth /* new file is read) is not fixed by FreeType itself. It really */ 1804*37da2899SCharles.Forsyth /* depends on the font format (and thus the font driver). */ 1805*37da2899SCharles.Forsyth /* */ 1806*37da2899SCharles.Forsyth /* Client applications are expected to know what they are doing */ 1807*37da2899SCharles.Forsyth /* when invoking this function. Most drivers simply do not implement */ 1808*37da2899SCharles.Forsyth /* file attachments. */ 1809*37da2899SCharles.Forsyth /* */ 1810*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1811*37da2899SCharles.Forsyth FT_Attach_Stream( FT_Face face, 1812*37da2899SCharles.Forsyth FT_Open_Args* parameters ); 1813*37da2899SCharles.Forsyth 1814*37da2899SCharles.Forsyth 1815*37da2899SCharles.Forsyth /*************************************************************************/ 1816*37da2899SCharles.Forsyth /* */ 1817*37da2899SCharles.Forsyth /* <Function> */ 1818*37da2899SCharles.Forsyth /* FT_Done_Face */ 1819*37da2899SCharles.Forsyth /* */ 1820*37da2899SCharles.Forsyth /* <Description> */ 1821*37da2899SCharles.Forsyth /* Discards a given face object, as well as all of its child slots */ 1822*37da2899SCharles.Forsyth /* and sizes. */ 1823*37da2899SCharles.Forsyth /* */ 1824*37da2899SCharles.Forsyth /* <Input> */ 1825*37da2899SCharles.Forsyth /* face :: A handle to a target face object. */ 1826*37da2899SCharles.Forsyth /* */ 1827*37da2899SCharles.Forsyth /* <Return> */ 1828*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1829*37da2899SCharles.Forsyth /* */ 1830*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1831*37da2899SCharles.Forsyth FT_Done_Face( FT_Face face ); 1832*37da2899SCharles.Forsyth 1833*37da2899SCharles.Forsyth 1834*37da2899SCharles.Forsyth /*************************************************************************/ 1835*37da2899SCharles.Forsyth /* */ 1836*37da2899SCharles.Forsyth /* <Function> */ 1837*37da2899SCharles.Forsyth /* FT_Set_Char_Size */ 1838*37da2899SCharles.Forsyth /* */ 1839*37da2899SCharles.Forsyth /* <Description> */ 1840*37da2899SCharles.Forsyth /* Sets the character dimensions of a given face object. The */ 1841*37da2899SCharles.Forsyth /* `char_width' and `char_height' values are used for the width and */ 1842*37da2899SCharles.Forsyth /* height, respectively, expressed in 26.6 fractional points. */ 1843*37da2899SCharles.Forsyth /* */ 1844*37da2899SCharles.Forsyth /* If the horizontal or vertical resolution values are zero, a */ 1845*37da2899SCharles.Forsyth /* default value of 72dpi is used. Similarly, if one of the */ 1846*37da2899SCharles.Forsyth /* character dimensions is zero, its value is set equal to the other. */ 1847*37da2899SCharles.Forsyth /* */ 1848*37da2899SCharles.Forsyth /* <InOut> */ 1849*37da2899SCharles.Forsyth /* size :: A handle to a target size object. */ 1850*37da2899SCharles.Forsyth /* */ 1851*37da2899SCharles.Forsyth /* <Input> */ 1852*37da2899SCharles.Forsyth /* char_width :: The character width, in 26.6 fractional points. */ 1853*37da2899SCharles.Forsyth /* */ 1854*37da2899SCharles.Forsyth /* char_height :: The character height, in 26.6 fractional */ 1855*37da2899SCharles.Forsyth /* points. */ 1856*37da2899SCharles.Forsyth /* */ 1857*37da2899SCharles.Forsyth /* horz_resolution :: The horizontal resolution. */ 1858*37da2899SCharles.Forsyth /* */ 1859*37da2899SCharles.Forsyth /* vert_resolution :: The vertical resolution. */ 1860*37da2899SCharles.Forsyth /* */ 1861*37da2899SCharles.Forsyth /* <Return> */ 1862*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1863*37da2899SCharles.Forsyth /* */ 1864*37da2899SCharles.Forsyth /* <Note> */ 1865*37da2899SCharles.Forsyth /* When dealing with fixed-size faces (i.e., non-scalable formats), */ 1866*37da2899SCharles.Forsyth /* use the function @FT_Set_Pixel_Sizes. */ 1867*37da2899SCharles.Forsyth /* */ 1868*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1869*37da2899SCharles.Forsyth FT_Set_Char_Size( FT_Face face, 1870*37da2899SCharles.Forsyth FT_F26Dot6 char_width, 1871*37da2899SCharles.Forsyth FT_F26Dot6 char_height, 1872*37da2899SCharles.Forsyth FT_UInt horz_resolution, 1873*37da2899SCharles.Forsyth FT_UInt vert_resolution ); 1874*37da2899SCharles.Forsyth 1875*37da2899SCharles.Forsyth 1876*37da2899SCharles.Forsyth /*************************************************************************/ 1877*37da2899SCharles.Forsyth /* */ 1878*37da2899SCharles.Forsyth /* <Function> */ 1879*37da2899SCharles.Forsyth /* FT_Set_Pixel_Sizes */ 1880*37da2899SCharles.Forsyth /* */ 1881*37da2899SCharles.Forsyth /* <Description> */ 1882*37da2899SCharles.Forsyth /* Sets the character dimensions of a given face object. The width */ 1883*37da2899SCharles.Forsyth /* and height are expressed in integer pixels. */ 1884*37da2899SCharles.Forsyth /* */ 1885*37da2899SCharles.Forsyth /* If one of the character dimensions is zero, its value is set equal */ 1886*37da2899SCharles.Forsyth /* to the other. */ 1887*37da2899SCharles.Forsyth /* */ 1888*37da2899SCharles.Forsyth /* <InOut> */ 1889*37da2899SCharles.Forsyth /* face :: A handle to the target face object. */ 1890*37da2899SCharles.Forsyth /* */ 1891*37da2899SCharles.Forsyth /* <Input> */ 1892*37da2899SCharles.Forsyth /* pixel_width :: The character width, in integer pixels. */ 1893*37da2899SCharles.Forsyth /* */ 1894*37da2899SCharles.Forsyth /* pixel_height :: The character height, in integer pixels. */ 1895*37da2899SCharles.Forsyth /* */ 1896*37da2899SCharles.Forsyth /* <Return> */ 1897*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1898*37da2899SCharles.Forsyth /* */ 1899*37da2899SCharles.Forsyth /* */ 1900*37da2899SCharles.Forsyth /* <Note> */ 1901*37da2899SCharles.Forsyth /* The values of `pixel_width' and `pixel_height' correspond to the */ 1902*37da2899SCharles.Forsyth /* pixel values of the _typographic_ character size, which are NOT */ 1903*37da2899SCharles.Forsyth /* necessarily the same as the dimensions of the glyph `bitmap */ 1904*37da2899SCharles.Forsyth /* cells'. */ 1905*37da2899SCharles.Forsyth /* */ 1906*37da2899SCharles.Forsyth /* The `character size' is really the size of an abstract square */ 1907*37da2899SCharles.Forsyth /* called the `EM', used to design the font. However, depending */ 1908*37da2899SCharles.Forsyth /* on the font design, glyphs will be smaller or greater than the */ 1909*37da2899SCharles.Forsyth /* EM. */ 1910*37da2899SCharles.Forsyth /* */ 1911*37da2899SCharles.Forsyth /* This means that setting the pixel size to, say, 8x8 doesn't */ 1912*37da2899SCharles.Forsyth /* guarantee in any way that you will get glyph bitmaps that all fit */ 1913*37da2899SCharles.Forsyth /* within an 8x8 cell (sometimes even far from it). */ 1914*37da2899SCharles.Forsyth /* */ 1915*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1916*37da2899SCharles.Forsyth FT_Set_Pixel_Sizes( FT_Face face, 1917*37da2899SCharles.Forsyth FT_UInt pixel_width, 1918*37da2899SCharles.Forsyth FT_UInt pixel_height ); 1919*37da2899SCharles.Forsyth 1920*37da2899SCharles.Forsyth 1921*37da2899SCharles.Forsyth /*************************************************************************/ 1922*37da2899SCharles.Forsyth /* */ 1923*37da2899SCharles.Forsyth /* <Function> */ 1924*37da2899SCharles.Forsyth /* FT_Load_Glyph */ 1925*37da2899SCharles.Forsyth /* */ 1926*37da2899SCharles.Forsyth /* <Description> */ 1927*37da2899SCharles.Forsyth /* A function used to load a single glyph within a given glyph slot, */ 1928*37da2899SCharles.Forsyth /* for a given size. */ 1929*37da2899SCharles.Forsyth /* */ 1930*37da2899SCharles.Forsyth /* <InOut> */ 1931*37da2899SCharles.Forsyth /* face :: A handle to the target face object where the glyph */ 1932*37da2899SCharles.Forsyth /* will be loaded. */ 1933*37da2899SCharles.Forsyth /* */ 1934*37da2899SCharles.Forsyth /* <Input> */ 1935*37da2899SCharles.Forsyth /* glyph_index :: The index of the glyph in the font file. */ 1936*37da2899SCharles.Forsyth /* */ 1937*37da2899SCharles.Forsyth /* load_flags :: A flag indicating what to load for this glyph. The */ 1938*37da2899SCharles.Forsyth /* @FT_LOAD_XXX constants can be used to control the */ 1939*37da2899SCharles.Forsyth /* glyph loading process (e.g., whether the outline */ 1940*37da2899SCharles.Forsyth /* should be scaled, whether to load bitmaps or not, */ 1941*37da2899SCharles.Forsyth /* whether to hint the outline, etc). */ 1942*37da2899SCharles.Forsyth /* */ 1943*37da2899SCharles.Forsyth /* <Return> */ 1944*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1945*37da2899SCharles.Forsyth /* */ 1946*37da2899SCharles.Forsyth /* <Note> */ 1947*37da2899SCharles.Forsyth /* If the glyph image is not a bitmap, and if the bit flag */ 1948*37da2899SCharles.Forsyth /* FT_LOAD_IGNORE_TRANSFORM is unset, the glyph image will be */ 1949*37da2899SCharles.Forsyth /* transformed with the information passed to a previous call to */ 1950*37da2899SCharles.Forsyth /* @FT_Set_Transform. */ 1951*37da2899SCharles.Forsyth /* */ 1952*37da2899SCharles.Forsyth /* Note that this also transforms the `face.glyph.advance' field, but */ 1953*37da2899SCharles.Forsyth /* *not* the values in `face.glyph.metrics'. */ 1954*37da2899SCharles.Forsyth /* */ 1955*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 1956*37da2899SCharles.Forsyth FT_Load_Glyph( FT_Face face, 1957*37da2899SCharles.Forsyth FT_UInt glyph_index, 1958*37da2899SCharles.Forsyth FT_Int32 load_flags ); 1959*37da2899SCharles.Forsyth 1960*37da2899SCharles.Forsyth 1961*37da2899SCharles.Forsyth /*************************************************************************/ 1962*37da2899SCharles.Forsyth /* */ 1963*37da2899SCharles.Forsyth /* <Function> */ 1964*37da2899SCharles.Forsyth /* FT_Load_Char */ 1965*37da2899SCharles.Forsyth /* */ 1966*37da2899SCharles.Forsyth /* <Description> */ 1967*37da2899SCharles.Forsyth /* A function used to load a single glyph within a given glyph slot, */ 1968*37da2899SCharles.Forsyth /* for a given size, according to its character code. */ 1969*37da2899SCharles.Forsyth /* */ 1970*37da2899SCharles.Forsyth /* <InOut> */ 1971*37da2899SCharles.Forsyth /* face :: A handle to a target face object where the glyph */ 1972*37da2899SCharles.Forsyth /* will be loaded. */ 1973*37da2899SCharles.Forsyth /* */ 1974*37da2899SCharles.Forsyth /* <Input> */ 1975*37da2899SCharles.Forsyth /* char_code :: The glyph's character code, according to the */ 1976*37da2899SCharles.Forsyth /* current charmap used in the face. */ 1977*37da2899SCharles.Forsyth /* */ 1978*37da2899SCharles.Forsyth /* load_flags :: A flag indicating what to load for this glyph. The */ 1979*37da2899SCharles.Forsyth /* @FT_LOAD_XXX constants can be used to control the */ 1980*37da2899SCharles.Forsyth /* glyph loading process (e.g., whether the outline */ 1981*37da2899SCharles.Forsyth /* should be scaled, whether to load bitmaps or not, */ 1982*37da2899SCharles.Forsyth /* whether to hint the outline, etc). */ 1983*37da2899SCharles.Forsyth /* */ 1984*37da2899SCharles.Forsyth /* <Return> */ 1985*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 1986*37da2899SCharles.Forsyth /* */ 1987*37da2899SCharles.Forsyth /* <Note> */ 1988*37da2899SCharles.Forsyth /* If the face has no current charmap, or if the character code */ 1989*37da2899SCharles.Forsyth /* is not defined in the charmap, this function will return an */ 1990*37da2899SCharles.Forsyth /* error. */ 1991*37da2899SCharles.Forsyth /* */ 1992*37da2899SCharles.Forsyth /* If the glyph image is not a bitmap, and if the bit flag */ 1993*37da2899SCharles.Forsyth /* FT_LOAD_IGNORE_TRANSFORM is unset, the glyph image will be */ 1994*37da2899SCharles.Forsyth /* transformed with the information passed to a previous call to */ 1995*37da2899SCharles.Forsyth /* @FT_Set_Transform. */ 1996*37da2899SCharles.Forsyth /* */ 1997*37da2899SCharles.Forsyth /* Note that this also transforms the `face.glyph.advance' field, but */ 1998*37da2899SCharles.Forsyth /* *not* the values in `face.glyph.metrics'. */ 1999*37da2899SCharles.Forsyth /* */ 2000*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2001*37da2899SCharles.Forsyth FT_Load_Char( FT_Face face, 2002*37da2899SCharles.Forsyth FT_ULong char_code, 2003*37da2899SCharles.Forsyth FT_Int32 load_flags ); 2004*37da2899SCharles.Forsyth 2005*37da2899SCharles.Forsyth 2006*37da2899SCharles.Forsyth /**************************************************************************** 2007*37da2899SCharles.Forsyth * 2008*37da2899SCharles.Forsyth * @enum: 2009*37da2899SCharles.Forsyth * FT_LOAD_XXX 2010*37da2899SCharles.Forsyth * 2011*37da2899SCharles.Forsyth * @description: 2012*37da2899SCharles.Forsyth * A list of bit-field constants, used with @FT_Load_Glyph to indicate 2013*37da2899SCharles.Forsyth * what kind of operations to perform during glyph loading. 2014*37da2899SCharles.Forsyth * 2015*37da2899SCharles.Forsyth * @values: 2016*37da2899SCharles.Forsyth * FT_LOAD_DEFAULT :: 2017*37da2899SCharles.Forsyth * Corresponding to 0, this value is used a default glyph load. In this 2018*37da2899SCharles.Forsyth * case, the following will happen: 2019*37da2899SCharles.Forsyth * 2020*37da2899SCharles.Forsyth * 1. FreeType looks for a bitmap for the glyph corresponding to the 2021*37da2899SCharles.Forsyth * face's current size. If one is found, the function returns. The 2022*37da2899SCharles.Forsyth * bitmap data can be accessed from the glyph slot (see note below). 2023*37da2899SCharles.Forsyth * 2024*37da2899SCharles.Forsyth * 2. If no embedded bitmap is searched or found, FreeType looks for a 2025*37da2899SCharles.Forsyth * scalable outline. If one is found, it is loaded from the font 2026*37da2899SCharles.Forsyth * file, scaled to device pixels, then "hinted" to the pixel grid in 2027*37da2899SCharles.Forsyth * order to optimize it. The outline data can be accessed from the 2028*37da2899SCharles.Forsyth * glyph slot (see note below). 2029*37da2899SCharles.Forsyth * 2030*37da2899SCharles.Forsyth * Note that by default, the glyph loader doesn't render outlines into 2031*37da2899SCharles.Forsyth * bitmaps. The following flags are used to modify this default 2032*37da2899SCharles.Forsyth * behaviour to more specific and useful cases. 2033*37da2899SCharles.Forsyth * 2034*37da2899SCharles.Forsyth * FT_LOAD_NO_SCALE :: 2035*37da2899SCharles.Forsyth * Don't scale the vector outline being loaded to 26.6 fractional 2036*37da2899SCharles.Forsyth * pixels, but kept in font units. Note that this also disables 2037*37da2899SCharles.Forsyth * hinting and the loading of embedded bitmaps. You should only use it 2038*37da2899SCharles.Forsyth * when you want to retrieve the original glyph outlines in font units. 2039*37da2899SCharles.Forsyth * 2040*37da2899SCharles.Forsyth * FT_LOAD_NO_HINTING :: 2041*37da2899SCharles.Forsyth * Don't hint glyph outlines after their scaling to device pixels. 2042*37da2899SCharles.Forsyth * This generally generates "blurrier" glyphs in anti-aliased modes. 2043*37da2899SCharles.Forsyth * 2044*37da2899SCharles.Forsyth * This flag is ignored if @FT_LOAD_NO_SCALE is set. 2045*37da2899SCharles.Forsyth * 2046*37da2899SCharles.Forsyth * FT_LOAD_RENDER :: 2047*37da2899SCharles.Forsyth * Render the glyph outline immediately into a bitmap before the glyph 2048*37da2899SCharles.Forsyth * loader returns. By default, the glyph is rendered for the 2049*37da2899SCharles.Forsyth * @FT_RENDER_MODE_NORMAL mode, which corresponds to 8-bit anti-aliased 2050*37da2899SCharles.Forsyth * bitmaps using 256 opacity levels. You can use either 2051*37da2899SCharles.Forsyth * @FT_LOAD_TARGET_MONO or @FT_LOAD_MONOCHROME to render 1-bit 2052*37da2899SCharles.Forsyth * monochrome bitmaps. 2053*37da2899SCharles.Forsyth * 2054*37da2899SCharles.Forsyth * This flag is ignored if @FT_LOAD_NO_SCALE is set. 2055*37da2899SCharles.Forsyth * 2056*37da2899SCharles.Forsyth * FT_LOAD_NO_BITMAP :: 2057*37da2899SCharles.Forsyth * Don't look for bitmaps when loading the glyph. Only scalable 2058*37da2899SCharles.Forsyth * outlines will be loaded when available, and scaled, hinted, or 2059*37da2899SCharles.Forsyth * rendered depending on other bit flags. 2060*37da2899SCharles.Forsyth * 2061*37da2899SCharles.Forsyth * This does not prevent you from rendering outlines to bitmaps 2062*37da2899SCharles.Forsyth * with @FT_LOAD_RENDER, however. 2063*37da2899SCharles.Forsyth * 2064*37da2899SCharles.Forsyth * FT_LOAD_VERTICAL_LAYOUT :: 2065*37da2899SCharles.Forsyth * Prepare the glyph image for vertical text layout. This basically 2066*37da2899SCharles.Forsyth * means that `face.glyph.advance' will correspond to the vertical 2067*37da2899SCharles.Forsyth * advance height (instead of the default horizontal advance width), 2068*37da2899SCharles.Forsyth * and that the glyph image will be translated to match the vertical 2069*37da2899SCharles.Forsyth * bearings positions. 2070*37da2899SCharles.Forsyth * 2071*37da2899SCharles.Forsyth * FT_LOAD_FORCE_AUTOHINT :: 2072*37da2899SCharles.Forsyth * Force the use of the FreeType auto-hinter when a glyph outline is 2073*37da2899SCharles.Forsyth * loaded. You shouldn't need this in a typical application, since it 2074*37da2899SCharles.Forsyth * is mostly used to experiment with its algorithm. 2075*37da2899SCharles.Forsyth * 2076*37da2899SCharles.Forsyth * FT_LOAD_CROP_BITMAP :: 2077*37da2899SCharles.Forsyth * Indicates that the glyph loader should try to crop the bitmap (i.e., 2078*37da2899SCharles.Forsyth * remove all space around its black bits) when loading it. This is 2079*37da2899SCharles.Forsyth * only useful when loading embedded bitmaps in certain fonts, since 2080*37da2899SCharles.Forsyth * bitmaps rendered with @FT_LOAD_RENDER are always cropped by default. 2081*37da2899SCharles.Forsyth * 2082*37da2899SCharles.Forsyth * FT_LOAD_PEDANTIC :: 2083*37da2899SCharles.Forsyth * Indicates that the glyph loader should perform pedantic 2084*37da2899SCharles.Forsyth * verifications during glyph loading, rejecting invalid fonts. This 2085*37da2899SCharles.Forsyth * is mostly used to detect broken glyphs in fonts. By default, 2086*37da2899SCharles.Forsyth * FreeType tries to handle broken fonts also. 2087*37da2899SCharles.Forsyth * 2088*37da2899SCharles.Forsyth * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: 2089*37da2899SCharles.Forsyth * Indicates that the glyph loader should ignore the global advance 2090*37da2899SCharles.Forsyth * width defined in the font. As far as we know, this is only used by 2091*37da2899SCharles.Forsyth * the X-TrueType font server, in order to deal correctly with the 2092*37da2899SCharles.Forsyth * incorrect metrics contained in DynaLab's TrueType CJK fonts. 2093*37da2899SCharles.Forsyth * 2094*37da2899SCharles.Forsyth * FT_LOAD_NO_RECURSE :: 2095*37da2899SCharles.Forsyth * This flag is only used internally. It merely indicates that the 2096*37da2899SCharles.Forsyth * glyph loader should not load composite glyphs recursively. Instead, 2097*37da2899SCharles.Forsyth * it should set the `num_subglyph' and `subglyphs' values of the glyph 2098*37da2899SCharles.Forsyth * slot accordingly, and set "glyph->format" to 2099*37da2899SCharles.Forsyth * @FT_GLYPH_FORMAT_COMPOSITE. 2100*37da2899SCharles.Forsyth * 2101*37da2899SCharles.Forsyth * The description of sub-glyphs is not available to client 2102*37da2899SCharles.Forsyth * applications for now. 2103*37da2899SCharles.Forsyth * 2104*37da2899SCharles.Forsyth * FT_LOAD_IGNORE_TRANSFORM :: 2105*37da2899SCharles.Forsyth * Indicates that the glyph loader should not try to transform the 2106*37da2899SCharles.Forsyth * loaded glyph image. This doesn't prevent scaling, hinting, or 2107*37da2899SCharles.Forsyth * rendering. 2108*37da2899SCharles.Forsyth * 2109*37da2899SCharles.Forsyth * FT_LOAD_MONOCHROME :: 2110*37da2899SCharles.Forsyth * This flag is used with @FT_LOAD_RENDER to indicate that you want 2111*37da2899SCharles.Forsyth * to render a 1-bit monochrome glyph bitmap from a vectorial outline. 2112*37da2899SCharles.Forsyth * 2113*37da2899SCharles.Forsyth * Note that this has no effect on the hinting algorithm used by the 2114*37da2899SCharles.Forsyth * glyph loader. You should better use @FT_LOAD_TARGET_MONO if you 2115*37da2899SCharles.Forsyth * want to render monochrome-optimized glyph images instead. 2116*37da2899SCharles.Forsyth * 2117*37da2899SCharles.Forsyth * FT_LOAD_LINEAR_DESIGN :: 2118*37da2899SCharles.Forsyth * Return the linearly scaled metrics expressed in original font units 2119*37da2899SCharles.Forsyth * instead of the default 16.16 pixel values. 2120*37da2899SCharles.Forsyth * 2121*37da2899SCharles.Forsyth * FT_LOAD_NO_AUTOHINT :: 2122*37da2899SCharles.Forsyth * Indicates that the auto-hinter should never be used to hint glyph 2123*37da2899SCharles.Forsyth * outlines. This doesn't prevent native format-specific hinters from 2124*37da2899SCharles.Forsyth * being used. This can be important for certain fonts where unhinted 2125*37da2899SCharles.Forsyth * output is better than auto-hinted one. 2126*37da2899SCharles.Forsyth */ 2127*37da2899SCharles.Forsyth #define FT_LOAD_NO_SCALE 0x1 2128*37da2899SCharles.Forsyth #define FT_LOAD_NO_HINTING 0x2 2129*37da2899SCharles.Forsyth #define FT_LOAD_RENDER 0x4 2130*37da2899SCharles.Forsyth #define FT_LOAD_NO_BITMAP 0x8 2131*37da2899SCharles.Forsyth #define FT_LOAD_VERTICAL_LAYOUT 0x10 2132*37da2899SCharles.Forsyth #define FT_LOAD_FORCE_AUTOHINT 0x20 2133*37da2899SCharles.Forsyth #define FT_LOAD_CROP_BITMAP 0x40 2134*37da2899SCharles.Forsyth #define FT_LOAD_PEDANTIC 0x80 2135*37da2899SCharles.Forsyth #define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200 2136*37da2899SCharles.Forsyth #define FT_LOAD_NO_RECURSE 0x400 2137*37da2899SCharles.Forsyth #define FT_LOAD_IGNORE_TRANSFORM 0x800 2138*37da2899SCharles.Forsyth #define FT_LOAD_MONOCHROME 0x1000 2139*37da2899SCharles.Forsyth #define FT_LOAD_LINEAR_DESIGN 0x2000 2140*37da2899SCharles.Forsyth 2141*37da2899SCharles.Forsyth /* temporary hack! */ 2142*37da2899SCharles.Forsyth #define FT_LOAD_SBITS_ONLY 0x4000 2143*37da2899SCharles.Forsyth #define FT_LOAD_NO_AUTOHINT 0x8000U 2144*37da2899SCharles.Forsyth 2145*37da2899SCharles.Forsyth /* */ 2146*37da2899SCharles.Forsyth 2147*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 ) 2148*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) 2149*37da2899SCharles.Forsyth 2150*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) 2151*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) 2152*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO ) 2153*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD ) 2154*37da2899SCharles.Forsyth #define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V ) 2155*37da2899SCharles.Forsyth 2156*37da2899SCharles.Forsyth #define FT_LOAD_DEFAULT 0x0 2157*37da2899SCharles.Forsyth 2158*37da2899SCharles.Forsyth 2159*37da2899SCharles.Forsyth /*************************************************************************/ 2160*37da2899SCharles.Forsyth /* */ 2161*37da2899SCharles.Forsyth /* <Function> */ 2162*37da2899SCharles.Forsyth /* FT_Set_Transform */ 2163*37da2899SCharles.Forsyth /* */ 2164*37da2899SCharles.Forsyth /* <Description> */ 2165*37da2899SCharles.Forsyth /* A function used to set the transformation that is applied to glyph */ 2166*37da2899SCharles.Forsyth /* images just before they are converted to bitmaps in a glyph slot */ 2167*37da2899SCharles.Forsyth /* when @FT_Render_Glyph is called. */ 2168*37da2899SCharles.Forsyth /* */ 2169*37da2899SCharles.Forsyth /* <InOut> */ 2170*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2171*37da2899SCharles.Forsyth /* */ 2172*37da2899SCharles.Forsyth /* <Input> */ 2173*37da2899SCharles.Forsyth /* matrix :: A pointer to the transformation's 2x2 matrix. Use 0 for */ 2174*37da2899SCharles.Forsyth /* the identity matrix. */ 2175*37da2899SCharles.Forsyth /* delta :: A pointer to the translation vector. Use 0 for the null */ 2176*37da2899SCharles.Forsyth /* vector. */ 2177*37da2899SCharles.Forsyth /* */ 2178*37da2899SCharles.Forsyth /* <Note> */ 2179*37da2899SCharles.Forsyth /* The transformation is only applied to scalable image formats after */ 2180*37da2899SCharles.Forsyth /* the glyph has been loaded. It means that hinting is unaltered by */ 2181*37da2899SCharles.Forsyth /* the transformation and is performed on the character size given in */ 2182*37da2899SCharles.Forsyth /* the last call to @FT_Set_Char_Sizes or @FT_Set_Pixel_Sizes. */ 2183*37da2899SCharles.Forsyth /* */ 2184*37da2899SCharles.Forsyth FT_EXPORT( void ) 2185*37da2899SCharles.Forsyth FT_Set_Transform( FT_Face face, 2186*37da2899SCharles.Forsyth FT_Matrix* matrix, 2187*37da2899SCharles.Forsyth FT_Vector* delta ); 2188*37da2899SCharles.Forsyth 2189*37da2899SCharles.Forsyth 2190*37da2899SCharles.Forsyth /*************************************************************************/ 2191*37da2899SCharles.Forsyth /* */ 2192*37da2899SCharles.Forsyth /* <Enum> */ 2193*37da2899SCharles.Forsyth /* FT_Render_Mode */ 2194*37da2899SCharles.Forsyth /* */ 2195*37da2899SCharles.Forsyth /* <Description> */ 2196*37da2899SCharles.Forsyth /* An enumeration type that lists the render modes supported by */ 2197*37da2899SCharles.Forsyth /* FreeType 2. Each mode corresponds to a specific type of scanline */ 2198*37da2899SCharles.Forsyth /* conversion performed on the outline, as well as specific */ 2199*37da2899SCharles.Forsyth /* hinting optimizations. */ 2200*37da2899SCharles.Forsyth /* */ 2201*37da2899SCharles.Forsyth /* <Values> */ 2202*37da2899SCharles.Forsyth /* FT_RENDER_MODE_NORMAL :: */ 2203*37da2899SCharles.Forsyth /* This is the default render mode; it corresponds to 8-bit */ 2204*37da2899SCharles.Forsyth /* anti-aliased bitmaps, using 256 levels of opacity. */ 2205*37da2899SCharles.Forsyth /* */ 2206*37da2899SCharles.Forsyth /* FT_RENDER_MODE_LIGHT :: */ 2207*37da2899SCharles.Forsyth /* This is similar to @FT_RENDER_MODE_NORMAL, except that this */ 2208*37da2899SCharles.Forsyth /* changes the hinting to prevent stem width quantization. This */ 2209*37da2899SCharles.Forsyth /* results in glyph shapes that are more similar to the original, */ 2210*37da2899SCharles.Forsyth /* while being a bit more fuzzy ("better shapes", instead of */ 2211*37da2899SCharles.Forsyth /* "better contrast" if you want :-) THIS IS STILL EXPERIMENTAL, */ 2212*37da2899SCharles.Forsyth /* FOR NOW, THIS WILL PRODUCE RESULTS SIMILAR TO NORMAL MODE !! */ 2213*37da2899SCharles.Forsyth /* */ 2214*37da2899SCharles.Forsyth /* FT_RENDER_MODE_MONO :: */ 2215*37da2899SCharles.Forsyth /* This mode corresponds to 1-bit bitmaps. */ 2216*37da2899SCharles.Forsyth /* */ 2217*37da2899SCharles.Forsyth /* FT_RENDER_MODE_LCD :: */ 2218*37da2899SCharles.Forsyth /* This mode corresponds to horizontal RGB/BGR sub-pixel displays, */ 2219*37da2899SCharles.Forsyth /* like LCD-screens. It produces 8-bit bitmaps that are 3 times */ 2220*37da2899SCharles.Forsyth /* the width of the original glyph outline in pixels, and which use */ 2221*37da2899SCharles.Forsyth /* the @FT_PIXEL_MODE_LCD mode. THIS IS STILL EXPERIMENTAL, DO NOT */ 2222*37da2899SCharles.Forsyth /* USE FOR NOW !! */ 2223*37da2899SCharles.Forsyth /* */ 2224*37da2899SCharles.Forsyth /* FT_RENDER_MODE_LCD_V :: */ 2225*37da2899SCharles.Forsyth /* This mode corresponds to vertical RGB/BGR sub-pixel displays */ 2226*37da2899SCharles.Forsyth /* (like PDA screens, rotated LCD displays, etc.). It produces */ 2227*37da2899SCharles.Forsyth /* 8-bit bitmaps that are 3 times the height of the original */ 2228*37da2899SCharles.Forsyth /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */ 2229*37da2899SCharles.Forsyth /* */ 2230*37da2899SCharles.Forsyth /* <Note> */ 2231*37da2899SCharles.Forsyth /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph are */ 2232*37da2899SCharles.Forsyth /* _not filtered_ to reduce color-fringes. It is up to the caller to */ 2233*37da2899SCharles.Forsyth /* perform this pass. THIS IS STILL EXPERIMENTAL, DO NOT USE FOR NOW */ 2234*37da2899SCharles.Forsyth /* !! */ 2235*37da2899SCharles.Forsyth /* */ 2236*37da2899SCharles.Forsyth typedef enum FT_Render_Mode_ 2237*37da2899SCharles.Forsyth { 2238*37da2899SCharles.Forsyth FT_RENDER_MODE_NORMAL = 0, 2239*37da2899SCharles.Forsyth FT_RENDER_MODE_LIGHT, 2240*37da2899SCharles.Forsyth FT_RENDER_MODE_MONO, 2241*37da2899SCharles.Forsyth FT_RENDER_MODE_LCD, 2242*37da2899SCharles.Forsyth FT_RENDER_MODE_LCD_V, 2243*37da2899SCharles.Forsyth 2244*37da2899SCharles.Forsyth FT_RENDER_MODE_MAX 2245*37da2899SCharles.Forsyth 2246*37da2899SCharles.Forsyth } FT_Render_Mode; 2247*37da2899SCharles.Forsyth 2248*37da2899SCharles.Forsyth 2249*37da2899SCharles.Forsyth /*************************************************************************/ 2250*37da2899SCharles.Forsyth /* */ 2251*37da2899SCharles.Forsyth /* <Enum> */ 2252*37da2899SCharles.Forsyth /* ft_render_mode_xxx */ 2253*37da2899SCharles.Forsyth /* */ 2254*37da2899SCharles.Forsyth /* <Description> */ 2255*37da2899SCharles.Forsyth /* These constats are deprecated. Use the corresponding */ 2256*37da2899SCharles.Forsyth /* @FT_Render_Mode values instead. */ 2257*37da2899SCharles.Forsyth /* */ 2258*37da2899SCharles.Forsyth /* <Values> */ 2259*37da2899SCharles.Forsyth /* ft_render_mode_normal :: see @FT_RENDER_MODE_NORMAL */ 2260*37da2899SCharles.Forsyth /* ft_render_mode_mono :: see @FT_RENDER_MODE_MONO */ 2261*37da2899SCharles.Forsyth /* */ 2262*37da2899SCharles.Forsyth #define ft_render_mode_normal FT_RENDER_MODE_NORMAL 2263*37da2899SCharles.Forsyth #define ft_render_mode_mono FT_RENDER_MODE_MONO 2264*37da2899SCharles.Forsyth 2265*37da2899SCharles.Forsyth 2266*37da2899SCharles.Forsyth /*************************************************************************/ 2267*37da2899SCharles.Forsyth /* */ 2268*37da2899SCharles.Forsyth /* <Function> */ 2269*37da2899SCharles.Forsyth /* FT_Render_Glyph */ 2270*37da2899SCharles.Forsyth /* */ 2271*37da2899SCharles.Forsyth /* <Description> */ 2272*37da2899SCharles.Forsyth /* Converts a given glyph image to a bitmap. It does so by */ 2273*37da2899SCharles.Forsyth /* inspecting the glyph image format, find the relevant renderer, and */ 2274*37da2899SCharles.Forsyth /* invoke it. */ 2275*37da2899SCharles.Forsyth /* */ 2276*37da2899SCharles.Forsyth /* <InOut> */ 2277*37da2899SCharles.Forsyth /* slot :: A handle to the glyph slot containing the image to */ 2278*37da2899SCharles.Forsyth /* convert. */ 2279*37da2899SCharles.Forsyth /* */ 2280*37da2899SCharles.Forsyth /* <Input> */ 2281*37da2899SCharles.Forsyth /* render_mode :: This is the render mode used to render the glyph */ 2282*37da2899SCharles.Forsyth /* image into a bitmap. See FT_Render_Mode for a list */ 2283*37da2899SCharles.Forsyth /* of possible values. */ 2284*37da2899SCharles.Forsyth /* */ 2285*37da2899SCharles.Forsyth /* <Return> */ 2286*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 2287*37da2899SCharles.Forsyth /* */ 2288*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2289*37da2899SCharles.Forsyth FT_Render_Glyph( FT_GlyphSlot slot, 2290*37da2899SCharles.Forsyth FT_Render_Mode render_mode ); 2291*37da2899SCharles.Forsyth 2292*37da2899SCharles.Forsyth 2293*37da2899SCharles.Forsyth /*************************************************************************/ 2294*37da2899SCharles.Forsyth /* */ 2295*37da2899SCharles.Forsyth /* <Enum> */ 2296*37da2899SCharles.Forsyth /* FT_Kerning_Mode */ 2297*37da2899SCharles.Forsyth /* */ 2298*37da2899SCharles.Forsyth /* <Description> */ 2299*37da2899SCharles.Forsyth /* An enumeration used to specify which kerning values to return in */ 2300*37da2899SCharles.Forsyth /* @FT_Get_Kerning. */ 2301*37da2899SCharles.Forsyth /* */ 2302*37da2899SCharles.Forsyth /* <Values> */ 2303*37da2899SCharles.Forsyth /* FT_KERNING_DEFAULT :: Return scaled and grid-fitted kerning */ 2304*37da2899SCharles.Forsyth /* distances (value is 0). */ 2305*37da2899SCharles.Forsyth /* */ 2306*37da2899SCharles.Forsyth /* FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning */ 2307*37da2899SCharles.Forsyth /* distances. */ 2308*37da2899SCharles.Forsyth /* */ 2309*37da2899SCharles.Forsyth /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */ 2310*37da2899SCharles.Forsyth /* units. */ 2311*37da2899SCharles.Forsyth /* */ 2312*37da2899SCharles.Forsyth typedef enum FT_Kerning_Mode_ 2313*37da2899SCharles.Forsyth { 2314*37da2899SCharles.Forsyth FT_KERNING_DEFAULT = 0, 2315*37da2899SCharles.Forsyth FT_KERNING_UNFITTED, 2316*37da2899SCharles.Forsyth FT_KERNING_UNSCALED 2317*37da2899SCharles.Forsyth 2318*37da2899SCharles.Forsyth } FT_Kerning_Mode; 2319*37da2899SCharles.Forsyth 2320*37da2899SCharles.Forsyth 2321*37da2899SCharles.Forsyth /*************************************************************************/ 2322*37da2899SCharles.Forsyth /* */ 2323*37da2899SCharles.Forsyth /* <Const> */ 2324*37da2899SCharles.Forsyth /* ft_kerning_default */ 2325*37da2899SCharles.Forsyth /* */ 2326*37da2899SCharles.Forsyth /* <Description> */ 2327*37da2899SCharles.Forsyth /* This constant is deprecated. Please use @FT_KERNING_DEFAULT */ 2328*37da2899SCharles.Forsyth /* instead. */ 2329*37da2899SCharles.Forsyth /* */ 2330*37da2899SCharles.Forsyth #define ft_kerning_default FT_KERNING_DEFAULT 2331*37da2899SCharles.Forsyth 2332*37da2899SCharles.Forsyth 2333*37da2899SCharles.Forsyth /*************************************************************************/ 2334*37da2899SCharles.Forsyth /* */ 2335*37da2899SCharles.Forsyth /* <Const> */ 2336*37da2899SCharles.Forsyth /* ft_kerning_unfitted */ 2337*37da2899SCharles.Forsyth /* */ 2338*37da2899SCharles.Forsyth /* <Description> */ 2339*37da2899SCharles.Forsyth /* This constant is deprecated. Please use @FT_KERNING_UNFITTED */ 2340*37da2899SCharles.Forsyth /* instead. */ 2341*37da2899SCharles.Forsyth /* */ 2342*37da2899SCharles.Forsyth #define ft_kerning_unfitted FT_KERNING_UNFITTED 2343*37da2899SCharles.Forsyth 2344*37da2899SCharles.Forsyth 2345*37da2899SCharles.Forsyth /*************************************************************************/ 2346*37da2899SCharles.Forsyth /* */ 2347*37da2899SCharles.Forsyth /* <Const> */ 2348*37da2899SCharles.Forsyth /* ft_kerning_unscaled */ 2349*37da2899SCharles.Forsyth /* */ 2350*37da2899SCharles.Forsyth /* <Description> */ 2351*37da2899SCharles.Forsyth /* This constant is deprecated. Please use @FT_KERNING_UNSCALED */ 2352*37da2899SCharles.Forsyth /* instead. */ 2353*37da2899SCharles.Forsyth /* */ 2354*37da2899SCharles.Forsyth #define ft_kerning_unscaled FT_KERNING_UNSCALED 2355*37da2899SCharles.Forsyth 2356*37da2899SCharles.Forsyth 2357*37da2899SCharles.Forsyth /*************************************************************************/ 2358*37da2899SCharles.Forsyth /* */ 2359*37da2899SCharles.Forsyth /* <Function> */ 2360*37da2899SCharles.Forsyth /* FT_Get_Kerning */ 2361*37da2899SCharles.Forsyth /* */ 2362*37da2899SCharles.Forsyth /* <Description> */ 2363*37da2899SCharles.Forsyth /* Returns the kerning vector between two glyphs of a same face. */ 2364*37da2899SCharles.Forsyth /* */ 2365*37da2899SCharles.Forsyth /* <Input> */ 2366*37da2899SCharles.Forsyth /* face :: A handle to a source face object. */ 2367*37da2899SCharles.Forsyth /* */ 2368*37da2899SCharles.Forsyth /* left_glyph :: The index of the left glyph in the kern pair. */ 2369*37da2899SCharles.Forsyth /* */ 2370*37da2899SCharles.Forsyth /* right_glyph :: The index of the right glyph in the kern pair. */ 2371*37da2899SCharles.Forsyth /* */ 2372*37da2899SCharles.Forsyth /* kern_mode :: See @FT_Kerning_Mode for more information. */ 2373*37da2899SCharles.Forsyth /* Determines the scale/dimension of the returned */ 2374*37da2899SCharles.Forsyth /* kerning vector. */ 2375*37da2899SCharles.Forsyth /* */ 2376*37da2899SCharles.Forsyth /* <Output> */ 2377*37da2899SCharles.Forsyth /* akerning :: The kerning vector. This is in font units for */ 2378*37da2899SCharles.Forsyth /* scalable formats, and in pixels for fixed-sizes */ 2379*37da2899SCharles.Forsyth /* formats. */ 2380*37da2899SCharles.Forsyth /* */ 2381*37da2899SCharles.Forsyth /* <Return> */ 2382*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 2383*37da2899SCharles.Forsyth /* */ 2384*37da2899SCharles.Forsyth /* <Note> */ 2385*37da2899SCharles.Forsyth /* Only horizontal layouts (left-to-right & right-to-left) are */ 2386*37da2899SCharles.Forsyth /* supported by this method. Other layouts, or more sophisticated */ 2387*37da2899SCharles.Forsyth /* kernings, are out of the scope of this API function -- they can be */ 2388*37da2899SCharles.Forsyth /* implemented through format-specific interfaces. */ 2389*37da2899SCharles.Forsyth /* */ 2390*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2391*37da2899SCharles.Forsyth FT_Get_Kerning( FT_Face face, 2392*37da2899SCharles.Forsyth FT_UInt left_glyph, 2393*37da2899SCharles.Forsyth FT_UInt right_glyph, 2394*37da2899SCharles.Forsyth FT_UInt kern_mode, 2395*37da2899SCharles.Forsyth FT_Vector *akerning ); 2396*37da2899SCharles.Forsyth 2397*37da2899SCharles.Forsyth 2398*37da2899SCharles.Forsyth /*************************************************************************/ 2399*37da2899SCharles.Forsyth /* */ 2400*37da2899SCharles.Forsyth /* <Function> */ 2401*37da2899SCharles.Forsyth /* FT_Get_Glyph_Name */ 2402*37da2899SCharles.Forsyth /* */ 2403*37da2899SCharles.Forsyth /* <Description> */ 2404*37da2899SCharles.Forsyth /* Retrieves the ASCII name of a given glyph in a face. This only */ 2405*37da2899SCharles.Forsyth /* works for those faces where FT_HAS_GLYPH_NAME(face) returns true. */ 2406*37da2899SCharles.Forsyth /* */ 2407*37da2899SCharles.Forsyth /* <Input> */ 2408*37da2899SCharles.Forsyth /* face :: A handle to a source face object. */ 2409*37da2899SCharles.Forsyth /* */ 2410*37da2899SCharles.Forsyth /* glyph_index :: The glyph index. */ 2411*37da2899SCharles.Forsyth /* */ 2412*37da2899SCharles.Forsyth /* buffer_max :: The maximal number of bytes available in the */ 2413*37da2899SCharles.Forsyth /* buffer. */ 2414*37da2899SCharles.Forsyth /* */ 2415*37da2899SCharles.Forsyth /* <Output> */ 2416*37da2899SCharles.Forsyth /* buffer :: A pointer to a target buffer where the name will be */ 2417*37da2899SCharles.Forsyth /* copied to. */ 2418*37da2899SCharles.Forsyth /* */ 2419*37da2899SCharles.Forsyth /* <Return> */ 2420*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 2421*37da2899SCharles.Forsyth /* */ 2422*37da2899SCharles.Forsyth /* <Note> */ 2423*37da2899SCharles.Forsyth /* An error is returned if the face doesn't provide glyph names or if */ 2424*37da2899SCharles.Forsyth /* the glyph index is invalid. In all cases of failure, the first */ 2425*37da2899SCharles.Forsyth /* byte of `buffer' will be set to 0 to indicate an empty name. */ 2426*37da2899SCharles.Forsyth /* */ 2427*37da2899SCharles.Forsyth /* The glyph name is truncated to fit within the buffer if it is too */ 2428*37da2899SCharles.Forsyth /* long. The returned string is always zero-terminated. */ 2429*37da2899SCharles.Forsyth /* */ 2430*37da2899SCharles.Forsyth /* This function is not compiled within the library if the config */ 2431*37da2899SCharles.Forsyth /* macro FT_CONFIG_OPTION_NO_GLYPH_NAMES is defined in */ 2432*37da2899SCharles.Forsyth /* `include/freetype/config/ftoptions.h' */ 2433*37da2899SCharles.Forsyth /* */ 2434*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2435*37da2899SCharles.Forsyth FT_Get_Glyph_Name( FT_Face face, 2436*37da2899SCharles.Forsyth FT_UInt glyph_index, 2437*37da2899SCharles.Forsyth FT_Pointer buffer, 2438*37da2899SCharles.Forsyth FT_UInt buffer_max ); 2439*37da2899SCharles.Forsyth 2440*37da2899SCharles.Forsyth 2441*37da2899SCharles.Forsyth /*************************************************************************/ 2442*37da2899SCharles.Forsyth /* */ 2443*37da2899SCharles.Forsyth /* <Function> */ 2444*37da2899SCharles.Forsyth /* FT_Get_Postscript_Name */ 2445*37da2899SCharles.Forsyth /* */ 2446*37da2899SCharles.Forsyth /* <Description> */ 2447*37da2899SCharles.Forsyth /* Retrieves the ASCII Postscript name of a given face, if available. */ 2448*37da2899SCharles.Forsyth /* This should only work with Postscript and TrueType fonts. */ 2449*37da2899SCharles.Forsyth /* */ 2450*37da2899SCharles.Forsyth /* <Input> */ 2451*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2452*37da2899SCharles.Forsyth /* */ 2453*37da2899SCharles.Forsyth /* <Return> */ 2454*37da2899SCharles.Forsyth /* A pointer to the face's Postscript name. NULL if un-available. */ 2455*37da2899SCharles.Forsyth /* */ 2456*37da2899SCharles.Forsyth /* <Note> */ 2457*37da2899SCharles.Forsyth /* The returned pointer is owned by the face and will be destroyed */ 2458*37da2899SCharles.Forsyth /* with it. */ 2459*37da2899SCharles.Forsyth /* */ 2460*37da2899SCharles.Forsyth FT_EXPORT( const char* ) 2461*37da2899SCharles.Forsyth FT_Get_Postscript_Name( FT_Face face ); 2462*37da2899SCharles.Forsyth 2463*37da2899SCharles.Forsyth 2464*37da2899SCharles.Forsyth /*************************************************************************/ 2465*37da2899SCharles.Forsyth /* */ 2466*37da2899SCharles.Forsyth /* <Function> */ 2467*37da2899SCharles.Forsyth /* FT_Select_Charmap */ 2468*37da2899SCharles.Forsyth /* */ 2469*37da2899SCharles.Forsyth /* <Description> */ 2470*37da2899SCharles.Forsyth /* Selects a given charmap by its encoding tag (as listed in */ 2471*37da2899SCharles.Forsyth /* `freetype.h'). */ 2472*37da2899SCharles.Forsyth /* */ 2473*37da2899SCharles.Forsyth /* <InOut> */ 2474*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2475*37da2899SCharles.Forsyth /* */ 2476*37da2899SCharles.Forsyth /* <Input> */ 2477*37da2899SCharles.Forsyth /* encoding :: A handle to the selected charmap. */ 2478*37da2899SCharles.Forsyth /* */ 2479*37da2899SCharles.Forsyth /* <Return> */ 2480*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 2481*37da2899SCharles.Forsyth /* */ 2482*37da2899SCharles.Forsyth /* <Note> */ 2483*37da2899SCharles.Forsyth /* This function will return an error if no charmap in the face */ 2484*37da2899SCharles.Forsyth /* corresponds to the encoding queried here. */ 2485*37da2899SCharles.Forsyth /* */ 2486*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2487*37da2899SCharles.Forsyth FT_Select_Charmap( FT_Face face, 2488*37da2899SCharles.Forsyth FT_Encoding encoding ); 2489*37da2899SCharles.Forsyth 2490*37da2899SCharles.Forsyth 2491*37da2899SCharles.Forsyth /*************************************************************************/ 2492*37da2899SCharles.Forsyth /* */ 2493*37da2899SCharles.Forsyth /* <Function> */ 2494*37da2899SCharles.Forsyth /* FT_Set_Charmap */ 2495*37da2899SCharles.Forsyth /* */ 2496*37da2899SCharles.Forsyth /* <Description> */ 2497*37da2899SCharles.Forsyth /* Selects a given charmap for character code to glyph index */ 2498*37da2899SCharles.Forsyth /* decoding. */ 2499*37da2899SCharles.Forsyth /* */ 2500*37da2899SCharles.Forsyth /* <InOut> */ 2501*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2502*37da2899SCharles.Forsyth /* */ 2503*37da2899SCharles.Forsyth /* <Input> */ 2504*37da2899SCharles.Forsyth /* charmap :: A handle to the selected charmap. */ 2505*37da2899SCharles.Forsyth /* */ 2506*37da2899SCharles.Forsyth /* <Return> */ 2507*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 2508*37da2899SCharles.Forsyth /* */ 2509*37da2899SCharles.Forsyth /* <Note> */ 2510*37da2899SCharles.Forsyth /* This function will return an error if the charmap is not part of */ 2511*37da2899SCharles.Forsyth /* the face (i.e., if it is not listed in the face->charmaps[] */ 2512*37da2899SCharles.Forsyth /* table). */ 2513*37da2899SCharles.Forsyth /* */ 2514*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 2515*37da2899SCharles.Forsyth FT_Set_Charmap( FT_Face face, 2516*37da2899SCharles.Forsyth FT_CharMap charmap ); 2517*37da2899SCharles.Forsyth 2518*37da2899SCharles.Forsyth 2519*37da2899SCharles.Forsyth /*************************************************************************/ 2520*37da2899SCharles.Forsyth /* */ 2521*37da2899SCharles.Forsyth /* <Function> */ 2522*37da2899SCharles.Forsyth /* FT_Get_Char_Index */ 2523*37da2899SCharles.Forsyth /* */ 2524*37da2899SCharles.Forsyth /* <Description> */ 2525*37da2899SCharles.Forsyth /* Returns the glyph index of a given character code. This function */ 2526*37da2899SCharles.Forsyth /* uses a charmap object to do the translation. */ 2527*37da2899SCharles.Forsyth /* */ 2528*37da2899SCharles.Forsyth /* <Input> */ 2529*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2530*37da2899SCharles.Forsyth /* */ 2531*37da2899SCharles.Forsyth /* charcode :: The character code. */ 2532*37da2899SCharles.Forsyth /* */ 2533*37da2899SCharles.Forsyth /* <Return> */ 2534*37da2899SCharles.Forsyth /* The glyph index. 0 means `undefined character code'. */ 2535*37da2899SCharles.Forsyth /* */ 2536*37da2899SCharles.Forsyth /* <Note> */ 2537*37da2899SCharles.Forsyth /* FreeType computes its own glyph indices which are not necessarily */ 2538*37da2899SCharles.Forsyth /* the same as used in the font in case the font is based on glyph */ 2539*37da2899SCharles.Forsyth /* indices. Reason for this behaviour is to assure that index 0 is */ 2540*37da2899SCharles.Forsyth /* never used, representing the missing glyph. */ 2541*37da2899SCharles.Forsyth /* */ 2542*37da2899SCharles.Forsyth FT_EXPORT( FT_UInt ) 2543*37da2899SCharles.Forsyth FT_Get_Char_Index( FT_Face face, 2544*37da2899SCharles.Forsyth FT_ULong charcode ); 2545*37da2899SCharles.Forsyth 2546*37da2899SCharles.Forsyth 2547*37da2899SCharles.Forsyth /*************************************************************************/ 2548*37da2899SCharles.Forsyth /* */ 2549*37da2899SCharles.Forsyth /* <Function> */ 2550*37da2899SCharles.Forsyth /* FT_Get_First_Char */ 2551*37da2899SCharles.Forsyth /* */ 2552*37da2899SCharles.Forsyth /* <Description> */ 2553*37da2899SCharles.Forsyth /* This function is used to return the first character code in the */ 2554*37da2899SCharles.Forsyth /* current charmap of a given face. It will also return the */ 2555*37da2899SCharles.Forsyth /* corresponding glyph index. */ 2556*37da2899SCharles.Forsyth /* */ 2557*37da2899SCharles.Forsyth /* <Input> */ 2558*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2559*37da2899SCharles.Forsyth /* */ 2560*37da2899SCharles.Forsyth /* <Output> */ 2561*37da2899SCharles.Forsyth /* agindex :: Glyph index of first character code. 0 if charmap is */ 2562*37da2899SCharles.Forsyth /* empty. */ 2563*37da2899SCharles.Forsyth /* */ 2564*37da2899SCharles.Forsyth /* <Return> */ 2565*37da2899SCharles.Forsyth /* The charmap's first character code. */ 2566*37da2899SCharles.Forsyth /* */ 2567*37da2899SCharles.Forsyth /* <Note> */ 2568*37da2899SCharles.Forsyth /* You should use this function with @FT_Get_Next_Char to be able to */ 2569*37da2899SCharles.Forsyth /* parse all character codes available in a given charmap. The code */ 2570*37da2899SCharles.Forsyth /* should look like this: */ 2571*37da2899SCharles.Forsyth /* */ 2572*37da2899SCharles.Forsyth /* { */ 2573*37da2899SCharles.Forsyth /* FT_ULong charcode; */ 2574*37da2899SCharles.Forsyth /* FT_UInt gindex; */ 2575*37da2899SCharles.Forsyth /* */ 2576*37da2899SCharles.Forsyth /* */ 2577*37da2899SCharles.Forsyth /* charcode = FT_Get_First_Char( face, &gindex ); */ 2578*37da2899SCharles.Forsyth /* while ( gindex != 0 ) */ 2579*37da2899SCharles.Forsyth /* { */ 2580*37da2899SCharles.Forsyth /* ... do something with (charcode,gindex) pair ... */ 2581*37da2899SCharles.Forsyth /* */ 2582*37da2899SCharles.Forsyth /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */ 2583*37da2899SCharles.Forsyth /* } */ 2584*37da2899SCharles.Forsyth /* } */ 2585*37da2899SCharles.Forsyth /* */ 2586*37da2899SCharles.Forsyth /* Note that `*agindex' will be set to 0 if the charmap is empty. */ 2587*37da2899SCharles.Forsyth /* The result itself can be 0 in two cases: if the charmap is empty */ 2588*37da2899SCharles.Forsyth /* or when the value 0 is the first valid character code. */ 2589*37da2899SCharles.Forsyth /* */ 2590*37da2899SCharles.Forsyth FT_EXPORT( FT_ULong ) 2591*37da2899SCharles.Forsyth FT_Get_First_Char( FT_Face face, 2592*37da2899SCharles.Forsyth FT_UInt *agindex ); 2593*37da2899SCharles.Forsyth 2594*37da2899SCharles.Forsyth 2595*37da2899SCharles.Forsyth /*************************************************************************/ 2596*37da2899SCharles.Forsyth /* */ 2597*37da2899SCharles.Forsyth /* <Function> */ 2598*37da2899SCharles.Forsyth /* FT_Get_Next_Char */ 2599*37da2899SCharles.Forsyth /* */ 2600*37da2899SCharles.Forsyth /* <Description> */ 2601*37da2899SCharles.Forsyth /* This function is used to return the next character code in the */ 2602*37da2899SCharles.Forsyth /* current charmap of a given face following the value 'char_code', */ 2603*37da2899SCharles.Forsyth /* as well as the corresponding glyph index. */ 2604*37da2899SCharles.Forsyth /* */ 2605*37da2899SCharles.Forsyth /* <Input> */ 2606*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2607*37da2899SCharles.Forsyth /* char_code :: The starting character code. */ 2608*37da2899SCharles.Forsyth /* */ 2609*37da2899SCharles.Forsyth /* <Output> */ 2610*37da2899SCharles.Forsyth /* agindex :: Glyph index of first character code. 0 if charmap */ 2611*37da2899SCharles.Forsyth /* is empty. */ 2612*37da2899SCharles.Forsyth /* */ 2613*37da2899SCharles.Forsyth /* <Return> */ 2614*37da2899SCharles.Forsyth /* The charmap's next character code. */ 2615*37da2899SCharles.Forsyth /* */ 2616*37da2899SCharles.Forsyth /* <Note> */ 2617*37da2899SCharles.Forsyth /* You should use this function with @FT_Get_First_Char to walk */ 2618*37da2899SCharles.Forsyth /* through all character codes available in a given charmap. See */ 2619*37da2899SCharles.Forsyth /* the note for this function for a simple code example. */ 2620*37da2899SCharles.Forsyth /* */ 2621*37da2899SCharles.Forsyth /* Note that `*agindex' will be set to 0 when there are no more codes */ 2622*37da2899SCharles.Forsyth /* in the charmap. */ 2623*37da2899SCharles.Forsyth /* */ 2624*37da2899SCharles.Forsyth FT_EXPORT( FT_ULong ) 2625*37da2899SCharles.Forsyth FT_Get_Next_Char( FT_Face face, 2626*37da2899SCharles.Forsyth FT_ULong char_code, 2627*37da2899SCharles.Forsyth FT_UInt *agindex ); 2628*37da2899SCharles.Forsyth 2629*37da2899SCharles.Forsyth 2630*37da2899SCharles.Forsyth /*************************************************************************/ 2631*37da2899SCharles.Forsyth /* */ 2632*37da2899SCharles.Forsyth /* <Function> */ 2633*37da2899SCharles.Forsyth /* FT_Get_Name_Index */ 2634*37da2899SCharles.Forsyth /* */ 2635*37da2899SCharles.Forsyth /* <Description> */ 2636*37da2899SCharles.Forsyth /* Returns the glyph index of a given glyph name. This function uses */ 2637*37da2899SCharles.Forsyth /* driver specific objects to do the translation. */ 2638*37da2899SCharles.Forsyth /* */ 2639*37da2899SCharles.Forsyth /* <Input> */ 2640*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 2641*37da2899SCharles.Forsyth /* */ 2642*37da2899SCharles.Forsyth /* glyph_name :: The glyph name. */ 2643*37da2899SCharles.Forsyth /* */ 2644*37da2899SCharles.Forsyth /* <Return> */ 2645*37da2899SCharles.Forsyth /* The glyph index. 0 means `undefined character code'. */ 2646*37da2899SCharles.Forsyth /* */ 2647*37da2899SCharles.Forsyth FT_EXPORT( FT_UInt ) 2648*37da2899SCharles.Forsyth FT_Get_Name_Index( FT_Face face, 2649*37da2899SCharles.Forsyth FT_String* glyph_name ); 2650*37da2899SCharles.Forsyth 2651*37da2899SCharles.Forsyth 2652*37da2899SCharles.Forsyth 2653*37da2899SCharles.Forsyth /*************************************************************************/ 2654*37da2899SCharles.Forsyth /* */ 2655*37da2899SCharles.Forsyth /* <Section> */ 2656*37da2899SCharles.Forsyth /* computations */ 2657*37da2899SCharles.Forsyth /* */ 2658*37da2899SCharles.Forsyth /* <Title> */ 2659*37da2899SCharles.Forsyth /* Computations */ 2660*37da2899SCharles.Forsyth /* */ 2661*37da2899SCharles.Forsyth /* <Abstract> */ 2662*37da2899SCharles.Forsyth /* Crunching fixed numbers and vectors */ 2663*37da2899SCharles.Forsyth /* */ 2664*37da2899SCharles.Forsyth /* <Description> */ 2665*37da2899SCharles.Forsyth /* This section contains various functions used to perform */ 2666*37da2899SCharles.Forsyth /* computations on 16.16 fixed-float numbers or 2d vectors. */ 2667*37da2899SCharles.Forsyth /* */ 2668*37da2899SCharles.Forsyth /* <Order> */ 2669*37da2899SCharles.Forsyth /* FT_MulDiv */ 2670*37da2899SCharles.Forsyth /* FT_MulFix */ 2671*37da2899SCharles.Forsyth /* FT_DivFix */ 2672*37da2899SCharles.Forsyth /* FT_RoundFix */ 2673*37da2899SCharles.Forsyth /* FT_CeilFix */ 2674*37da2899SCharles.Forsyth /* FT_FloorFix */ 2675*37da2899SCharles.Forsyth /* FT_Vector_Transform */ 2676*37da2899SCharles.Forsyth /* FT_Matrix_Multiply */ 2677*37da2899SCharles.Forsyth /* FT_Matrix_Invert */ 2678*37da2899SCharles.Forsyth /* */ 2679*37da2899SCharles.Forsyth /*************************************************************************/ 2680*37da2899SCharles.Forsyth 2681*37da2899SCharles.Forsyth 2682*37da2899SCharles.Forsyth /*************************************************************************/ 2683*37da2899SCharles.Forsyth /* */ 2684*37da2899SCharles.Forsyth /* <Function> */ 2685*37da2899SCharles.Forsyth /* FT_MulDiv */ 2686*37da2899SCharles.Forsyth /* */ 2687*37da2899SCharles.Forsyth /* <Description> */ 2688*37da2899SCharles.Forsyth /* A very simple function used to perform the computation `(a*b)/c' */ 2689*37da2899SCharles.Forsyth /* with maximal accuracy (it uses a 64-bit intermediate integer */ 2690*37da2899SCharles.Forsyth /* whenever necessary). */ 2691*37da2899SCharles.Forsyth /* */ 2692*37da2899SCharles.Forsyth /* This function isn't necessarily as fast as some processor specific */ 2693*37da2899SCharles.Forsyth /* operations, but is at least completely portable. */ 2694*37da2899SCharles.Forsyth /* */ 2695*37da2899SCharles.Forsyth /* <Input> */ 2696*37da2899SCharles.Forsyth /* a :: The first multiplier. */ 2697*37da2899SCharles.Forsyth /* b :: The second multiplier. */ 2698*37da2899SCharles.Forsyth /* c :: The divisor. */ 2699*37da2899SCharles.Forsyth /* */ 2700*37da2899SCharles.Forsyth /* <Return> */ 2701*37da2899SCharles.Forsyth /* The result of `(a*b)/c'. This function never traps when trying to */ 2702*37da2899SCharles.Forsyth /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */ 2703*37da2899SCharles.Forsyth /* on the signs of `a' and `b'. */ 2704*37da2899SCharles.Forsyth /* */ 2705*37da2899SCharles.Forsyth FT_EXPORT( FT_Long ) 2706*37da2899SCharles.Forsyth FT_MulDiv( FT_Long a, 2707*37da2899SCharles.Forsyth FT_Long b, 2708*37da2899SCharles.Forsyth FT_Long c ); 2709*37da2899SCharles.Forsyth 2710*37da2899SCharles.Forsyth 2711*37da2899SCharles.Forsyth /*************************************************************************/ 2712*37da2899SCharles.Forsyth /* */ 2713*37da2899SCharles.Forsyth /* <Function> */ 2714*37da2899SCharles.Forsyth /* FT_MulFix */ 2715*37da2899SCharles.Forsyth /* */ 2716*37da2899SCharles.Forsyth /* <Description> */ 2717*37da2899SCharles.Forsyth /* A very simple function used to perform the computation */ 2718*37da2899SCharles.Forsyth /* `(a*b)/0x10000' with maximal accuracy. Most of the time this is */ 2719*37da2899SCharles.Forsyth /* used to multiply a given value by a 16.16 fixed float factor. */ 2720*37da2899SCharles.Forsyth /* */ 2721*37da2899SCharles.Forsyth /* <Input> */ 2722*37da2899SCharles.Forsyth /* a :: The first multiplier. */ 2723*37da2899SCharles.Forsyth /* b :: The second multiplier. Use a 16.16 factor here whenever */ 2724*37da2899SCharles.Forsyth /* possible (see note below). */ 2725*37da2899SCharles.Forsyth /* */ 2726*37da2899SCharles.Forsyth /* <Return> */ 2727*37da2899SCharles.Forsyth /* The result of `(a*b)/0x10000'. */ 2728*37da2899SCharles.Forsyth /* */ 2729*37da2899SCharles.Forsyth /* <Note> */ 2730*37da2899SCharles.Forsyth /* This function has been optimized for the case where the absolute */ 2731*37da2899SCharles.Forsyth /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */ 2732*37da2899SCharles.Forsyth /* As this happens mainly when scaling from notional units to */ 2733*37da2899SCharles.Forsyth /* fractional pixels in FreeType, it resulted in noticeable speed */ 2734*37da2899SCharles.Forsyth /* improvements between versions 2.x and 1.x. */ 2735*37da2899SCharles.Forsyth /* */ 2736*37da2899SCharles.Forsyth /* As a conclusion, always try to place a 16.16 factor as the */ 2737*37da2899SCharles.Forsyth /* _second_ argument of this function; this can make a great */ 2738*37da2899SCharles.Forsyth /* difference. */ 2739*37da2899SCharles.Forsyth /* */ 2740*37da2899SCharles.Forsyth FT_EXPORT( FT_Long ) 2741*37da2899SCharles.Forsyth FT_MulFix( FT_Long a, 2742*37da2899SCharles.Forsyth FT_Long b ); 2743*37da2899SCharles.Forsyth 2744*37da2899SCharles.Forsyth 2745*37da2899SCharles.Forsyth /*************************************************************************/ 2746*37da2899SCharles.Forsyth /* */ 2747*37da2899SCharles.Forsyth /* <Function> */ 2748*37da2899SCharles.Forsyth /* FT_DivFix */ 2749*37da2899SCharles.Forsyth /* */ 2750*37da2899SCharles.Forsyth /* <Description> */ 2751*37da2899SCharles.Forsyth /* A very simple function used to perform the computation */ 2752*37da2899SCharles.Forsyth /* `(a*0x10000)/b' with maximal accuracy. Most of the time, this is */ 2753*37da2899SCharles.Forsyth /* used to divide a given value by a 16.16 fixed float factor. */ 2754*37da2899SCharles.Forsyth /* */ 2755*37da2899SCharles.Forsyth /* <Input> */ 2756*37da2899SCharles.Forsyth /* a :: The first multiplier. */ 2757*37da2899SCharles.Forsyth /* b :: The second multiplier. Use a 16.16 factor here whenever */ 2758*37da2899SCharles.Forsyth /* possible (see note below). */ 2759*37da2899SCharles.Forsyth /* */ 2760*37da2899SCharles.Forsyth /* <Return> */ 2761*37da2899SCharles.Forsyth /* The result of `(a*0x10000)/b'. */ 2762*37da2899SCharles.Forsyth /* */ 2763*37da2899SCharles.Forsyth /* <Note> */ 2764*37da2899SCharles.Forsyth /* The optimization for FT_DivFix() is simple: If (a << 16) fits in */ 2765*37da2899SCharles.Forsyth /* 32 bits, then the division is computed directly. Otherwise, we */ 2766*37da2899SCharles.Forsyth /* use a specialized version of the old @FT_MulDiv64. */ 2767*37da2899SCharles.Forsyth /* */ 2768*37da2899SCharles.Forsyth FT_EXPORT( FT_Long ) 2769*37da2899SCharles.Forsyth FT_DivFix( FT_Long a, 2770*37da2899SCharles.Forsyth FT_Long b ); 2771*37da2899SCharles.Forsyth 2772*37da2899SCharles.Forsyth 2773*37da2899SCharles.Forsyth /*************************************************************************/ 2774*37da2899SCharles.Forsyth /* */ 2775*37da2899SCharles.Forsyth /* <Function> */ 2776*37da2899SCharles.Forsyth /* FT_RoundFix */ 2777*37da2899SCharles.Forsyth /* */ 2778*37da2899SCharles.Forsyth /* <Description> */ 2779*37da2899SCharles.Forsyth /* A very simple function used to round a 16.16 fixed number. */ 2780*37da2899SCharles.Forsyth /* */ 2781*37da2899SCharles.Forsyth /* <Input> */ 2782*37da2899SCharles.Forsyth /* a :: The number to be rounded. */ 2783*37da2899SCharles.Forsyth /* */ 2784*37da2899SCharles.Forsyth /* <Return> */ 2785*37da2899SCharles.Forsyth /* The result of `(a + 0x8000) & -0x10000'. */ 2786*37da2899SCharles.Forsyth /* */ 2787*37da2899SCharles.Forsyth FT_EXPORT( FT_Fixed ) 2788*37da2899SCharles.Forsyth FT_RoundFix( FT_Fixed a ); 2789*37da2899SCharles.Forsyth 2790*37da2899SCharles.Forsyth 2791*37da2899SCharles.Forsyth /*************************************************************************/ 2792*37da2899SCharles.Forsyth /* */ 2793*37da2899SCharles.Forsyth /* <Function> */ 2794*37da2899SCharles.Forsyth /* FT_CeilFix */ 2795*37da2899SCharles.Forsyth /* */ 2796*37da2899SCharles.Forsyth /* <Description> */ 2797*37da2899SCharles.Forsyth /* A very simple function used to compute the ceiling function of a */ 2798*37da2899SCharles.Forsyth /* 16.16 fixed number. */ 2799*37da2899SCharles.Forsyth /* */ 2800*37da2899SCharles.Forsyth /* <Input> */ 2801*37da2899SCharles.Forsyth /* a :: The number for which the ceiling function is to be computed. */ 2802*37da2899SCharles.Forsyth /* */ 2803*37da2899SCharles.Forsyth /* <Return> */ 2804*37da2899SCharles.Forsyth /* The result of `(a + 0x10000 - 1) & -0x10000'. */ 2805*37da2899SCharles.Forsyth /* */ 2806*37da2899SCharles.Forsyth FT_EXPORT( FT_Fixed ) 2807*37da2899SCharles.Forsyth FT_CeilFix( FT_Fixed a ); 2808*37da2899SCharles.Forsyth 2809*37da2899SCharles.Forsyth 2810*37da2899SCharles.Forsyth /*************************************************************************/ 2811*37da2899SCharles.Forsyth /* */ 2812*37da2899SCharles.Forsyth /* <Function> */ 2813*37da2899SCharles.Forsyth /* FT_FloorFix */ 2814*37da2899SCharles.Forsyth /* */ 2815*37da2899SCharles.Forsyth /* <Description> */ 2816*37da2899SCharles.Forsyth /* A very simple function used to compute the floor function of a */ 2817*37da2899SCharles.Forsyth /* 16.16 fixed number. */ 2818*37da2899SCharles.Forsyth /* */ 2819*37da2899SCharles.Forsyth /* <Input> */ 2820*37da2899SCharles.Forsyth /* a :: The number for which the floor function is to be computed. */ 2821*37da2899SCharles.Forsyth /* */ 2822*37da2899SCharles.Forsyth /* <Return> */ 2823*37da2899SCharles.Forsyth /* The result of `a & -0x10000'. */ 2824*37da2899SCharles.Forsyth /* */ 2825*37da2899SCharles.Forsyth FT_EXPORT( FT_Fixed ) 2826*37da2899SCharles.Forsyth FT_FloorFix( FT_Fixed a ); 2827*37da2899SCharles.Forsyth 2828*37da2899SCharles.Forsyth 2829*37da2899SCharles.Forsyth /*************************************************************************/ 2830*37da2899SCharles.Forsyth /* */ 2831*37da2899SCharles.Forsyth /* <Function> */ 2832*37da2899SCharles.Forsyth /* FT_Vector_Transform */ 2833*37da2899SCharles.Forsyth /* */ 2834*37da2899SCharles.Forsyth /* <Description> */ 2835*37da2899SCharles.Forsyth /* Transforms a single vector through a 2x2 matrix. */ 2836*37da2899SCharles.Forsyth /* */ 2837*37da2899SCharles.Forsyth /* <InOut> */ 2838*37da2899SCharles.Forsyth /* vector :: The target vector to transform. */ 2839*37da2899SCharles.Forsyth /* */ 2840*37da2899SCharles.Forsyth /* <Input> */ 2841*37da2899SCharles.Forsyth /* matrix :: A pointer to the source 2x2 matrix. */ 2842*37da2899SCharles.Forsyth /* */ 2843*37da2899SCharles.Forsyth /* <Note> */ 2844*37da2899SCharles.Forsyth /* The result is undefined if either `vector' or `matrix' is invalid. */ 2845*37da2899SCharles.Forsyth /* */ 2846*37da2899SCharles.Forsyth FT_EXPORT( void ) 2847*37da2899SCharles.Forsyth FT_Vector_Transform( FT_Vector* vec, 2848*37da2899SCharles.Forsyth FT_Matrix* matrix ); 2849*37da2899SCharles.Forsyth 2850*37da2899SCharles.Forsyth 2851*37da2899SCharles.Forsyth /* */ 2852*37da2899SCharles.Forsyth 2853*37da2899SCharles.Forsyth 2854*37da2899SCharles.Forsyth FT_END_HEADER 2855*37da2899SCharles.Forsyth 2856*37da2899SCharles.Forsyth #endif /* __FREETYPE_H__ */ 2857*37da2899SCharles.Forsyth 2858*37da2899SCharles.Forsyth 2859*37da2899SCharles.Forsyth /* END */ 2860*37da2899SCharles.Forsyth 2861