• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * svmm.h
4  *
5  *   The FreeType Multiple Masters and GX var services (specification).
6  *
7  * Copyright 2003-2018 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 SVMM_H_
20 #define SVMM_H_
21 
22 #include FT_INTERNAL_SERVICE_H
23 
24 
25 FT_BEGIN_HEADER
26 
27 
28   /*
29    * A service used to manage multiple-masters data in a given face.
30    *
31    * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
32    *
33    */
34 
35 #define FT_SERVICE_ID_MULTI_MASTERS  "multi-masters"
36 
37 
38   typedef FT_Error
39   (*FT_Get_MM_Func)( FT_Face           face,
40                      FT_Multi_Master*  master );
41 
42   typedef FT_Error
43   (*FT_Get_MM_Var_Func)( FT_Face      face,
44                          FT_MM_Var*  *master );
45 
46   typedef FT_Error
47   (*FT_Set_MM_Design_Func)( FT_Face   face,
48                             FT_UInt   num_coords,
49                             FT_Long*  coords );
50 
51   /* use return value -1 to indicate that the new coordinates  */
52   /* are equal to the current ones; no changes are thus needed */
53   typedef FT_Error
54   (*FT_Set_Var_Design_Func)( FT_Face    face,
55                              FT_UInt    num_coords,
56                              FT_Fixed*  coords );
57 
58   /* use return value -1 to indicate that the new coordinates  */
59   /* are equal to the current ones; no changes are thus needed */
60   typedef FT_Error
61   (*FT_Set_MM_Blend_Func)( FT_Face   face,
62                            FT_UInt   num_coords,
63                            FT_Long*  coords );
64 
65   typedef FT_Error
66   (*FT_Get_Var_Design_Func)( FT_Face    face,
67                              FT_UInt    num_coords,
68                              FT_Fixed*  coords );
69 
70   typedef FT_Error
71   (*FT_Set_Instance_Func)( FT_Face  face,
72                            FT_UInt  instance_index );
73 
74   typedef FT_Error
75   (*FT_Get_MM_Blend_Func)( FT_Face   face,
76                            FT_UInt   num_coords,
77                            FT_Long*  coords );
78 
79   typedef FT_Error
80   (*FT_Get_Var_Blend_Func)( FT_Face      face,
81                             FT_UInt     *num_coords,
82                             FT_Fixed*   *coords,
83                             FT_Fixed*   *normalizedcoords,
84                             FT_MM_Var*  *mm_var );
85 
86   typedef void
87   (*FT_Done_Blend_Func)( FT_Face );
88 
89 
FT_DEFINE_SERVICE(MultiMasters)90   FT_DEFINE_SERVICE( MultiMasters )
91   {
92     FT_Get_MM_Func          get_mm;
93     FT_Set_MM_Design_Func   set_mm_design;
94     FT_Set_MM_Blend_Func    set_mm_blend;
95     FT_Get_MM_Blend_Func    get_mm_blend;
96     FT_Get_MM_Var_Func      get_mm_var;
97     FT_Set_Var_Design_Func  set_var_design;
98     FT_Get_Var_Design_Func  get_var_design;
99     FT_Set_Instance_Func    set_instance;
100 
101     /* for internal use; only needed for code sharing between modules */
102     FT_Get_Var_Blend_Func   get_var_blend;
103     FT_Done_Blend_Func      done_blend;
104   };
105 
106 
107 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,          \
108                                            get_mm_,         \
109                                            set_mm_design_,  \
110                                            set_mm_blend_,   \
111                                            get_mm_blend_,   \
112                                            get_mm_var_,     \
113                                            set_var_design_, \
114                                            get_var_design_, \
115                                            set_instance_,   \
116                                            get_var_blend_,  \
117                                            done_blend_ )    \
118   static const FT_Service_MultiMastersRec  class_ =         \
119   {                                                         \
120     get_mm_,                                                \
121     set_mm_design_,                                         \
122     set_mm_blend_,                                          \
123     get_mm_blend_,                                          \
124     get_mm_var_,                                            \
125     set_var_design_,                                        \
126     get_var_design_,                                        \
127     set_instance_,                                          \
128     get_var_blend_,                                         \
129     done_blend_                                             \
130   };
131 
132   /* */
133 
134 
135 FT_END_HEADER
136 
137 #endif /* SVMM_H_ */
138 
139 
140 /* END */
141