* src/pcf/pcfdrivr.c: Revert change from 2004-04-17.
* src/pcf/pcfutil.c: Use FT_LOCAL_DEF. * src/pcf/pcfutil.h: Include FT_CONFIG_CONFIG_H. Use FT_BEGIN_HEADER and FT_END_HEADER. Use FT_LOCAL. 2004-04-24 George Williams <gww@silcom.com> Add support for Apple's distortable font technology (in GX fonts). * devel/ftoption.h, include/freetype/config/ftoption.h (TT_CONFIG_OPTION_GX_VAR_SUPPORT): New macro. * include/freetype/ftmm.h (FT_Var_Axis, FT_Var_Named_Style, FT_MM_Var): New structures. (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates, FT_Set_Var_Blend_Coordinates): New function declarations. * include/freetype/internal/services/svmm.h (FT_Get_MM_Var_Func, FT_Set_Var_Design_Func): New typedefs. Update MultiMasters service. * include/freetype/internal/tttypes.h [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include FT_MULTIPLE_MASTERS_H. (GX_Blend) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New typedef. (TT_Face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New members `doblend' and `blend'. * include/freetype/tttags.h (TTAG_avar, TTAG_cvar, TTAG_gvar): New macros. * include/freetype/internal/fttrace.h: Add `ttgxvar'. * src/base/ftmm.c (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates, FT_Set_Var_Blend_Coordinates): New functions. * src/sfnt/sfobjs.c (sfnt_load_face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Set FT_FACE_FLAG_MULTIPLE_MASTERS flag for GX var fonts. * src/truetype/ttgxvar.c, src/truetype/ttgxvar.h: New files. * src/truetype/truetype.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include ttgxvar.c. * src/truetype/ttdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include FT_MULTIPLE_MASTERS_H, FT_SERVICE_MULTIPLE_MASTERS_H, and ttgxvar.h. (tt_service_gx_multi_masters) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New service. (tt_services) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated. * src/truetype/ttgload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include ttgxvar.h. (TT_Process_Simple_Glyph, load_truetype_glyph) [TT_CONFIG_OPTION_GX_VAR_SUPPORT] :Support GX var fonts. * src/truetype/ttobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include ttgxvar.h. (tt_done_face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call tt_done_blend. * src/truetype/ttpload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include ttgxvar.h. (tt_face_load_cvt) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call tt_face_vary_cvt. * src/truetype/rules.mk (TT_DRV_SRC): Add ttgxvar.c. * src/type1/t1driver.c (t1_service_multi_masters): Add T1_Get_MM_Var and T1_Set_Var_Design. * src/type1/t1load.c (FT_INT_TO_FIXED, FT_FIXED_TO_INT): New macros. (T1_Get_MM_Var, T1_Set_Var_Design): New functions. * src/type1/t1load.h (T1_Get_MM_Var, T1_Set_Var_Design): New function declarations.
This commit is contained in:
parent
e95365b291
commit
44bb303510
81
ChangeLog
81
ChangeLog
@ -1,3 +1,82 @@
|
||||
2004-04-24 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* src/pcf/pcfdrivr.c: Revert change from 2004-04-17.
|
||||
* src/pcf/pcfutil.c: Use FT_LOCAL_DEF.
|
||||
* src/pcf/pcfutil.h: Include FT_CONFIG_CONFIG_H.
|
||||
Use FT_BEGIN_HEADER and FT_END_HEADER.
|
||||
Use FT_LOCAL.
|
||||
|
||||
2004-04-24 George Williams <gww@silcom.com>
|
||||
|
||||
Add support for Apple's distortable font technology (in GX fonts).
|
||||
|
||||
* devel/ftoption.h, include/freetype/config/ftoption.h
|
||||
(TT_CONFIG_OPTION_GX_VAR_SUPPORT): New macro.
|
||||
|
||||
* include/freetype/ftmm.h (FT_Var_Axis, FT_Var_Named_Style,
|
||||
FT_MM_Var): New structures.
|
||||
(FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
|
||||
FT_Set_Var_Blend_Coordinates): New function declarations.
|
||||
|
||||
* include/freetype/internal/services/svmm.h (FT_Get_MM_Var_Func,
|
||||
FT_Set_Var_Design_Func): New typedefs.
|
||||
Update MultiMasters service.
|
||||
|
||||
* include/freetype/internal/tttypes.h
|
||||
[TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include FT_MULTIPLE_MASTERS_H.
|
||||
(GX_Blend) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New typedef.
|
||||
(TT_Face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New members `doblend'
|
||||
and `blend'.
|
||||
|
||||
* include/freetype/tttags.h (TTAG_avar, TTAG_cvar, TTAG_gvar): New
|
||||
macros.
|
||||
|
||||
* include/freetype/internal/fttrace.h: Add `ttgxvar'.
|
||||
|
||||
* src/base/ftmm.c (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
|
||||
FT_Set_Var_Blend_Coordinates): New functions.
|
||||
|
||||
* src/sfnt/sfobjs.c (sfnt_load_face)
|
||||
[TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Set FT_FACE_FLAG_MULTIPLE_MASTERS
|
||||
flag for GX var fonts.
|
||||
|
||||
* src/truetype/ttgxvar.c, src/truetype/ttgxvar.h: New files.
|
||||
|
||||
* src/truetype/truetype.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
|
||||
ttgxvar.c.
|
||||
|
||||
* src/truetype/ttdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
|
||||
FT_MULTIPLE_MASTERS_H, FT_SERVICE_MULTIPLE_MASTERS_H, and ttgxvar.h.
|
||||
(tt_service_gx_multi_masters) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:
|
||||
New service.
|
||||
(tt_services) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
|
||||
|
||||
* src/truetype/ttgload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
|
||||
ttgxvar.h.
|
||||
(TT_Process_Simple_Glyph, load_truetype_glyph)
|
||||
[TT_CONFIG_OPTION_GX_VAR_SUPPORT] :Support GX var fonts.
|
||||
|
||||
* src/truetype/ttobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
|
||||
ttgxvar.h.
|
||||
(tt_done_face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
|
||||
tt_done_blend.
|
||||
|
||||
* src/truetype/ttpload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
|
||||
ttgxvar.h.
|
||||
(tt_face_load_cvt) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
|
||||
tt_face_vary_cvt.
|
||||
|
||||
* src/truetype/rules.mk (TT_DRV_SRC): Add ttgxvar.c.
|
||||
|
||||
* src/type1/t1driver.c (t1_service_multi_masters): Add T1_Get_MM_Var
|
||||
and T1_Set_Var_Design.
|
||||
|
||||
* src/type1/t1load.c (FT_INT_TO_FIXED, FT_FIXED_TO_INT): New macros.
|
||||
(T1_Get_MM_Var, T1_Set_Var_Design): New functions.
|
||||
|
||||
* src/type1/t1load.h (T1_Get_MM_Var, T1_Set_Var_Design): New
|
||||
function declarations.
|
||||
|
||||
2004-04-23 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* include/freetype/ftcache.h (FT_Get_CharMap_Index): Rename
|
||||
@ -69,7 +148,7 @@
|
||||
* src/bdf/bdfdrivr.c (BDF_Face_Init): Use `ft_strlen'.
|
||||
|
||||
* src/pcf/pcfutil.c, src/pcf/pcfutil.h: Decorate functions with
|
||||
`static.'.
|
||||
`static'.
|
||||
Remove unused function `RepadBitmap'.
|
||||
* src/pcf/pcfdrivr.c: Don't include pcfutil.h.
|
||||
|
||||
|
@ -483,6 +483,16 @@ FT_BEGIN_HEADER
|
||||
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
|
||||
/* support for Apple's distortable font technology (fvar, gvar, cvar, */
|
||||
/* and avar tables). This has many similarities to Type 1 Multiple */
|
||||
/* Masters support. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
|
@ -483,6 +483,16 @@ FT_BEGIN_HEADER
|
||||
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
|
||||
/* support for Apple's distortable font technology (fvar, gvar, cvar, */
|
||||
/* and avar tables). This has many similarities to Type 1 Multiple */
|
||||
/* Masters support. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType Multiple Master font interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* Copyright 1996-2001, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -43,6 +43,12 @@ FT_BEGIN_HEADER
|
||||
/* Master fonts, i.e. the selection of specific design instances by */
|
||||
/* setting design axis coordinates. */
|
||||
/* */
|
||||
/* George Williams has extended this interface to make it work with */
|
||||
/* both Type 1 Multiple Masters fonts, and GX distortable (var) */
|
||||
/* fonts. Some of these routines only work with MM fonts, others */
|
||||
/* will work with both types. They are similar enough that a */
|
||||
/* consistent interface makes sense. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
@ -55,6 +61,8 @@ FT_BEGIN_HEADER
|
||||
/* A simple structure used to model a given axis in design space for */
|
||||
/* Multiple Masters fonts. */
|
||||
/* */
|
||||
/* This structure can't be used for GX var fonts. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* name :: The axis's name. */
|
||||
/* */
|
||||
@ -80,6 +88,8 @@ FT_BEGIN_HEADER
|
||||
/* A structure used to model the axes and space of a Multiple Masters */
|
||||
/* font. */
|
||||
/* */
|
||||
/* This structure can't be used for GX var fonts. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* num_axis :: Number of axes. Cannot exceed 4. */
|
||||
/* */
|
||||
@ -98,8 +108,118 @@ FT_BEGIN_HEADER
|
||||
|
||||
} FT_Multi_Master;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_Var_Axis */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A simple structure used to model a given axis in design space for */
|
||||
/* Multiple Masters and GX var fonts. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* name :: The axis's name. */
|
||||
/* Not always meaningful for GX. */
|
||||
/* */
|
||||
/* minimum :: The axis's minimum design coordinate. */
|
||||
/* */
|
||||
/* def :: The axis's default design coordinate. */
|
||||
/* Not meaningful for MM. */
|
||||
/* */
|
||||
/* maximum :: The axis's maximum design coordinate. */
|
||||
/* */
|
||||
/* tag :: The axis's tag (the GX equivalent to `name'). */
|
||||
/* Not meaningful for MM. */
|
||||
/* */
|
||||
/* strid :: The entry in `name' table (another GX version of */
|
||||
/* `name'). */
|
||||
/* Not meaningful for MM. */
|
||||
/* */
|
||||
typedef struct FT_Var_Axis_
|
||||
{
|
||||
FT_String* name;
|
||||
|
||||
FT_Fixed minimum;
|
||||
FT_Fixed def;
|
||||
FT_Fixed maximum;
|
||||
|
||||
FT_ULong tag;
|
||||
FT_UInt strid;
|
||||
|
||||
} FT_Var_Axis;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_Var_Named_Style */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A simple structure used to model a named style in a GX var font. */
|
||||
/* */
|
||||
/* This structure can't be used for MM fonts. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* coords :: The design coordinates for this style. */
|
||||
/* This is an array with one entry for each axis. */
|
||||
/* */
|
||||
/* strid :: The entry in `name' table identifying this style. */
|
||||
/* */
|
||||
typedef struct FT_Var_Named_Style_
|
||||
{
|
||||
FT_Fixed* coords;
|
||||
FT_UInt strid;
|
||||
|
||||
} FT_Var_Named_Style;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_MM_Var */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A structure used to model the axes and space of a Multiple Masters */
|
||||
/* or GX var distortable font. */
|
||||
/* */
|
||||
/* Some fields are specific to one format and not to the other. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* num_axis :: The number of axes. The maximum value is 4 for */
|
||||
/* MM; no limit in GX. */
|
||||
/* */
|
||||
/* num_designs :: The number of designs; should be normally */
|
||||
/* 2^num_axis for MM fonts. Not meaningful for GX */
|
||||
/* (where every glyph could have a different */
|
||||
/* number of designs). */
|
||||
/* */
|
||||
/* num_namedstyles :: The number of named styles; only meaningful for */
|
||||
/* GX which allows certain design coordinates to */
|
||||
/* have a string ID (in the `name' table) */
|
||||
/* associated with them. The font can tell the */
|
||||
/* user that, for example, Weight=1.5 is `Bold'. */
|
||||
/* */
|
||||
/* axis :: A table of axis descriptors. */
|
||||
/* GX fonts contain slightly more data than MM. */
|
||||
/* */
|
||||
/* namedstyles :: A table of named styles. */
|
||||
/* Only meaningful with GX. */
|
||||
/* */
|
||||
typedef struct FT_MM_Var_
|
||||
{
|
||||
FT_UInt num_axis;
|
||||
FT_UInt num_designs;
|
||||
FT_UInt num_namedstyles;
|
||||
FT_Var_Axis* axis;
|
||||
FT_Var_Named_Style* namedstyle;
|
||||
|
||||
} FT_MM_Var;
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
@ -108,6 +228,8 @@ FT_BEGIN_HEADER
|
||||
/* <Description> */
|
||||
/* Retrieves the Multiple Master descriptor of a given font. */
|
||||
/* */
|
||||
/* This function can't be used with GX fonts. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the source face. */
|
||||
/* */
|
||||
@ -122,6 +244,30 @@ FT_BEGIN_HEADER
|
||||
FT_Multi_Master *amaster );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Get_MM_Var */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieves the Multiple Master/GX var descriptor of a given font. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the source face. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* amaster :: The Multiple Masters descriptor. */
|
||||
/* Allocates a data structure, which the user must free */
|
||||
/* (a single call to FT_FREE will do it). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Get_MM_Var( FT_Face face,
|
||||
FT_MM_Var* *amaster );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
@ -131,6 +277,8 @@ FT_BEGIN_HEADER
|
||||
/* For Multiple Masters fonts, choose an interpolated font design */
|
||||
/* through design coordinates. */
|
||||
/* */
|
||||
/* This function can't be used with GX fonts. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* face :: A handle to the source face. */
|
||||
/* */
|
||||
@ -149,14 +297,41 @@ FT_BEGIN_HEADER
|
||||
FT_Long* coords );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Set_Var_Design_Coordinates */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* For Multiple Master or GX Var fonts, choose an interpolated font */
|
||||
/* design through design coordinates. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* face :: A handle to the source face. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* num_coords :: The number of design coordinates (must be equal to */
|
||||
/* the number of axes in the font). */
|
||||
/* */
|
||||
/* coords :: An array of design coordinates. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Set_Var_Design_Coordinates( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Set_MM_Blend_Coordinates */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* For Multiple Masters fonts, choose an interpolated font design */
|
||||
/* through normalized blend coordinates. */
|
||||
/* For Multiple Masters and GX var fonts, choose an interpolated font */
|
||||
/* design through normalized blend coordinates. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* face :: A handle to the source face. */
|
||||
@ -177,6 +352,20 @@ FT_BEGIN_HEADER
|
||||
FT_Fixed* coords );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Set_Var_Blend_Coordinates */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This is another name of @FT_Set_MM_Blend_Coordinates. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Set_Var_Blend_Coordinates( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
|
@ -53,6 +53,7 @@ FT_TRACE_DEF( ttgload ) /* TT glyph loader (ttgload.c) */
|
||||
FT_TRACE_DEF( ttinterp ) /* bytecode interpreter (ttinterp.c) */
|
||||
FT_TRACE_DEF( ttobjs ) /* TT objects manager (ttobjs.c) */
|
||||
FT_TRACE_DEF( ttpload ) /* TT data/program loader (ttpload.c) */
|
||||
FT_TRACE_DEF( ttgxvar ) /* TrueType GX var handler (ttgxvar.c) */
|
||||
|
||||
/* Type 1 driver components */
|
||||
FT_TRACE_DEF( t1driver )
|
||||
|
@ -2,9 +2,9 @@
|
||||
/* */
|
||||
/* svmm.h */
|
||||
/* */
|
||||
/* The FreeType Multiple Masters services (specification). */
|
||||
/* The FreeType Multiple Masters and GX var services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* Copyright 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -39,11 +39,20 @@ FT_BEGIN_HEADER
|
||||
(*FT_Get_MM_Func)( FT_Face face,
|
||||
FT_Multi_Master* master );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Get_MM_Var_Func)( FT_Face face,
|
||||
FT_MM_Var* *master );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Design_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_Var_Design_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Blend_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
@ -52,9 +61,11 @@ FT_BEGIN_HEADER
|
||||
|
||||
FT_DEFINE_SERVICE( MultiMasters )
|
||||
{
|
||||
FT_Get_MM_Func get_mm;
|
||||
FT_Set_MM_Design_Func set_mm_design;
|
||||
FT_Set_MM_Blend_Func set_mm_blend;
|
||||
FT_Get_MM_Func get_mm;
|
||||
FT_Set_MM_Design_Func set_mm_design;
|
||||
FT_Set_MM_Blend_Func set_mm_blend;
|
||||
FT_Get_MM_Var_Func get_mm_var;
|
||||
FT_Set_Var_Design_Func set_var_design;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
@ -5,7 +5,7 @@
|
||||
/* Basic SFNT/TrueType type definitions and interface (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* Copyright 1996-2001, 2002, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -25,6 +25,10 @@
|
||||
#include FT_TRUETYPE_TABLES_H
|
||||
#include FT_INTERNAL_OBJECTS_H
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include FT_MULTIPLE_MASTERS_H
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
@ -818,6 +822,24 @@ FT_BEGIN_HEADER
|
||||
} TT_Post_NamesRec, *TT_Post_Names;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*** ***/
|
||||
/*** ***/
|
||||
/*** GX VARIATION TABLE SUPPORT ***/
|
||||
/*** ***/
|
||||
/*** ***/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
typedef struct GS_BlendRec_ *GX_Blend;
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
@ -1152,8 +1174,18 @@ FT_BEGIN_HEADER
|
||||
/* unpatented_hinting :: If true, use only unpatented methods in */
|
||||
/* the bytecode interpreter. */
|
||||
/* */
|
||||
/* doblend :: A boolean which is set if the font should */
|
||||
/* be blended (this is for GX var). */
|
||||
/* */
|
||||
/* blend :: Contains the data needed to control GX */
|
||||
/* variation tables (rather like Multiple */
|
||||
/* Master data). */
|
||||
/* */
|
||||
/* extra :: Reserved for third-party font drivers. */
|
||||
/* */
|
||||
/* postscript_name :: The PS name of the font. Used by the */
|
||||
/* postscript name service. */
|
||||
/* */
|
||||
typedef struct TT_FaceRec_
|
||||
{
|
||||
FT_FaceRec root;
|
||||
@ -1261,6 +1293,11 @@ FT_BEGIN_HEADER
|
||||
FT_Bool unpatented_hinting;
|
||||
#endif
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
FT_Bool doblend;
|
||||
GX_Blend blend;
|
||||
#endif
|
||||
|
||||
/***********************************************************************/
|
||||
/* */
|
||||
/* Other tables or fields. This is used by derivative formats like */
|
||||
|
@ -5,7 +5,7 @@
|
||||
/* Basic SFNT/TrueType tables definitions and interface */
|
||||
/* (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -516,12 +516,11 @@ FT_BEGIN_HEADER
|
||||
/* maxSizeOfInstructions :: The maximum number of TrueType opcodes */
|
||||
/* used for glyph hinting. */
|
||||
/* */
|
||||
/* maxComponentElements :: An obscure value related to composite */
|
||||
/* glyphs definitions. */
|
||||
/* maxComponentElements :: The maximum number of simple (i.e., non- */
|
||||
/* composite) glyphs in a composite glyph. */
|
||||
/* */
|
||||
/* maxComponentDepth :: An obscure value related to composite */
|
||||
/* glyphs definitions. Probably the maximum */
|
||||
/* number of simple glyphs in a composite. */
|
||||
/* maxComponentDepth :: The maximum nesting depth of composite */
|
||||
/* glyphs. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* This structure is only used during font loading. */
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Tags for TrueType tables (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* Copyright 1996-2001, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -33,13 +33,15 @@
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
|
||||
#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' )
|
||||
#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
|
||||
#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
|
||||
#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
|
||||
#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' )
|
||||
#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' )
|
||||
#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
|
||||
#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' )
|
||||
#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
|
||||
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
|
||||
#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
|
||||
#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' )
|
||||
#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
|
||||
#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' )
|
||||
#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' )
|
||||
#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' )
|
||||
@ -48,6 +50,7 @@ FT_BEGIN_HEADER
|
||||
#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' )
|
||||
#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' )
|
||||
#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
|
||||
#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
|
||||
#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
|
||||
#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
|
||||
#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
|
||||
@ -56,8 +59,8 @@ FT_BEGIN_HEADER
|
||||
#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' )
|
||||
#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' )
|
||||
#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' )
|
||||
#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
|
||||
#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' )
|
||||
#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
|
||||
#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
|
||||
#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' )
|
||||
#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' )
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Multiple Master font support (body). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003 by */
|
||||
/* Copyright 1996-2001, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -82,6 +82,28 @@
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in ftmm.h */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_Get_MM_Var( FT_Face face,
|
||||
FT_MM_Var* *amaster )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Service_MultiMasters service;
|
||||
|
||||
|
||||
error = ft_face_get_mm_service( face, &service );
|
||||
if ( !error )
|
||||
{
|
||||
error = FT_Err_Invalid_Argument;
|
||||
if ( service->get_mm_var )
|
||||
error = service->get_mm_var( face, amaster );
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in ftmm.h */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
@ -105,6 +127,29 @@
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in ftmm.h */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_Set_Var_Design_Coordinates( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Service_MultiMasters service;
|
||||
|
||||
|
||||
error = ft_face_get_mm_service( face, &service );
|
||||
if ( !error )
|
||||
{
|
||||
error = FT_Err_Invalid_Argument;
|
||||
if ( service->set_var_design )
|
||||
error = service->set_var_design( face, num_coords, coords );
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in ftmm.h */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
@ -128,4 +173,30 @@
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in ftmm.h */
|
||||
|
||||
/* This is exactly the same as the previous function. It exists for */
|
||||
/* orthogonality. */
|
||||
|
||||
FT_EXPORT_DEF( FT_Error )
|
||||
FT_Set_Var_Blend_Coordinates( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Service_MultiMasters service;
|
||||
|
||||
|
||||
error = ft_face_get_mm_service( face, &service );
|
||||
if ( !error )
|
||||
{
|
||||
error = FT_Err_Invalid_Argument;
|
||||
if ( service->set_mm_blend )
|
||||
error = service->set_mm_blend( face, num_coords, coords );
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/* END */
|
||||
|
@ -40,6 +40,7 @@ THE SOFTWARE.
|
||||
#include "pcfread.h"
|
||||
|
||||
#include "pcferror.h"
|
||||
#include "pcfutil.h"
|
||||
|
||||
#undef FT_COMPONENT
|
||||
#define FT_COMPONENT trace_pcfread
|
||||
|
@ -74,7 +74,7 @@ in this Software without prior written authorization from The Open Group.
|
||||
* Invert bit order within each BYTE of an array.
|
||||
*/
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
BitOrderInvert( unsigned char* buf,
|
||||
int nbytes )
|
||||
{
|
||||
@ -90,7 +90,7 @@ in this Software without prior written authorization from The Open Group.
|
||||
* Invert byte order within each 16-bits of an array.
|
||||
*/
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
TwoByteSwap( unsigned char* buf,
|
||||
int nbytes )
|
||||
{
|
||||
@ -109,7 +109,7 @@ in this Software without prior written authorization from The Open Group.
|
||||
* Invert byte order within each 32-bits of an array.
|
||||
*/
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
FourByteSwap( unsigned char* buf,
|
||||
int nbytes )
|
||||
{
|
||||
|
@ -30,20 +30,24 @@ THE SOFTWARE.
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CONFIG_CONFIG_H
|
||||
|
||||
|
||||
static void
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
FT_LOCAL( void )
|
||||
BitOrderInvert( unsigned char* buf,
|
||||
int nbytes);
|
||||
int nbytes );
|
||||
|
||||
static void
|
||||
FT_LOCAL( void )
|
||||
TwoByteSwap( unsigned char* buf,
|
||||
int nbytes);
|
||||
int nbytes );
|
||||
|
||||
static void
|
||||
FT_LOCAL( void )
|
||||
FourByteSwap( unsigned char* buf,
|
||||
int nbytes);
|
||||
int nbytes );
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __PCFUTIL_H__ */
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* SFNT object management (base). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -431,11 +431,11 @@
|
||||
/* do we have outlines in there? */
|
||||
#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
||||
has_outline = FT_BOOL( face->root.internal->incremental_interface != 0 ||
|
||||
tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
|
||||
tt_face_lookup_table( face, TTAG_CFF ) != 0 );
|
||||
tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
|
||||
tt_face_lookup_table( face, TTAG_CFF ) != 0 );
|
||||
#else
|
||||
has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
|
||||
tt_face_lookup_table( face, TTAG_CFF ) != 0 );
|
||||
tt_face_lookup_table( face, TTAG_CFF ) != 0 );
|
||||
#endif
|
||||
|
||||
is_apple_sbit = 0;
|
||||
@ -546,6 +546,15 @@
|
||||
if ( face->kern_pairs )
|
||||
flags |= FT_FACE_FLAG_KERNING;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
/* Don't bother to load the tables unless somebody asks for them. */
|
||||
/* No need to do work which will (probably) not be used. */
|
||||
if ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
|
||||
tt_face_lookup_table( face, TTAG_fvar ) != 0 &&
|
||||
tt_face_lookup_table( face, TTAG_gvar ) != 0 )
|
||||
flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
|
||||
#endif
|
||||
|
||||
root->face_flags = flags;
|
||||
|
||||
/*********************************************************************/
|
||||
|
@ -3,7 +3,7 @@
|
||||
#
|
||||
|
||||
|
||||
# Copyright 1996-2000, 2001, 2003 by
|
||||
# Copyright 1996-2000, 2001, 2003, 2004 by
|
||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#
|
||||
# This file is part of the FreeType project, and may only be used, modified,
|
||||
@ -29,6 +29,7 @@ TT_DRV_SRC := $(TT_DIR)/ttobjs.c \
|
||||
$(TT_DIR)/ttpload.c \
|
||||
$(TT_DIR)/ttgload.c \
|
||||
$(TT_DIR)/ttinterp.c \
|
||||
$(TT_DIR)/ttgxvar.c \
|
||||
$(TT_DIR)/ttdriver.c
|
||||
|
||||
# TrueType driver headers
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType TrueType driver component (body only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* Copyright 1996-2001, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -19,14 +19,18 @@
|
||||
#define FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
||||
#include <ft2build.h>
|
||||
#include "ttdriver.c" /* driver interface */
|
||||
#include "ttpload.c" /* tables loader */
|
||||
#include "ttgload.c" /* glyph loader */
|
||||
#include "ttobjs.c" /* object manager */
|
||||
#include "ttdriver.c" /* driver interface */
|
||||
#include "ttpload.c" /* tables loader */
|
||||
#include "ttgload.c" /* glyph loader */
|
||||
#include "ttobjs.c" /* object manager */
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
#include "ttinterp.c"
|
||||
#endif
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include "ttgxvar.c" /* gx distortable font */
|
||||
#endif
|
||||
|
||||
|
||||
/* END */
|
||||
|
@ -23,9 +23,18 @@
|
||||
#include FT_TRUETYPE_IDS_H
|
||||
#include FT_SERVICE_XFREE86_NAME_H
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include FT_MULTIPLE_MASTERS_H
|
||||
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
||||
#endif
|
||||
|
||||
#include "ttdriver.h"
|
||||
#include "ttgload.h"
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include "ttgxvar.h"
|
||||
#endif
|
||||
|
||||
#include "tterrors.h"
|
||||
|
||||
|
||||
@ -345,12 +354,28 @@
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
static const FT_Service_MultiMastersRec tt_service_gx_multi_masters =
|
||||
{
|
||||
(FT_Get_MM_Func) NULL,
|
||||
(FT_Set_MM_Design_Func) NULL,
|
||||
(FT_Set_MM_Blend_Func) TT_Set_MM_Blend,
|
||||
(FT_Get_MM_Var_Func) TT_Get_MM_Var,
|
||||
(FT_Set_Var_Design_Func)TT_Set_Var_Design
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
static const FT_ServiceDescRec tt_services[] =
|
||||
{
|
||||
{ FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE },
|
||||
{ FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE },
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
{ FT_SERVICE_ID_MULTI_MASTERS, &tt_service_gx_multi_masters },
|
||||
#endif
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
static FT_Module_Interface
|
||||
tt_get_interface( TT_Driver driver,
|
||||
const char* tt_interface )
|
||||
|
@ -26,6 +26,10 @@
|
||||
|
||||
#include "ttgload.h"
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include "ttgxvar.h"
|
||||
#endif
|
||||
|
||||
#include "tterrors.h"
|
||||
|
||||
|
||||
@ -352,7 +356,7 @@
|
||||
FT_Short *cont, *cont_limit;
|
||||
|
||||
|
||||
/* reading the contours endpoints & number of points */
|
||||
/* reading the contours' endpoints & number of points */
|
||||
cont = gloader->current.outline.contours;
|
||||
cont_limit = cont + n_contours;
|
||||
|
||||
@ -724,11 +728,38 @@
|
||||
outline->tags[n_points + 3] = 0;
|
||||
}
|
||||
|
||||
/* Note that we return two more points that are not */
|
||||
/* part of the glyph outline. */
|
||||
/* Note that we return four more points that are not */
|
||||
/* part of the glyph outline. */
|
||||
|
||||
n_points += 4;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
if ( ((TT_Face)load->face)->doblend )
|
||||
{
|
||||
/* Deltas apply to the unscaled data. */
|
||||
FT_Vector* deltas;
|
||||
FT_Memory memory = load->face->memory;
|
||||
FT_UInt i;
|
||||
|
||||
|
||||
if ( ( error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(load->face),
|
||||
load->glyph_index,
|
||||
&deltas,
|
||||
n_points ) ) )
|
||||
goto Exit;
|
||||
|
||||
for ( i = 0; i < n_points; ++i )
|
||||
{
|
||||
outline->points[i].x += deltas[i].x;
|
||||
outline->points[i].y += deltas[i].y;
|
||||
}
|
||||
|
||||
FT_FREE( deltas );
|
||||
}
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
|
||||
|
||||
/* set up zone for hinting */
|
||||
tt_prepare_zone( zone, &gloader->current, 0, 0 );
|
||||
|
||||
@ -803,9 +834,11 @@
|
||||
load->pp4 = zone->cur[n_points - 1];
|
||||
}
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
#if defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER ) || \
|
||||
defined( TT_CONFIG_OPTION_GX_VAR_SUPPORT )
|
||||
Exit:
|
||||
#endif
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -844,6 +877,10 @@
|
||||
FT_Bool glyph_data_loaded = 0;
|
||||
#endif
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
FT_Vector *deltas;
|
||||
#endif
|
||||
|
||||
|
||||
if ( recurse_count >= TT_MAX_COMPOSITE_RECURSE )
|
||||
{
|
||||
@ -997,6 +1034,28 @@
|
||||
loader->pp3.y = 0;
|
||||
loader->pp4.y = loader->pp3.y-loader->vadvance;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
if ( ((TT_Face)(loader->face))->doblend )
|
||||
{
|
||||
/* this must be done before scaling */
|
||||
FT_Memory memory = loader->face->memory;
|
||||
|
||||
|
||||
if ( (error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(loader->face),
|
||||
glyph_index,
|
||||
&deltas,
|
||||
4 ) ) )
|
||||
goto Exit;
|
||||
|
||||
loader->pp1.x += deltas[0].x; loader->pp1.y += deltas[0].y;
|
||||
loader->pp2.x += deltas[1].x; loader->pp2.y += deltas[1].y;
|
||||
loader->pp3.x += deltas[2].x; loader->pp3.y += deltas[2].y;
|
||||
loader->pp4.x += deltas[3].x; loader->pp4.y += deltas[3].y;
|
||||
|
||||
FT_FREE( deltas );
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
||||
{
|
||||
loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
|
||||
@ -1044,14 +1103,6 @@
|
||||
loader->pp4.x = 0;
|
||||
loader->pp4.y = loader->pp3.y - loader->vadvance;
|
||||
|
||||
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
||||
{
|
||||
loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
|
||||
loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
|
||||
loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
|
||||
loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
/***********************************************************************/
|
||||
/***********************************************************************/
|
||||
@ -1125,6 +1176,56 @@
|
||||
face->forget_glyph_frame( loader );
|
||||
opened_frame = 0;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
if ( face->doblend )
|
||||
{
|
||||
FT_Int i, limit;
|
||||
FT_SubGlyph subglyph;
|
||||
FT_Memory memory = face->root.memory;
|
||||
|
||||
|
||||
/* this provides additional offsets */
|
||||
/* for each component's translation */
|
||||
|
||||
if ( (error = TT_Vary_Get_Glyph_Deltas(
|
||||
face,
|
||||
glyph_index,
|
||||
&deltas,
|
||||
gloader->current.num_subglyphs + 4 ) ) )
|
||||
goto Exit;
|
||||
|
||||
/* Note: No subglyph reallocation here, our pointers are stable. */
|
||||
subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
|
||||
limit = gloader->current.num_subglyphs;
|
||||
|
||||
for ( i = 0; i < limit; ++i, ++subglyph )
|
||||
{
|
||||
if ( subglyph->flags & ARGS_ARE_XY_VALUES )
|
||||
{
|
||||
subglyph->arg1 += deltas[i].x;
|
||||
subglyph->arg2 += deltas[i].y;
|
||||
}
|
||||
}
|
||||
|
||||
loader->pp1.x += deltas[i + 0].x; loader->pp1.y += deltas[i + 0].y;
|
||||
loader->pp2.x += deltas[i + 1].x; loader->pp2.y += deltas[i + 1].y;
|
||||
loader->pp3.x += deltas[i + 2].x; loader->pp3.y += deltas[i + 2].y;
|
||||
loader->pp4.x += deltas[i + 3].x; loader->pp4.y += deltas[i + 3].y;
|
||||
|
||||
FT_FREE( deltas );
|
||||
}
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
|
||||
|
||||
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
||||
{
|
||||
loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
|
||||
loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
|
||||
loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
|
||||
loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
|
||||
}
|
||||
|
||||
/* if the flag FT_LOAD_NO_RECURSE is set, we return the subglyph */
|
||||
/* `as is' in the glyph slot (the client application will be */
|
||||
/* responsible for interpreting these data)... */
|
||||
|
1513
src/truetype/ttgxvar.c
Normal file
1513
src/truetype/ttgxvar.c
Normal file
File diff suppressed because it is too large
Load Diff
182
src/truetype/ttgxvar.h
Normal file
182
src/truetype/ttgxvar.h
Normal file
@ -0,0 +1,182 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ttgxvar.h */
|
||||
/* */
|
||||
/* TrueType GX Font Variation loader (specification) */
|
||||
/* */
|
||||
/* Copyright 2004 by */
|
||||
/* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */
|
||||
/* */
|
||||
/* 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 __TTGXVAR_H__
|
||||
#define __TTGXVAR_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include "ttobjs.h"
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* GX_AVarCorrespondenceRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A data structure representing `shortFracCorrespondence' in `avar' */
|
||||
/* table according to the specifications from Apple. */
|
||||
/* */
|
||||
typedef struct GX_AVarCorrespondenceRec_
|
||||
{
|
||||
FT_Fixed fromCoord;
|
||||
FT_Fixed toCoord;
|
||||
|
||||
} GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* GX_AVarRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Data from the segment field of `avar' table. */
|
||||
/* There is one of these for each axis. */
|
||||
/* */
|
||||
typedef struct GX_AVarSegmentRec_
|
||||
{
|
||||
FT_UShort pairCount;
|
||||
GX_AVarCorrespondence correspondence; /* array with pairCount entries */
|
||||
|
||||
} GX_AVarSegmentRec, *GX_AVarSegment;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* GX_BlendRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Data for interpolating a font from a distortable font specified */
|
||||
/* by the GX *var tables ([fgca]var). */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* num_axis :: The number of axes along which interpolation */
|
||||
/* may happen */
|
||||
/* */
|
||||
/* normalizedcoords :: A normalized value (between [-1,1]) indicating */
|
||||
/* the contribution along each axis to the final */
|
||||
/* interpolated font. */
|
||||
/* */
|
||||
typedef struct GS_BlendRec_
|
||||
{
|
||||
FT_UInt num_axis;
|
||||
FT_Fixed* normalizedcoords;
|
||||
|
||||
FT_MM_Var* mmvar;
|
||||
FT_Int mmvar_len;
|
||||
|
||||
FT_Bool avar_checked;
|
||||
GX_AVarSegment avar_segment;
|
||||
|
||||
FT_UInt tuplecount; /* shared tuples in `gvar' */
|
||||
FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
|
||||
|
||||
FT_UInt gv_glyphcnt;
|
||||
FT_ULong* glyphoffsets;
|
||||
|
||||
} GX_BlendRec;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <enum> */
|
||||
/* GX_TupleCountFlags */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Flags used within the `TupleCount' field of the `gvar' table. */
|
||||
/* */
|
||||
typedef enum GX_TupleCountFlags_
|
||||
{
|
||||
GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000,
|
||||
GX_TC_RESERVED_TUPLE_FLAGS = 0x7000,
|
||||
GX_TC_TUPLE_COUNT_MASK = 0x0FFF
|
||||
|
||||
} GX_TupleCountFlags;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <enum> */
|
||||
/* GX_TupleIndexFlags */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */
|
||||
/* tables. */
|
||||
/* */
|
||||
typedef enum GX_TupleIndexFlags_
|
||||
{
|
||||
GX_TI_EMBEDDED_TUPLE_COORD = 0x8000,
|
||||
GX_TI_INTERMEDIATE_TUPLE = 0x4000,
|
||||
GX_TI_PRIVATE_POINT_NUMBERS = 0x2000,
|
||||
GX_TI_RESERVED_TUPLE_FLAG = 0x1000,
|
||||
GX_TI_TUPLE_INDEX_MASK = 0x0FFF
|
||||
|
||||
} GX_TupleIndexFlags;
|
||||
|
||||
|
||||
#define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' )
|
||||
#define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' )
|
||||
#define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' )
|
||||
#define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' )
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
TT_Set_MM_Blend( TT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
TT_Set_Var_Design( TT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
TT_Get_MM_Var( TT_Face face,
|
||||
FT_MM_Var* *master );
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
tt_face_vary_cvt( TT_Face face,
|
||||
FT_Stream stream );
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
TT_Vary_Get_Glyph_Deltas( TT_Face face,
|
||||
FT_UInt glyph_index,
|
||||
FT_Vector* *deltas,
|
||||
FT_UInt n_points );
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
tt_done_blend( FT_Memory memory,
|
||||
GX_Blend blend );
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __TTGXVAR_H__ */
|
||||
|
||||
|
||||
/* END */
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Objects manager (body). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -35,6 +35,10 @@
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
|
||||
#include FT_TRUETYPE_UNPATENTED_H
|
||||
#endif
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include "ttgxvar.h"
|
||||
#endif
|
||||
|
||||
/*************************************************************************/
|
||||
@ -293,6 +297,11 @@
|
||||
FT_FRAME_RELEASE( face->cvt_program );
|
||||
face->font_program_size = 0;
|
||||
face->cvt_program_size = 0;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
tt_done_blend( memory, face->blend );
|
||||
face->blend = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* TrueType glyph data/program tables loader (body). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* Copyright 1996-2001, 2002, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -24,6 +24,10 @@
|
||||
|
||||
#include "ttpload.h"
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
#include "ttgxvar.h"
|
||||
#endif
|
||||
|
||||
#include "tterrors.h"
|
||||
|
||||
|
||||
@ -186,6 +190,11 @@
|
||||
FT_FRAME_EXIT();
|
||||
FT_TRACE2(( "loaded\n" ));
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
if ( face->doblend )
|
||||
error = tt_face_vary_cvt( face, stream );
|
||||
#endif
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Type 1 driver interface (body). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -129,9 +129,11 @@
|
||||
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
|
||||
static const FT_Service_MultiMastersRec t1_service_multi_masters =
|
||||
{
|
||||
(FT_Get_MM_Func) T1_Get_Multi_Master,
|
||||
(FT_Set_MM_Design_Func)T1_Set_MM_Design,
|
||||
(FT_Set_MM_Blend_Func) T1_Set_MM_Blend
|
||||
(FT_Get_MM_Func) T1_Get_Multi_Master,
|
||||
(FT_Set_MM_Design_Func) T1_Set_MM_Design,
|
||||
(FT_Set_MM_Blend_Func) T1_Set_MM_Blend,
|
||||
(FT_Get_MM_Var_Func) T1_Get_MM_Var,
|
||||
(FT_Set_Var_Design_Func)T1_Set_Var_Design
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -211,6 +211,60 @@
|
||||
}
|
||||
|
||||
|
||||
#define FT_INT_TO_FIXED( a ) ( (a) << 16 )
|
||||
#define FT_FIXED_TO_INT( a ) ( FT_RoundFix( a ) >> 16 )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Just a wrapper around T1_Get_Multi_Master to support the different */
|
||||
/* arguments needed by the GX var distortable fonts. */
|
||||
/* */
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
T1_Get_MM_Var( T1_Face face,
|
||||
FT_MM_Var* *master )
|
||||
{
|
||||
FT_Memory memory = face->root.memory;
|
||||
FT_MM_Var *mmvar;
|
||||
FT_Multi_Master mmaster;
|
||||
FT_Error error;
|
||||
FT_UInt i;
|
||||
|
||||
|
||||
error = T1_Get_Multi_Master( face, &mmaster );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
if ( FT_ALLOC( mmvar,
|
||||
sizeof ( FT_MM_Var ) +
|
||||
mmaster.num_axis * sizeof ( FT_Var_Axis ) ) )
|
||||
goto Exit;
|
||||
|
||||
mmvar->num_axis = mmaster.num_axis;
|
||||
mmvar->num_designs = mmaster.num_designs;
|
||||
mmvar->num_namedstyles = (FT_UInt)-1; /* Does not apply */
|
||||
mmvar->axis = (FT_Var_Axis*)&mmvar[1];
|
||||
/* Point to axes after MM_Var struct */
|
||||
mmvar->namedstyle = NULL;
|
||||
|
||||
for ( i = 0 ; i < mmaster.num_axis; ++i )
|
||||
{
|
||||
mmvar->axis[i].name = mmaster.axis[i].name;
|
||||
mmvar->axis[i].minimum = FT_INT_TO_FIXED( mmaster.axis[i].minimum);
|
||||
mmvar->axis[i].maximum = FT_INT_TO_FIXED( mmaster.axis[i].maximum);
|
||||
mmvar->axis[i].def = ( mmvar->axis[i].minimum +
|
||||
mmvar->axis[i].maximum ) / 2;
|
||||
/* Does not apply. But this value is in range */
|
||||
mmvar->axis[i].tag = 0xFFFFFFFFLU; /* Does not apply */
|
||||
mmvar->axis[i].strid = 0xFFFFFFFFLU; /* Does not apply */
|
||||
}
|
||||
|
||||
*master = mmvar;
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
T1_Set_MM_Blend( T1_Face face,
|
||||
FT_UInt num_coords,
|
||||
@ -329,6 +383,33 @@
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Just a wrapper around T1_Set_MM_Design to support the different */
|
||||
/* arguments needed by the GX var distortable fonts. */
|
||||
/* */
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
T1_Set_Var_Design( T1_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Long lcoords[4]; /* maximum axis count is 4 */
|
||||
FT_UInt i;
|
||||
FT_Error error;
|
||||
|
||||
|
||||
error = T1_Err_Invalid_Argument;
|
||||
if ( num_coords <= 4 && num_coords > 0 )
|
||||
{
|
||||
for ( i = 0; i < num_coords; ++i )
|
||||
lcoords[i] = FT_FIXED_TO_INT( coords[i] );
|
||||
error = T1_Set_MM_Design( face, num_coords, lcoords );
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
T1_Done_Blend( T1_Face face )
|
||||
{
|
||||
|
@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Type 1 font loader (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* Copyright 1996-2001, 2002, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@ -60,6 +60,10 @@ FT_BEGIN_HEADER
|
||||
T1_Get_Multi_Master( T1_Face face,
|
||||
FT_Multi_Master* master );
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
T1_Get_MM_Var( T1_Face face,
|
||||
FT_MM_Var* *master );
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
T1_Set_MM_Blend( T1_Face face,
|
||||
FT_UInt num_coords,
|
||||
@ -70,6 +74,11 @@ FT_BEGIN_HEADER
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
T1_Set_Var_Design( T1_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords );
|
||||
|
||||
FT_LOCAL( void )
|
||||
T1_Done_Blend( T1_Face face );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user