From 2ce9203735802a8831f36731310e02fe0f863d98 Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 23 Mar 2006 20:58:20 +0000 Subject: [PATCH] - added FT_Get_SubGlyph_Info API to freetype.h - small fix to lsb/rsb delta computations - cleaning up Jamfile --- ChangeLog | 9 +++++ Jamfile | 3 +- devel/ftoption.h | 2 +- include/freetype/freetype.h | 58 ++++++++++++++++++++++++++++ include/freetype/internal/ftgloadr.h | 3 +- src/autofit/afloader.c | 6 +++ src/base/ftobjs.c | 29 ++++++++++++++ 7 files changed, 106 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 43b3856f2..7d616e002 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-03-23 David Turner + + * include/freetype/freetype.h, include/freetype/internal/ftgloadr.h, + src/base/ftobjs.c: adding FT_Get_SubGlyph_Info API to retrieve subglyph + data. Note that we do not expose FT_SubGlyphRec here ! + + * src/autofit/afloader.c: compute lsb_delta and rsb_delta correctly + in edge cases + 2006-03-22 Werner Lemberg * src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup) diff --git a/Jamfile b/Jamfile index 48cfd19b3..e99d4cf42 100644 --- a/Jamfile +++ b/Jamfile @@ -76,10 +76,8 @@ FT2_COMPONENTS ?= autofit # auto-fitter cache # cache sub-system cff # CFF/CEF font driver cid # PostScript CID-keyed font driver - #gxvalid # validation of TrueTypeGX/AAT tables gzip # support for gzip-compressed files lzw # support for LZW-compressed files - #otvalid # validation of OpenType tables pcf # PCF font driver pfr # PFR/TrueDoc font driver psaux # common PostScript routines module @@ -127,6 +125,7 @@ if $(DEBUG_HINTER) # HDRS += $(FT2_INCLUDE) ; + # We need to #define FT2_BUILD_LIBRARY so that our sources find the # internal headers # diff --git a/devel/ftoption.h b/devel/ftoption.h index da3559a5c..d3260892b 100644 --- a/devel/ftoption.h +++ b/devel/ftoption.h @@ -436,7 +436,7 @@ FT_BEGIN_HEADER /* Do not #undef this macro here, since the build system might */ /* define it for certain configurations only. */ /* */ -#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER +#define xxTT_CONFIG_OPTION_BYTECODE_INTERPRETER /*************************************************************************/ diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index 3bde8a803..488bc54f8 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -3222,6 +3222,64 @@ FT_BEGIN_HEADER FT_Vector_Transform( FT_Vector* vec, const FT_Matrix* matrix ); + /** + * @macro: FT_SUBGLYPH_FLAG_XXX + * + * @description: + * a list of constant used to describe each subglyph + * + * @values: + * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: + * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES :: + * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID :: + * FT_SUBGLYPH_FLAG_SCALE :: + * FT_SUBGLYPH_FLAG_XY_SCALE :: + * FT_SUBGLYPH_FLAG_2X2 :: + * FT_SUBGLYPH_FLAG_USE_MY_METRICS :: + */ +#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 +#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 +#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 +#define FT_SUBGLYPH_FLAG_SCALE 8 +#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 +#define FT_SUBGLYPH_FLAG_2X2 0x80 +#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 + + /** + * @func: FT_Get_SubGlyph_Info + * + * @description: + * a function used to retrieve a description of a given subglyph. + * only use it when 'glyph->format' is FT_GLYPH_FORMAT_COMPOSITE, or + * an error will be returned + * + * @input: + * glyph :: source glyph slot + * sub_index :: index of subglyph. must be less than 'glyph->num_subglyphs' + * + * @output: + * p_index :: subglyph glyph index + * p_flags :: subglyph flags, see @FT_SUBGLYPH_FLAG_XXX + * p_arg1 :: subglyph first argument (if any) + * p_arg2 :: subglyph second argument (if any) + * p_transform :: subglyph transform (if any) + * + * @return: + * error code. 0 means success + * + * @note: + * the values of *p_arg1, *p_arg2 and *p_transform must be interpreted + * depending on the flags returns in *p_flags. See the TrueType specification + * for details + */ + FT_EXPORT( FT_Error ) + FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, + FT_UInt sub_index, + FT_Int *p_index, + FT_UInt *p_flags, + FT_Int *p_arg1, + FT_Int *p_arg2, + FT_Matrix *p_transform ); /* */ diff --git a/include/freetype/internal/ftgloadr.h b/include/freetype/internal/ftgloadr.h index 2aaff0d83..1b83c685b 100644 --- a/include/freetype/internal/ftgloadr.h +++ b/include/freetype/internal/ftgloadr.h @@ -43,6 +43,7 @@ FT_BEGIN_HEADER typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ; +#if 0 /* now in freetype.h since 2.2 */ #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 @@ -50,7 +51,7 @@ FT_BEGIN_HEADER #define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 #define FT_SUBGLYPH_FLAG_2X2 0x80 #define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 - +#endif typedef struct FT_SubGlyphRec_ { diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c index 98a4a3937..7f110abf0 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -224,8 +224,14 @@ else #endif /* !AF_USE_WARPER */ { + FT_Pos pp1x = loader->pp1.x; + FT_Pos pp2x = loader->pp2.x; + loader->pp1.x = FT_PIX_ROUND( loader->pp1.x ); loader->pp2.x = FT_PIX_ROUND( loader->pp2.x ); + + slot->lsb_delta = loader->pp1.x - pp1x; + slot->rsb_delta = loader->pp2.x - pp2x; } } diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 821571a26..5ebfdf53d 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -3861,4 +3861,33 @@ #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, + FT_UInt sub_index, + FT_Int *p_index, + FT_UInt *p_flags, + FT_Int *p_arg1, + FT_Int *p_arg2, + FT_Matrix *p_transform ) + { + FT_Error error = FT_Err_Invalid_Argument; + + if ( glyph != NULL && + glyph->format == FT_GLYPH_FORMAT_COMPOSITE && + sub_index < glyph->num_subglyphs ) + { + FT_SubGlyph subg = glyph->subglyphs + sub_index; + + *p_index = subg->index; + *p_flags = subg->flags; + *p_arg1 = subg->arg1; + *p_arg2 = subg->arg2; + *p_transform = subg->transform; + } + return error; + } + + + /* END */