misc/libfreetype/include/freetype/ftmm.h
changeset 9431 0f5961910e27
parent 9357 a501f5ec7b34
parent 9429 7a97a554ac80
child 9433 f0a8ac191839
equal deleted inserted replaced
9357:a501f5ec7b34 9431:0f5961910e27
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  ftmm.h                                                                 */
       
     4 /*                                                                         */
       
     5 /*    FreeType Multiple Master font interface (specification).             */
       
     6 /*                                                                         */
       
     7 /*  Copyright 1996-2001, 2003, 2004, 2006, 2009 by                         */
       
     8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
       
     9 /*                                                                         */
       
    10 /*  This file is part of the FreeType project, and may only be used,       */
       
    11 /*  modified, and distributed under the terms of the FreeType project      */
       
    12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
       
    13 /*  this file you indicate that you have read the license and              */
       
    14 /*  understand and accept it fully.                                        */
       
    15 /*                                                                         */
       
    16 /***************************************************************************/
       
    17 
       
    18 
       
    19 #ifndef __FTMM_H__
       
    20 #define __FTMM_H__
       
    21 
       
    22 
       
    23 #include <ft2build.h>
       
    24 #include FT_TYPE1_TABLES_H
       
    25 
       
    26 
       
    27 FT_BEGIN_HEADER
       
    28 
       
    29 
       
    30   /*************************************************************************/
       
    31   /*                                                                       */
       
    32   /* <Section>                                                             */
       
    33   /*    multiple_masters                                                   */
       
    34   /*                                                                       */
       
    35   /* <Title>                                                               */
       
    36   /*    Multiple Masters                                                   */
       
    37   /*                                                                       */
       
    38   /* <Abstract>                                                            */
       
    39   /*    How to manage Multiple Masters fonts.                              */
       
    40   /*                                                                       */
       
    41   /* <Description>                                                         */
       
    42   /*    The following types and functions are used to manage Multiple      */
       
    43   /*    Master fonts, i.e., the selection of specific design instances by  */
       
    44   /*    setting design axis coordinates.                                   */
       
    45   /*                                                                       */
       
    46   /*    George Williams has extended this interface to make it work with   */
       
    47   /*    both Type~1 Multiple Masters fonts and GX distortable (var)        */
       
    48   /*    fonts.  Some of these routines only work with MM fonts, others     */
       
    49   /*    will work with both types.  They are similar enough that a         */
       
    50   /*    consistent interface makes sense.                                  */
       
    51   /*                                                                       */
       
    52   /*************************************************************************/
       
    53 
       
    54 
       
    55   /*************************************************************************/
       
    56   /*                                                                       */
       
    57   /* <Struct>                                                              */
       
    58   /*    FT_MM_Axis                                                         */
       
    59   /*                                                                       */
       
    60   /* <Description>                                                         */
       
    61   /*    A simple structure used to model a given axis in design space for  */
       
    62   /*    Multiple Masters fonts.                                            */
       
    63   /*                                                                       */
       
    64   /*    This structure can't be used for GX var fonts.                     */
       
    65   /*                                                                       */
       
    66   /* <Fields>                                                              */
       
    67   /*    name    :: The axis's name.                                        */
       
    68   /*                                                                       */
       
    69   /*    minimum :: The axis's minimum design coordinate.                   */
       
    70   /*                                                                       */
       
    71   /*    maximum :: The axis's maximum design coordinate.                   */
       
    72   /*                                                                       */
       
    73   typedef struct  FT_MM_Axis_
       
    74   {
       
    75     FT_String*  name;
       
    76     FT_Long     minimum;
       
    77     FT_Long     maximum;
       
    78 
       
    79   } FT_MM_Axis;
       
    80 
       
    81 
       
    82   /*************************************************************************/
       
    83   /*                                                                       */
       
    84   /* <Struct>                                                              */
       
    85   /*    FT_Multi_Master                                                    */
       
    86   /*                                                                       */
       
    87   /* <Description>                                                         */
       
    88   /*    A structure used to model the axes and space of a Multiple Masters */
       
    89   /*    font.                                                              */
       
    90   /*                                                                       */
       
    91   /*    This structure can't be used for GX var fonts.                     */
       
    92   /*                                                                       */
       
    93   /* <Fields>                                                              */
       
    94   /*    num_axis    :: Number of axes.  Cannot exceed~4.                   */
       
    95   /*                                                                       */
       
    96   /*    num_designs :: Number of designs; should be normally 2^num_axis    */
       
    97   /*                   even though the Type~1 specification strangely      */
       
    98   /*                   allows for intermediate designs to be present. This */
       
    99   /*                   number cannot exceed~16.                            */
       
   100   /*                                                                       */
       
   101   /*    axis        :: A table of axis descriptors.                        */
       
   102   /*                                                                       */
       
   103   typedef struct  FT_Multi_Master_
       
   104   {
       
   105     FT_UInt     num_axis;
       
   106     FT_UInt     num_designs;
       
   107     FT_MM_Axis  axis[T1_MAX_MM_AXIS];
       
   108 
       
   109   } FT_Multi_Master;
       
   110 
       
   111 
       
   112   /*************************************************************************/
       
   113   /*                                                                       */
       
   114   /* <Struct>                                                              */
       
   115   /*    FT_Var_Axis                                                        */
       
   116   /*                                                                       */
       
   117   /* <Description>                                                         */
       
   118   /*    A simple structure used to model a given axis in design space for  */
       
   119   /*    Multiple Masters and GX var fonts.                                 */
       
   120   /*                                                                       */
       
   121   /* <Fields>                                                              */
       
   122   /*    name    :: The axis's name.                                        */
       
   123   /*               Not always meaningful for GX.                           */
       
   124   /*                                                                       */
       
   125   /*    minimum :: The axis's minimum design coordinate.                   */
       
   126   /*                                                                       */
       
   127   /*    def     :: The axis's default design coordinate.                   */
       
   128   /*               FreeType computes meaningful default values for MM; it  */
       
   129   /*               is then an integer value, not in 16.16 format.          */
       
   130   /*                                                                       */
       
   131   /*    maximum :: The axis's maximum design coordinate.                   */
       
   132   /*                                                                       */
       
   133   /*    tag     :: The axis's tag (the GX equivalent to `name').           */
       
   134   /*               FreeType provides default values for MM if possible.    */
       
   135   /*                                                                       */
       
   136   /*    strid   :: The entry in `name' table (another GX version of        */
       
   137   /*               `name').                                                */
       
   138   /*               Not meaningful for MM.                                  */
       
   139   /*                                                                       */
       
   140   typedef struct  FT_Var_Axis_
       
   141   {
       
   142     FT_String*  name;
       
   143 
       
   144     FT_Fixed    minimum;
       
   145     FT_Fixed    def;
       
   146     FT_Fixed    maximum;
       
   147 
       
   148     FT_ULong    tag;
       
   149     FT_UInt     strid;
       
   150 
       
   151   } FT_Var_Axis;
       
   152 
       
   153 
       
   154   /*************************************************************************/
       
   155   /*                                                                       */
       
   156   /* <Struct>                                                              */
       
   157   /*    FT_Var_Named_Style                                                 */
       
   158   /*                                                                       */
       
   159   /* <Description>                                                         */
       
   160   /*    A simple structure used to model a named style in a GX var font.   */
       
   161   /*                                                                       */
       
   162   /*    This structure can't be used for MM fonts.                         */
       
   163   /*                                                                       */
       
   164   /* <Fields>                                                              */
       
   165   /*    coords :: The design coordinates for this style.                   */
       
   166   /*              This is an array with one entry for each axis.           */
       
   167   /*                                                                       */
       
   168   /*    strid  :: The entry in `name' table identifying this style.        */
       
   169   /*                                                                       */
       
   170   typedef struct  FT_Var_Named_Style_
       
   171   {
       
   172     FT_Fixed*  coords;
       
   173     FT_UInt    strid;
       
   174 
       
   175   } FT_Var_Named_Style;
       
   176 
       
   177 
       
   178   /*************************************************************************/
       
   179   /*                                                                       */
       
   180   /* <Struct>                                                              */
       
   181   /*    FT_MM_Var                                                          */
       
   182   /*                                                                       */
       
   183   /* <Description>                                                         */
       
   184   /*    A structure used to model the axes and space of a Multiple Masters */
       
   185   /*    or GX var distortable font.                                        */
       
   186   /*                                                                       */
       
   187   /*    Some fields are specific to one format and not to the other.       */
       
   188   /*                                                                       */
       
   189   /* <Fields>                                                              */
       
   190   /*    num_axis        :: The number of axes.  The maximum value is~4 for */
       
   191   /*                       MM; no limit in GX.                             */
       
   192   /*                                                                       */
       
   193   /*    num_designs     :: The number of designs; should be normally       */
       
   194   /*                       2^num_axis for MM fonts.  Not meaningful for GX */
       
   195   /*                       (where every glyph could have a different       */
       
   196   /*                       number of designs).                             */
       
   197   /*                                                                       */
       
   198   /*    num_namedstyles :: The number of named styles; only meaningful for */
       
   199   /*                       GX which allows certain design coordinates to   */
       
   200   /*                       have a string ID (in the `name' table)          */
       
   201   /*                       associated with them.  The font can tell the    */
       
   202   /*                       user that, for example, Weight=1.5 is `Bold'.   */
       
   203   /*                                                                       */
       
   204   /*    axis            :: A table of axis descriptors.                    */
       
   205   /*                       GX fonts contain slightly more data than MM.    */
       
   206   /*                                                                       */
       
   207   /*    namedstyles     :: A table of named styles.                        */
       
   208   /*                       Only meaningful with GX.                        */
       
   209   /*                                                                       */
       
   210   typedef struct  FT_MM_Var_
       
   211   {
       
   212     FT_UInt              num_axis;
       
   213     FT_UInt              num_designs;
       
   214     FT_UInt              num_namedstyles;
       
   215     FT_Var_Axis*         axis;
       
   216     FT_Var_Named_Style*  namedstyle;
       
   217 
       
   218   } FT_MM_Var;
       
   219 
       
   220 
       
   221   /* */
       
   222 
       
   223 
       
   224   /*************************************************************************/
       
   225   /*                                                                       */
       
   226   /* <Function>                                                            */
       
   227   /*    FT_Get_Multi_Master                                                */
       
   228   /*                                                                       */
       
   229   /* <Description>                                                         */
       
   230   /*    Retrieve the Multiple Master descriptor of a given font.           */
       
   231   /*                                                                       */
       
   232   /*    This function can't be used with GX fonts.                         */
       
   233   /*                                                                       */
       
   234   /* <Input>                                                               */
       
   235   /*    face    :: A handle to the source face.                            */
       
   236   /*                                                                       */
       
   237   /* <Output>                                                              */
       
   238   /*    amaster :: The Multiple Masters descriptor.                        */
       
   239   /*                                                                       */
       
   240   /* <Return>                                                              */
       
   241   /*    FreeType error code.  0~means success.                             */
       
   242   /*                                                                       */
       
   243   FT_EXPORT( FT_Error )
       
   244   FT_Get_Multi_Master( FT_Face           face,
       
   245                        FT_Multi_Master  *amaster );
       
   246 
       
   247 
       
   248   /*************************************************************************/
       
   249   /*                                                                       */
       
   250   /* <Function>                                                            */
       
   251   /*    FT_Get_MM_Var                                                      */
       
   252   /*                                                                       */
       
   253   /* <Description>                                                         */
       
   254   /*    Retrieve the Multiple Master/GX var descriptor of a given font.    */
       
   255   /*                                                                       */
       
   256   /* <Input>                                                               */
       
   257   /*    face    :: A handle to the source face.                            */
       
   258   /*                                                                       */
       
   259   /* <Output>                                                              */
       
   260   /*    amaster :: The Multiple Masters/GX var descriptor.                 */
       
   261   /*               Allocates a data structure, which the user must free    */
       
   262   /*               (a single call to FT_FREE will do it).                  */
       
   263   /*                                                                       */
       
   264   /* <Return>                                                              */
       
   265   /*    FreeType error code.  0~means success.                             */
       
   266   /*                                                                       */
       
   267   FT_EXPORT( FT_Error )
       
   268   FT_Get_MM_Var( FT_Face      face,
       
   269                  FT_MM_Var*  *amaster );
       
   270 
       
   271 
       
   272   /*************************************************************************/
       
   273   /*                                                                       */
       
   274   /* <Function>                                                            */
       
   275   /*    FT_Set_MM_Design_Coordinates                                       */
       
   276   /*                                                                       */
       
   277   /* <Description>                                                         */
       
   278   /*    For Multiple Masters fonts, choose an interpolated font design     */
       
   279   /*    through design coordinates.                                        */
       
   280   /*                                                                       */
       
   281   /*    This function can't be used with GX fonts.                         */
       
   282   /*                                                                       */
       
   283   /* <InOut>                                                               */
       
   284   /*    face       :: A handle to the source face.                         */
       
   285   /*                                                                       */
       
   286   /* <Input>                                                               */
       
   287   /*    num_coords :: The number of design coordinates (must be equal to   */
       
   288   /*                  the number of axes in the font).                     */
       
   289   /*                                                                       */
       
   290   /*    coords     :: An array of design coordinates.                      */
       
   291   /*                                                                       */
       
   292   /* <Return>                                                              */
       
   293   /*    FreeType error code.  0~means success.                             */
       
   294   /*                                                                       */
       
   295   FT_EXPORT( FT_Error )
       
   296   FT_Set_MM_Design_Coordinates( FT_Face   face,
       
   297                                 FT_UInt   num_coords,
       
   298                                 FT_Long*  coords );
       
   299 
       
   300 
       
   301   /*************************************************************************/
       
   302   /*                                                                       */
       
   303   /* <Function>                                                            */
       
   304   /*    FT_Set_Var_Design_Coordinates                                      */
       
   305   /*                                                                       */
       
   306   /* <Description>                                                         */
       
   307   /*    For Multiple Master or GX Var fonts, choose an interpolated font   */
       
   308   /*    design through design coordinates.                                 */
       
   309   /*                                                                       */
       
   310   /* <InOut>                                                               */
       
   311   /*    face       :: A handle to the source face.                         */
       
   312   /*                                                                       */
       
   313   /* <Input>                                                               */
       
   314   /*    num_coords :: The number of design coordinates (must be equal to   */
       
   315   /*                  the number of axes in the font).                     */
       
   316   /*                                                                       */
       
   317   /*    coords     :: An array of design coordinates.                      */
       
   318   /*                                                                       */
       
   319   /* <Return>                                                              */
       
   320   /*    FreeType error code.  0~means success.                             */
       
   321   /*                                                                       */
       
   322   FT_EXPORT( FT_Error )
       
   323   FT_Set_Var_Design_Coordinates( FT_Face    face,
       
   324                                  FT_UInt    num_coords,
       
   325                                  FT_Fixed*  coords );
       
   326 
       
   327 
       
   328   /*************************************************************************/
       
   329   /*                                                                       */
       
   330   /* <Function>                                                            */
       
   331   /*    FT_Set_MM_Blend_Coordinates                                        */
       
   332   /*                                                                       */
       
   333   /* <Description>                                                         */
       
   334   /*    For Multiple Masters and GX var fonts, choose an interpolated font */
       
   335   /*    design through normalized blend coordinates.                       */
       
   336   /*                                                                       */
       
   337   /* <InOut>                                                               */
       
   338   /*    face       :: A handle to the source face.                         */
       
   339   /*                                                                       */
       
   340   /* <Input>                                                               */
       
   341   /*    num_coords :: The number of design coordinates (must be equal to   */
       
   342   /*                  the number of axes in the font).                     */
       
   343   /*                                                                       */
       
   344   /*    coords     :: The design coordinates array (each element must be   */
       
   345   /*                  between 0 and 1.0).                                  */
       
   346   /*                                                                       */
       
   347   /* <Return>                                                              */
       
   348   /*    FreeType error code.  0~means success.                             */
       
   349   /*                                                                       */
       
   350   FT_EXPORT( FT_Error )
       
   351   FT_Set_MM_Blend_Coordinates( FT_Face    face,
       
   352                                FT_UInt    num_coords,
       
   353                                FT_Fixed*  coords );
       
   354 
       
   355 
       
   356   /*************************************************************************/
       
   357   /*                                                                       */
       
   358   /* <Function>                                                            */
       
   359   /*    FT_Set_Var_Blend_Coordinates                                       */
       
   360   /*                                                                       */
       
   361   /* <Description>                                                         */
       
   362   /*    This is another name of @FT_Set_MM_Blend_Coordinates.              */
       
   363   /*                                                                       */
       
   364   FT_EXPORT( FT_Error )
       
   365   FT_Set_Var_Blend_Coordinates( FT_Face    face,
       
   366                                 FT_UInt    num_coords,
       
   367                                 FT_Fixed*  coords );
       
   368 
       
   369 
       
   370   /* */
       
   371 
       
   372 
       
   373 FT_END_HEADER
       
   374 
       
   375 #endif /* __FTMM_H__ */
       
   376 
       
   377 
       
   378 /* END */