491 lines
23 KiB
C
491 lines
23 KiB
C
/*******************************************************************
|
|
*
|
|
* 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
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Metrics */
|
|
/* */
|
|
/* <Description> */
|
|
/* 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. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Small_Metrics */
|
|
/* */
|
|
/* <Description> */
|
|
/* 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. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Line_Metrics */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used to describe the text line metrics of */
|
|
/* a given bitmap strike, for either horizontal or */
|
|
/* vertical layout. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Range */
|
|
/* */
|
|
/* <Description> */
|
|
/* A TrueType/OpenType subIndexTable as defined in the */
|
|
/* `EBLC' or `bloc' tables. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Strike */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used describe a given bitmap strike in the */
|
|
/* `EBLC' or `bloc' tables. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Component */
|
|
/* */
|
|
/* <Description> */
|
|
/* A simple structure to describe a compound sbit element */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Scale */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used describe a given bitmap scaling */
|
|
/* table, as defined for the `EBSC' table. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_SBit_Image */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used to describe a given embedded bitmap */
|
|
/* image. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Struct> TT_EBLC */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used to describe the `EBLC' table from */
|
|
/* a TrueType font. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* 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;
|
|
|
|
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> */
|
|
/* TT_Init_SBit_Extension */
|
|
/* */
|
|
/* <Description> */
|
|
/* Initializes the embedded bitmap extension for the */
|
|
/* FreeType engine. */
|
|
/* */
|
|
/* <Input> */
|
|
/* engine :: handle to current FreeType library instance */
|
|
/* */
|
|
/* <Return> */
|
|
/* Error code. 0 means success. */
|
|
/* */
|
|
EXPORT_DEF
|
|
TT_Error TT_Init_SBit_Extension( TT_Engine engine );
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> */
|
|
/* TT_Get_Face_Bitmaps */
|
|
/* */
|
|
/* <Description> */
|
|
/* Loads the `EBLC' table from a font file, if any. */
|
|
/* */
|
|
/* <Input> */
|
|
/* face :: handle to the source TrueType font/face */
|
|
/* */
|
|
/* <Output> */
|
|
/* eblc_table :: a descriptor for the EBLC table */
|
|
/* */
|
|
/* <Return> */
|
|
/* Error code. 0 means success. */
|
|
/* */
|
|
/* <Note> */
|
|
/* 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 );
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> */
|
|
/* TT_New_SBit_Image */
|
|
/* */
|
|
/* <Description> */
|
|
/* Allocates a new embedded bitmap container. */
|
|
/* */
|
|
/* <Output> */
|
|
/* image :: sbit image */
|
|
/* */
|
|
/* <Return> */
|
|
/* Error code. 0 means success. */
|
|
/* */
|
|
EXPORT_DEF
|
|
TT_Error TT_New_SBit_Image( TT_SBit_Image** image );
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> */
|
|
/* TT_Done_SBit_Image */
|
|
/* */
|
|
/* <Description> */
|
|
/* Releases an embedded bitmap container. */
|
|
/* */
|
|
/* <Input> */
|
|
/* image :: sbit image */
|
|
/* */
|
|
EXPORT_DEF
|
|
void TT_Done_SBit_Image( TT_SBit_Image* image );
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> TT_Get_SBit_Strike */
|
|
/* */
|
|
/* <Description> */
|
|
/* Loads a suitable strike (bitmap sizetable) for the */
|
|
/* given instance. This strike includes */
|
|
/* sbitLineMetrics. */
|
|
/* */
|
|
/* <Input> */
|
|
/* face :: the source face */
|
|
/* instance :: the current size instance */
|
|
/* */
|
|
/* <Output> */
|
|
/* strike :: the bitmap strike descriptor */
|
|
/* */
|
|
/* <Return> */
|
|
/* Error code. 0 means success. */
|
|
/* */
|
|
EXPORT_DEF
|
|
TT_Error TT_Get_SBit_Strike( TT_Face face,
|
|
TT_Instance instance,
|
|
TT_SBit_Strike* strike );
|
|
|
|
|
|
/*************************************************************/
|
|
/* */
|
|
/* <Function> */
|
|
/* TT_Load_Glyph_Bitmap */
|
|
/* */
|
|
/* <Description> */
|
|
/* Loads a given glyph embedded bitmap. */
|
|
/* */
|
|
/* <Input> */
|
|
/* face :: handle to the source TrueType font/face */
|
|
/* instance :: current size/transform instance */
|
|
/* glyph_index :: index of source glyph */
|
|
/* bitmap :: target embedded bitmap descriptor */
|
|
/* */
|
|
/* <Return> */
|
|
/* Error code. 0 means success. */
|
|
/* */
|
|
/* <Note> */
|
|
/* 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 */
|