ref: 2ce9203735802a8831f36731310e02fe0f863d98
parent: d8776b3439160dad0d02b19dbcd0cccc28045cc5
author: David Turner <[email protected]>
date: Thu Mar 23 15:58:20 EST 2006
- added FT_Get_SubGlyph_Info API to freetype.h - small fix to lsb/rsb delta computations - cleaning up Jamfile
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-03-23 David Turner <[email protected]>
+
+ * 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 <[email protected]>
* src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
--- a/Jamfile
+++ b/Jamfile
@@ -76,10 +76,8 @@
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
@@ -126,6 +124,7 @@
# compile any part of FreeType 2.
#
HDRS += $(FT2_INCLUDE) ;
+
# We need to #define FT2_BUILD_LIBRARY so that our sources find the
# internal headers
--- a/devel/ftoption.h
+++ b/devel/ftoption.h
@@ -436,7 +436,7 @@
/* 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
/*************************************************************************/
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -3222,6 +3222,64 @@
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 );
/* */
--- a/include/freetype/internal/ftgloadr.h
+++ b/include/freetype/internal/ftgloadr.h
@@ -43,6 +43,7 @@
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 @@
#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_
{
--- 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;
}
}
--- 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 */