- added FT_Get_SubGlyph_Info API to freetype.h

- small fix to lsb/rsb delta computations
- cleaning up Jamfile
This commit is contained in:
David Turner 2006-03-23 20:58:20 +00:00
parent d8776b3439
commit 2ce9203735
7 changed files with 106 additions and 4 deletions

View File

@ -1,3 +1,12 @@
2006-03-23 David Turner <david@freetype.org>
* 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 <wl@gnu.org>
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)

View File

@ -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
#

View File

@ -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
/*************************************************************************/

View File

@ -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 );
/* */

View File

@ -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_
{

View File

@ -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;
}
}

View File

@ -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 */