/******************************************************************* * * ftxsbit.h * * embedded bitmap support API extension * * Copyright 1996-1999 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used * modified and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * * * This extension is used to load the embedded bitmaps present * in certain TrueType files. * ******************************************************************/ #ifndef FTXSBIT_H #define FTXSBIT_H #include "freetype.h" #ifdef __cplusplus extern "C" { #endif /*************************************************************/ /* */ /* TT_SBit_Metrics */ /* */ /* */ /* A structure used to hold the big metrics of a given */ /* glyph bitmap in a TrueType or OpenType font. These */ /* are usually found in the `EBDT' table. */ /* */ /* */ /* height :: glyph height in pixels */ /* width :: glyph width in pixels */ /* */ /* horiBearingX :: horizontal left bearing */ /* horiBearingY :: horizontal top bearing */ /* horiAdvance :: horizontal advance */ /* */ /* vertBearingX :: vertical left bearing */ /* vertBearingY :: vertical top bearing */ /* vertAdvance :: vertical advance */ /* */ typedef struct TT_SBit_Metrics_ { TT_Byte height; TT_Byte width; TT_Char horiBearingX; TT_Char horiBearingY; TT_Byte horiAdvance; TT_Char vertBearingX; TT_Char vertBearingY; TT_Byte vertAdvance; } TT_SBit_Metrics; /*************************************************************/ /* */ /* TT_SBit_Small_Metrics */ /* */ /* */ /* A structure used to hold the small metrics of a given */ /* glyph bitmap in a TrueType or OpenType font. These */ /* are usually found in the `EBDT' table. */ /* */ /* */ /* height :: glyph height in pixels */ /* width :: glyph width in pixels */ /* */ /* bearingX :: left-side bearing */ /* bearingY :: top-side bearing */ /* advance :: advance width or height */ /* */ typedef struct TT_SBit_Small_Metrics_ { TT_Byte height; TT_Byte width; TT_Char bearingX; TT_Char bearingY; TT_Byte advance; } TT_SBit_Small_Metrics; /*************************************************************/ /* */ /* TT_SBit_Line_Metrics */ /* */ /* */ /* A structure used to describe the text line metrics of */ /* a given bitmap strike, for either horizontal or */ /* vertical layout. */ /* */ /* */ /* ascender :: ascender in pixels */ /* descender :: descender in pixels */ /* max_width :: maximum glyph width in pixels */ /* */ /* caret_slope_enumerator :: Rise of the caret slope, */ /* typically set to 1 for non-italic fonts. */ /* caret_slope_denominator :: Rise of the caret slope, */ /* typically set to 0 for non-italic fonts. */ /* caret_offset :: Offset in pixels */ /* to move the caret for proper positioning. */ /* */ /* min_origin_SB :: Minimum of horiBearingX */ /* (resp. vertBearingY) */ /* min_advance_SB :: Minimum of */ /* (hori. advance - ( horiBearingX + width )) */ /* (resp. vert. advance - ( vertBearingY + height )) */ /* max_before_BL :: Maximum of horiBearingY */ /* (resp. Maximum of vertBearingY) */ /* min_after_BL :: Minimum of ( horiBearingY - height ) */ /* (resp. vertBearingX - width ) */ /* */ typedef struct TT_SBit_Line_Metrics_ { TT_Char ascender; TT_Char descender; TT_Byte max_width; TT_Char caret_slope_numerator; TT_Char caret_slope_denominator; TT_Char caret_offset; TT_Char min_origin_SB; TT_Char min_advance_SB; TT_Char max_before_BL; TT_Char min_after_BL; TT_Char pads[2]; } TT_SBit_Line_Metrics; /*************************************************************/ /* */ /* TT_SBit_Range */ /* */ /* */ /* A TrueType/OpenType subIndexTable as defined in the */ /* `EBLC' or `bloc' tables. */ /* */ /* */ /* */ /* first_glyph :: first glyph index in range */ /* last_glyph :: last glyph index in range */ /* */ /* index_format :: format of index table. valid */ /* values are 1 to 5. */ /* */ /* image_format :: format of `EBDT' image data */ /* image_offset :: offset to image data in `EBDT' */ /* */ /* image_size :: for index formats 2 and 5. This is */ /* the size in bytes of each glyph bitmap */ /* glyph bitmap */ /* */ /* big_metrics :: for index formats 2 and 5. This is */ /* the big metrics for each glyph bitmap */ /* */ /* num_glyphs :: for index formats 4 and 5. This is */ /* the number of glyphs in the code */ /* array. */ /* */ /* glyph_offsets :: for index formats 1 and 3. */ /* glyph_codes :: for index formats 4 and 5. */ /* */ /* table_offset :: offset of index table in `EBLC' table */ /* -- only used during strike loading. */ /* */ typedef struct TT_SBit_Range { TT_UShort first_glyph; TT_UShort last_glyph; TT_UShort index_format; TT_UShort image_format; TT_ULong image_offset; TT_ULong image_size; TT_SBit_Metrics metrics; TT_ULong num_glyphs; TT_ULong* glyph_offsets; TT_UShort* glyph_codes; TT_ULong table_offset; } TT_SBit_Range; /*************************************************************/ /* */ /* TT_SBit_Strike */ /* */ /* */ /* A structure used describe a given bitmap strike in the */ /* `EBLC' or `bloc' tables. */ /* */ /* */ /* */ /* num_index_ranges :: number of index ranges */ /* index_ranges :: array of glyph index ranges */ /* */ /* color_ref :: unused. color reference? */ /* hori :: line metrics for horizontal layouts. */ /* vert :: line metrics for vertical layouts. */ /* */ /* start_glyph :: lowest glyph index for this strike. */ /* end_glyph :: higher glyph index for this strike. */ /* */ /* x_ppem :: horizontal pixels per EM */ /* y_ppem :: vertical pixels per EM */ /* bit_depth :: bit depth. valid values are 1, 2, 4 & 8 */ /* flags :: vertical or horizontal? */ /* */ typedef struct TT_SBit_Strike_ { TT_Int num_ranges; TT_SBit_Range* sbit_ranges; TT_ULong ranges_offset; TT_ULong color_ref; TT_SBit_Line_Metrics hori; TT_SBit_Line_Metrics vert; TT_UShort start_glyph; TT_UShort end_glyph; TT_Byte x_ppem; TT_Byte y_ppem; TT_Byte bit_depth; TT_Char flags; } TT_SBit_Strike; /*************************************************************/ /* */ /* TT_SBit_Component */ /* */ /* */ /* A simple structure to describe a compound sbit element */ /* */ /* */ /* glyph_code :: element's glyph index */ /* x_offset :: element's left bearing */ /* y_offset :: element's top bearing */ /* */ typedef struct TT_SBit_Component_ { TT_UShort glyph_code; TT_Char x_offset; TT_Char y_offset; } TT_SBit_Component; /*************************************************************/ /* */ /* TT_SBit_Scale */ /* */ /* */ /* A structure used describe a given bitmap scaling */ /* table, as defined for the `EBSC' table. */ /* */ /* */ /* hori :: horizontal line metrics */ /* vert :: vertical line metrics */ /* */ /* x_ppem :: horizontal pixels per EM */ /* y_ppem :: vertical pixels per EM */ /* */ /* x_ppem_substitute :: substitution x_ppem */ /* y_ppem_substitute :: substitution y_ppem */ /* */ typedef struct TT_SBit_Scale_ { TT_SBit_Line_Metrics hori; TT_SBit_Line_Metrics vert; TT_Byte x_ppem; TT_Byte y_ppem; TT_Byte x_ppem_substitute; TT_Byte y_ppem_substitute; } TT_SBit_Scale; /*************************************************************/ /* */ /* TT_SBit_Image */ /* */ /* */ /* A structure used to describe a given embedded bitmap */ /* image. */ /* */ /* */ /* map :: bitmap descriptor */ /* bit_depth :: pixel bit depth */ /* metrics :: glyph metrics for the bitmap */ /* */ typedef struct TT_SBit_Image_ { TT_Raster_Map map; int bit_depth; TT_Big_Glyph_Metrics metrics; } TT_SBit_Image; /*************************************************************/ /* */ /* TT_EBLC */ /* */ /* */ /* A structure used to describe the `EBLC' table from */ /* a TrueType font. */ /* */ /* */ /* version :: version number of the EBLC table */ /* */ /* num_strikes :: the number of strikes, i.e. bitmap */ /* sizes, present in this font */ /* */ /* strikes :: array of strikes */ /* */ typedef struct TT_EBLC_ { TT_ULong version; TT_ULong num_strikes; TT_SBit_Strike* strikes; } TT_EBLC; /*************************************************************/ /* */ /* */ /* TT_Init_SBit_Extension */ /* */ /* */ /* Initializes the embedded bitmap extension for the */ /* FreeType engine. */ /* */ /* */ /* engine :: handle to current FreeType library instance */ /* */ /* */ /* Error code. 0 means success. */ /* */ EXPORT_DEF TT_Error TT_Init_SBit_Extension( TT_Engine engine ); /*************************************************************/ /* */ /* */ /* TT_Get_Face_Bitmaps */ /* */ /* */ /* Loads the `EBLC' table from a font file, if any. */ /* */ /* */ /* face :: handle to the source TrueType font/face */ /* */ /* */ /* eblc_table :: a descriptor for the EBLC table */ /* */ /* */ /* Error code. 0 means success. */ /* */ /* */ /* This function returns TT_Err_Table_Missing if the */ /* font contains no embedded bitmaps. All fields in */ /* `eblc_table' will then be set to 0. */ /* */ EXPORT_DEF TT_Error TT_Get_Face_Bitmaps( TT_Face face, TT_EBLC* eblc_table ); /*************************************************************/ /* */ /* */ /* TT_New_SBit_Image */ /* */ /* */ /* Allocates a new embedded bitmap container. */ /* */ /* */ /* image :: sbit image */ /* */ /* */ /* Error code. 0 means success. */ /* */ EXPORT_DEF TT_Error TT_New_SBit_Image( TT_SBit_Image** image ); /*************************************************************/ /* */ /* */ /* TT_Done_SBit_Image */ /* */ /* */ /* Releases an embedded bitmap container. */ /* */ /* */ /* image :: sbit image */ /* */ EXPORT_DEF void TT_Done_SBit_Image( TT_SBit_Image* image ); /*************************************************************/ /* */ /* TT_Get_SBit_Strike */ /* */ /* */ /* Loads a suitable strike (bitmap sizetable) for the */ /* given instance. This strike includes */ /* sbitLineMetrics. */ /* */ /* */ /* face :: the source face */ /* instance :: the current size instance */ /* */ /* */ /* strike :: the bitmap strike descriptor */ /* */ /* */ /* Error code. 0 means success. */ /* */ EXPORT_DEF TT_Error TT_Get_SBit_Strike( TT_Face face, TT_Instance instance, TT_SBit_Strike* strike ); /*************************************************************/ /* */ /* */ /* TT_Load_Glyph_Bitmap */ /* */ /* */ /* Loads a given glyph embedded bitmap. */ /* */ /* */ /* face :: handle to the source TrueType font/face */ /* instance :: current size/transform instance */ /* glyph_index :: index of source glyph */ /* bitmap :: target embedded bitmap descriptor */ /* */ /* */ /* Error code. 0 means success. */ /* */ /* */ /* This function returns an error if there is no */ /* embedded bitmap for the glyph at the given */ /* instance. */ /* */ EXPORT_DEF TT_Error TT_Load_Glyph_Bitmap( TT_Face face, TT_Instance instance, TT_UShort glyph_index, TT_SBit_Image* bitmap ); #ifdef __cplusplus } #endif #endif /* FTXSBIT_H */ /* END */