X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e1af41e4b811fa4e927b61234c6fd90e254ec09..cabec8729e0b28f790d4a7f068a25697b9aa9dab:/src/freetype/type1/t1gload.h diff --git a/src/freetype/type1/t1gload.h b/src/freetype/type1/t1gload.h new file mode 100644 index 0000000000..658a929d06 --- /dev/null +++ b/src/freetype/type1/t1gload.h @@ -0,0 +1,326 @@ +/***************************************************************************/ +/* */ +/* t1gload.h */ +/* */ +/* Type 1 Glyph Loader (specification). */ +/* */ +/* Copyright 1996-2000 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. */ +/* */ +/***************************************************************************/ + + +#ifndef T1GLOAD_H +#define T1GLOAD_H + + +#ifdef FT_FLAT_COMPILE + +#include "t1objs.h" + +#else + +#include + +#endif + + +#ifdef __cplusplus + extern "C" { +#endif + + + typedef struct T1_Builder_ T1_Builder; + + typedef FT_Error (*T1_Builder_EndChar)( T1_Builder* loader ); + + typedef FT_Error (*T1_Builder_Sbw)( T1_Builder* loader, + FT_Pos sbx, + FT_Pos sby, + FT_Pos wx, + FT_Pos wy ); + + typedef FT_Error (*T1_Builder_ClosePath)( T1_Builder* loader ); + + typedef FT_Error (*T1_Builder_RLineTo)( T1_Builder* loader, + FT_Pos dx, + FT_Pos dy ); + + typedef FT_Error (*T1_Builder_RMoveTo)( T1_Builder* loader, + FT_Pos dx, + FT_Pos dy ); + + typedef FT_Error (*T1_Builder_RCurveTo)( T1_Builder* loader, + FT_Pos dx1, + FT_Pos dy1, + FT_Pos dx2, + FT_Pos dy2, + FT_Pos dx3, + FT_Pos dy3 ); + + + /*************************************************************************/ + /* */ + /* */ + /* T1_Builder_Funcs */ + /* */ + /* */ + /* A structure to store the address of various functions used by a */ + /* glyph builder to implement the outline's `path construction'. */ + /* */ + typedef struct T1_Builder_Funcs_ + { + T1_Builder_EndChar end_char; + T1_Builder_Sbw set_bearing_point; + T1_Builder_ClosePath close_path; + T1_Builder_RLineTo rline_to; + T1_Builder_RMoveTo rmove_to; + T1_Builder_RCurveTo rcurve_to; + + } T1_Builder_Funcs; + + + /*************************************************************************/ + /* */ + /* */ + /* T1_Builder */ + /* */ + /* */ + /* A structure used during glyph loading to store its outline. */ + /* */ + /* */ + /* memory :: The current memory object. */ + /* */ + /* face :: The current face object. */ + /* */ + /* size :: The current size object. */ + /* */ + /* glyph :: The current glyph slot. */ + /* */ + /* loader :: The current glyph loader. */ + /* */ + /* current :: The current glyph outline. */ + /* */ + /* base :: The base glyph outline. */ + /* */ + /* last :: The last point position. */ + /* */ + /* scale_x :: The horizontal scale (FUnits to sub-pixels). */ + /* */ + /* scale_y :: The vertical scale (FUnits to sub-pixels). */ + /* */ + /* pos_x :: The horizontal translation (for composite glyphs). */ + /* */ + /* pos_y :: The vertical translation (for composite glyphs). */ + /* */ + /* left_bearing :: The left side bearing point. */ + /* */ + /* advance :: The horizontal advance vector. */ + /* */ + /* no_recurse :: */ + /* */ + /* bbox :: The glyph's bounding box. */ + /* */ + /* path_begun :: A flag which indicates that a new path has begun. */ + /* */ + /* load_points :: A flag which indicates, if not set, that no points */ + /* are loaded. */ + /* */ + /* pass :: The pass number for multi-pass hinters. */ + /* */ + /* hint_point :: The index of the next point to hint. */ + /* */ + /* funcs :: A table of builder functions used to perform the */ + /* outline's path construction. */ + /* */ + struct T1_Builder_ + { + FT_Memory memory; + T1_Face face; + T1_Size size; + T1_GlyphSlot glyph; + FT_GlyphLoader* loader; + + FT_Outline* current; /* the current glyph outline */ + FT_Outline* base; /* the composite glyph outline */ + + FT_Vector last; + + FT_Fixed scale_x; + FT_Fixed scale_y; + + FT_Pos pos_x; + FT_Pos pos_y; + + FT_Vector left_bearing; + FT_Vector advance; + FT_Bool no_recurse; + + FT_BBox bbox; /* bounding box */ + FT_Bool path_begun; + FT_Bool load_points; + + FT_Int pass; + FT_Int hint_point; + + /* path construction function interface */ + T1_Builder_Funcs funcs; + }; + + + typedef FT_Error (*T1_Hinter_ChangeHints)( T1_Builder* builder ); + + typedef FT_Error (*T1_Hinter_DotSection)( T1_Builder* builder ); + + typedef FT_Error (*T1_Hinter_Stem)( T1_Builder* builder, + FT_Pos pos, + FT_Pos width, + FT_Bool vertical ); + + typedef FT_Error (*T1_Hinter_Stem3)( T1_Builder* builder, + FT_Pos pos0, + FT_Pos width0, + FT_Pos pos1, + FT_Pos width1, + FT_Pos pos2, + FT_Pos width2, + FT_Bool vertical ); + + + /*************************************************************************/ + /* */ + /* */ + /* T1_Hinter_Funcs */ + /* */ + /* */ + /* A structure to store the address of various functions used by a */ + /* Type 1 hinter to perform outline hinting. */ + /* */ + typedef struct T1_Hinter_Func_ + { + T1_Hinter_ChangeHints change_hints; + T1_Hinter_DotSection dot_section; + T1_Hinter_Stem stem; + T1_Hinter_Stem3 stem3; + + } T1_Hinter_Funcs; + + + typedef enum T1_Operator_ + { + op_none = 0, + op_endchar, + op_hsbw, + op_seac, + op_sbw, + op_closepath, + op_hlineto, + op_hmoveto, + op_hvcurveto, + op_rlineto, + op_rmoveto, + op_rrcurveto, + op_vhcurveto, + op_vlineto, + op_vmoveto, + op_dotsection, + op_hstem, + op_hstem3, + op_vstem, + op_vstem3, + op_div, + op_callothersubr, + op_callsubr, + op_pop, + op_return, + op_setcurrentpoint, + + op_max /* never remove this one */ + + } T1_Operator; + + + /* execution context charstring zone */ + typedef struct T1_Decoder_Zone_ + { + FT_Byte* base; + FT_Byte* limit; + FT_Byte* cursor; + + } T1_Decoder_Zone; + + + typedef struct T1_Decoder_ + { + T1_Builder builder; + T1_Hinter_Funcs hinter; + + FT_Int stack[T1_MAX_CHARSTRINGS_OPERANDS]; + FT_Int* top; + + T1_Decoder_Zone zones[T1_MAX_SUBRS_CALLS + 1]; + T1_Decoder_Zone* zone; + + FT_Int flex_state; + FT_Int num_flex_vectors; + FT_Vector flex_vectors[7]; + + } T1_Decoder; + + + LOCAL_DEF + void T1_Init_Builder( T1_Builder* builder, + T1_Face face, + T1_Size size, + T1_GlyphSlot glyph, + const T1_Builder_Funcs* funcs ); + + LOCAL_DEF + void T1_Done_Builder( T1_Builder* builder ); + + LOCAL_DEF + void T1_Init_Decoder( T1_Decoder* decoder, + const T1_Hinter_Funcs* funcs ); + + LOCAL_DEF + FT_Error T1_Compute_Max_Advance( T1_Face face, + FT_Int* max_advance ); + + LOCAL_DEF + FT_Error T1_Parse_CharStrings( T1_Decoder* decoder, + FT_Byte* charstring_base, + FT_Int charstring_len, + FT_Int num_subrs, + FT_Byte** subrs_base, + FT_Int* subrs_len ); + + LOCAL_DEF + FT_Error T1_Add_Points( T1_Builder* builder, + FT_Int num_points ); + + LOCAL_DEF + FT_Error T1_Add_Contours( T1_Builder* builder, + FT_Int num_contours ); + + LOCAL_DEF + FT_Error T1_Load_Glyph( T1_GlyphSlot glyph, + T1_Size size, + FT_Int glyph_index, + FT_Int load_flags ); + + +#ifdef __cplusplus + } +#endif + + +#endif /* T1GLOAD_H */ + + +/* END */