Home | History | Annotate | Download | only in freetype
      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   /*                       Memory management of this pointer is done       */
    207   /*                       internally by FreeType.                         */
    208   /*                                                                       */
    209   /*    namedstyle      :: A named style table.                            */
    210   /*                       Only meaningful with GX.                        */
    211   /*                       Memory management of this pointer is done       */
    212   /*                       internally by FreeType.                         */
    213   /*                                                                       */
    214   typedef struct  FT_MM_Var_
    215   {
    216     FT_UInt              num_axis;
    217     FT_UInt              num_designs;
    218     FT_UInt              num_namedstyles;
    219     FT_Var_Axis*         axis;
    220     FT_Var_Named_Style*  namedstyle;
    221 
    222   } FT_MM_Var;
    223 
    224 
    225   /*************************************************************************/
    226   /*                                                                       */
    227   /* <Function>                                                            */
    228   /*    FT_Get_Multi_Master                                                */
    229   /*                                                                       */
    230   /* <Description>                                                         */
    231   /*    Retrieve the Multiple Master descriptor of a given font.           */
    232   /*                                                                       */
    233   /*    This function can't be used with GX fonts.                         */
    234   /*                                                                       */
    235   /* <Input>                                                               */
    236   /*    face    :: A handle to the source face.                            */
    237   /*                                                                       */
    238   /* <Output>                                                              */
    239   /*    amaster :: The Multiple Masters descriptor.                        */
    240   /*                                                                       */
    241   /* <Return>                                                              */
    242   /*    FreeType error code.  0~means success.                             */
    243   /*                                                                       */
    244   FT_EXPORT( FT_Error )
    245   FT_Get_Multi_Master( FT_Face           face,
    246                        FT_Multi_Master  *amaster );
    247 
    248 
    249   /*************************************************************************/
    250   /*                                                                       */
    251   /* <Function>                                                            */
    252   /*    FT_Get_MM_Var                                                      */
    253   /*                                                                       */
    254   /* <Description>                                                         */
    255   /*    Retrieve the Multiple Master/GX var descriptor of a given font.    */
    256   /*                                                                       */
    257   /* <Input>                                                               */
    258   /*    face    :: A handle to the source face.                            */
    259   /*                                                                       */
    260   /* <Output>                                                              */
    261   /*    amaster :: The Multiple Masters/GX var descriptor.                 */
    262   /*               Allocates a data structure, which the user must         */
    263   /*               deallocate with `free' after use.                       */
    264   /*                                                                       */
    265   /* <Return>                                                              */
    266   /*    FreeType error code.  0~means success.                             */
    267   /*                                                                       */
    268   FT_EXPORT( FT_Error )
    269   FT_Get_MM_Var( FT_Face      face,
    270                  FT_MM_Var*  *amaster );
    271 
    272 
    273   /*************************************************************************/
    274   /*                                                                       */
    275   /* <Function>                                                            */
    276   /*    FT_Set_MM_Design_Coordinates                                       */
    277   /*                                                                       */
    278   /* <Description>                                                         */
    279   /*    For Multiple Masters fonts, choose an interpolated font design     */
    280   /*    through design coordinates.                                        */
    281   /*                                                                       */
    282   /*    This function can't be used with GX fonts.                         */
    283   /*                                                                       */
    284   /* <InOut>                                                               */
    285   /*    face       :: A handle to the source face.                         */
    286   /*                                                                       */
    287   /* <Input>                                                               */
    288   /*    num_coords :: The number of available design coordinates.  If it   */
    289   /*                  is larger than the number of axes, ignore the excess */
    290   /*                  values.  If it is smaller than the number of axes,   */
    291   /*                  use default values for the remaining axes.           */
    292   /*                                                                       */
    293   /*    coords     :: An array of design coordinates.                      */
    294   /*                                                                       */
    295   /* <Return>                                                              */
    296   /*    FreeType error code.  0~means success.                             */
    297   /*                                                                       */
    298   FT_EXPORT( FT_Error )
    299   FT_Set_MM_Design_Coordinates( FT_Face   face,
    300                                 FT_UInt   num_coords,
    301                                 FT_Long*  coords );
    302 
    303 
    304   /*************************************************************************/
    305   /*                                                                       */
    306   /* <Function>                                                            */
    307   /*    FT_Set_Var_Design_Coordinates                                      */
    308   /*                                                                       */
    309   /* <Description>                                                         */
    310   /*    For Multiple Master or GX Var fonts, choose an interpolated font   */
    311   /*    design through design coordinates.                                 */
    312   /*                                                                       */
    313   /* <InOut>                                                               */
    314   /*    face       :: A handle to the source face.                         */
    315   /*                                                                       */
    316   /* <Input>                                                               */
    317   /*    num_coords :: The number of available design coordinates.  If it   */
    318   /*                  is larger than the number of axes, ignore the excess */
    319   /*                  values.  If it is smaller than the number of axes,   */
    320   /*                  use default values for the remaining axes.           */
    321   /*                                                                       */
    322   /*    coords     :: An array of design coordinates.                      */
    323   /*                                                                       */
    324   /* <Return>                                                              */
    325   /*    FreeType error code.  0~means success.                             */
    326   /*                                                                       */
    327   FT_EXPORT( FT_Error )
    328   FT_Set_Var_Design_Coordinates( FT_Face    face,
    329                                  FT_UInt    num_coords,
    330                                  FT_Fixed*  coords );
    331 
    332 
    333   /*************************************************************************/
    334   /*                                                                       */
    335   /* <Function>                                                            */
    336   /*    FT_Set_MM_Blend_Coordinates                                        */
    337   /*                                                                       */
    338   /* <Description>                                                         */
    339   /*    For Multiple Masters and GX var fonts, choose an interpolated font */
    340   /*    design through normalized blend coordinates.                       */
    341   /*                                                                       */
    342   /* <InOut>                                                               */
    343   /*    face       :: A handle to the source face.                         */
    344   /*                                                                       */
    345   /* <Input>                                                               */
    346   /*    num_coords :: The number of available design coordinates.  If it   */
    347   /*                  is larger than the number of axes, ignore the excess */
    348   /*                  values.  If it is smaller than the number of axes,   */
    349   /*                  use default values for the remaining axes.           */
    350   /*                                                                       */
    351   /*    coords     :: The design coordinates array (each element must be   */
    352   /*                  between 0 and 1.0).                                  */
    353   /*                                                                       */
    354   /* <Return>                                                              */
    355   /*    FreeType error code.  0~means success.                             */
    356   /*                                                                       */
    357   FT_EXPORT( FT_Error )
    358   FT_Set_MM_Blend_Coordinates( FT_Face    face,
    359                                FT_UInt    num_coords,
    360                                FT_Fixed*  coords );
    361 
    362 
    363   /*************************************************************************/
    364   /*                                                                       */
    365   /* <Function>                                                            */
    366   /*    FT_Set_Var_Blend_Coordinates                                       */
    367   /*                                                                       */
    368   /* <Description>                                                         */
    369   /*    This is another name of @FT_Set_MM_Blend_Coordinates.              */
    370   /*                                                                       */
    371   FT_EXPORT( FT_Error )
    372   FT_Set_Var_Blend_Coordinates( FT_Face    face,
    373                                 FT_UInt    num_coords,
    374                                 FT_Fixed*  coords );
    375 
    376   /* */
    377 
    378 
    379 FT_END_HEADER
    380 
    381 #endif /* __FTMM_H__ */
    382 
    383 
    384 /* END */
    385