Home | History | Annotate | Download | only in freetype2
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftmm.h                                                                 */
      4 /*                                                                         */
      5 /*    FreeType Multiple Master font interface (specification).             */
      6 /*                                                                         */
      7 /*  Copyright 1996-2015 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.      */
     99   /*                   This 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 that 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            :: An axis descriptor table.                       */
    205   /*                       GX fonts contain slightly more data than MM.    */
    206   /*                                                                       */
    207   /*    namedstyle      :: A named style table.                            */
    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   /* <Function>                                                            */
    224   /*    FT_Get_Multi_Master                                                */
    225   /*                                                                       */
    226   /* <Description>                                                         */
    227   /*    Retrieve the Multiple Master descriptor of a given font.           */
    228   /*                                                                       */
    229   /*    This function can't be used with GX fonts.                         */
    230   /*                                                                       */
    231   /* <Input>                                                               */
    232   /*    face    :: A handle to the source face.                            */
    233   /*                                                                       */
    234   /* <Output>                                                              */
    235   /*    amaster :: The Multiple Masters descriptor.                        */
    236   /*                                                                       */
    237   /* <Return>                                                              */
    238   /*    FreeType error code.  0~means success.                             */
    239   /*                                                                       */
    240   FT_EXPORT( FT_Error )
    241   FT_Get_Multi_Master( FT_Face           face,
    242                        FT_Multi_Master  *amaster );
    243 
    244 
    245   /*************************************************************************/
    246   /*                                                                       */
    247   /* <Function>                                                            */
    248   /*    FT_Get_MM_Var                                                      */
    249   /*                                                                       */
    250   /* <Description>                                                         */
    251   /*    Retrieve the Multiple Master/GX var descriptor of a given font.    */
    252   /*                                                                       */
    253   /* <Input>                                                               */
    254   /*    face    :: A handle to the source face.                            */
    255   /*                                                                       */
    256   /* <Output>                                                              */
    257   /*    amaster :: The Multiple Masters/GX var descriptor.                 */
    258   /*               Allocates a data structure, which the user must free.   */
    259   /*                                                                       */
    260   /* <Return>                                                              */
    261   /*    FreeType error code.  0~means success.                             */
    262   /*                                                                       */
    263   FT_EXPORT( FT_Error )
    264   FT_Get_MM_Var( FT_Face      face,
    265                  FT_MM_Var*  *amaster );
    266 
    267 
    268   /*************************************************************************/
    269   /*                                                                       */
    270   /* <Function>                                                            */
    271   /*    FT_Set_MM_Design_Coordinates                                       */
    272   /*                                                                       */
    273   /* <Description>                                                         */
    274   /*    For Multiple Masters fonts, choose an interpolated font design     */
    275   /*    through design coordinates.                                        */
    276   /*                                                                       */
    277   /*    This function can't be used with GX fonts.                         */
    278   /*                                                                       */
    279   /* <InOut>                                                               */
    280   /*    face       :: A handle to the source face.                         */
    281   /*                                                                       */
    282   /* <Input>                                                               */
    283   /*    num_coords :: The number of available design coordinates.  If it   */
    284   /*                  is larger than the number of axes, ignore the excess */
    285   /*                  values.  If it is smaller than the number of axes,   */
    286   /*                  use default values for the remaining axes.           */
    287   /*                                                                       */
    288   /*    coords     :: An array of design coordinates.                      */
    289   /*                                                                       */
    290   /* <Return>                                                              */
    291   /*    FreeType error code.  0~means success.                             */
    292   /*                                                                       */
    293   FT_EXPORT( FT_Error )
    294   FT_Set_MM_Design_Coordinates( FT_Face   face,
    295                                 FT_UInt   num_coords,
    296                                 FT_Long*  coords );
    297 
    298 
    299   /*************************************************************************/
    300   /*                                                                       */
    301   /* <Function>                                                            */
    302   /*    FT_Set_Var_Design_Coordinates                                      */
    303   /*                                                                       */
    304   /* <Description>                                                         */
    305   /*    For Multiple Master or GX Var fonts, choose an interpolated font   */
    306   /*    design through design coordinates.                                 */
    307   /*                                                                       */
    308   /* <InOut>                                                               */
    309   /*    face       :: A handle to the source face.                         */
    310   /*                                                                       */
    311   /* <Input>                                                               */
    312   /*    num_coords :: The number of available design coordinates.  If it   */
    313   /*                  is larger than the number of axes, ignore the excess */
    314   /*                  values.  If it is smaller than the number of axes,   */
    315   /*                  use default values for the remaining axes.           */
    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 available design coordinates.  If it   */
    342   /*                  is larger than the number of axes, ignore the excess */
    343   /*                  values.  If it is smaller than the number of axes,   */
    344   /*                  use default values for the remaining axes.           */
    345   /*                                                                       */
    346   /*    coords     :: The design coordinates array (each element must be   */
    347   /*                  between 0 and 1.0).                                  */
    348   /*                                                                       */
    349   /* <Return>                                                              */
    350   /*    FreeType error code.  0~means success.                             */
    351   /*                                                                       */
    352   FT_EXPORT( FT_Error )
    353   FT_Set_MM_Blend_Coordinates( FT_Face    face,
    354                                FT_UInt    num_coords,
    355                                FT_Fixed*  coords );
    356 
    357 
    358   /*************************************************************************/
    359   /*                                                                       */
    360   /* <Function>                                                            */
    361   /*    FT_Set_Var_Blend_Coordinates                                       */
    362   /*                                                                       */
    363   /* <Description>                                                         */
    364   /*    This is another name of @FT_Set_MM_Blend_Coordinates.              */
    365   /*                                                                       */
    366   FT_EXPORT( FT_Error )
    367   FT_Set_Var_Blend_Coordinates( FT_Face    face,
    368                                 FT_UInt    num_coords,
    369                                 FT_Fixed*  coords );
    370 
    371   /* */
    372 
    373 
    374 FT_END_HEADER
    375 
    376 #endif /* __FTMM_H__ */
    377 
    378 
    379 /* END */
    380