ftdriver.h

Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftdriver.h                                                             */
00004 /*                                                                         */
00005 /*    FreeType font driver interface (specification).                      */
00006 /*                                                                         */
00007 /*  Copyright 1996-2001, 2002, 2003, 2006, 2008 by                         */
00008 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
00009 /*                                                                         */
00010 /*  This file is part of the FreeType project, and may only be used,       */
00011 /*  modified, and distributed under the terms of the FreeType project      */
00012 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
00013 /*  this file you indicate that you have read the license and              */
00014 /*  understand and accept it fully.                                        */
00015 /*                                                                         */
00016 /***************************************************************************/
00017 
00018 
00019 #ifndef __FTDRIVER_H__
00020 #define __FTDRIVER_H__
00021 
00022 
00023 #include <ft2build.h>
00024 #include FT_MODULE_H
00025 
00026 
00027 FT_BEGIN_HEADER
00028 
00029 
00030   typedef FT_Error
00031   (*FT_Face_InitFunc)( FT_Stream      stream,
00032                        FT_Face        face,
00033                        FT_Int         typeface_index,
00034                        FT_Int         num_params,
00035                        FT_Parameter*  parameters );
00036 
00037   typedef void
00038   (*FT_Face_DoneFunc)( FT_Face  face );
00039 
00040 
00041   typedef FT_Error
00042   (*FT_Size_InitFunc)( FT_Size  size );
00043 
00044   typedef void
00045   (*FT_Size_DoneFunc)( FT_Size  size );
00046 
00047 
00048   typedef FT_Error
00049   (*FT_Slot_InitFunc)( FT_GlyphSlot  slot );
00050 
00051   typedef void
00052   (*FT_Slot_DoneFunc)( FT_GlyphSlot  slot );
00053 
00054 
00055   typedef FT_Error
00056   (*FT_Size_RequestFunc)( FT_Size          size,
00057                           FT_Size_Request  req );
00058 
00059   typedef FT_Error
00060   (*FT_Size_SelectFunc)( FT_Size   size,
00061                          FT_ULong  size_index );
00062 
00063 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00064 
00065   typedef FT_Error
00066   (*FT_Size_ResetPointsFunc)( FT_Size     size,
00067                               FT_F26Dot6  char_width,
00068                               FT_F26Dot6  char_height,
00069                               FT_UInt     horz_resolution,
00070                               FT_UInt     vert_resolution );
00071 
00072   typedef FT_Error
00073   (*FT_Size_ResetPixelsFunc)( FT_Size  size,
00074                               FT_UInt  pixel_width,
00075                               FT_UInt  pixel_height );
00076 
00077 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
00078 
00079   typedef FT_Error
00080   (*FT_Slot_LoadFunc)( FT_GlyphSlot  slot,
00081                        FT_Size       size,
00082                        FT_UInt       glyph_index,
00083                        FT_Int32      load_flags );
00084 
00085 
00086   typedef FT_UInt
00087   (*FT_CharMap_CharIndexFunc)( FT_CharMap  charmap,
00088                                FT_Long     charcode );
00089 
00090   typedef FT_Long
00091   (*FT_CharMap_CharNextFunc)( FT_CharMap  charmap,
00092                               FT_Long     charcode );
00093 
00094 
00095   typedef FT_Error
00096   (*FT_Face_GetKerningFunc)( FT_Face     face,
00097                              FT_UInt     left_glyph,
00098                              FT_UInt     right_glyph,
00099                              FT_Vector*  kerning );
00100 
00101 
00102   typedef FT_Error
00103   (*FT_Face_AttachFunc)( FT_Face    face,
00104                          FT_Stream  stream );
00105 
00106 
00107   typedef FT_Error
00108   (*FT_Face_GetAdvancesFunc)( FT_Face    face,
00109                               FT_UInt    first,
00110                               FT_UInt    count,
00111                               FT_Int32   flags,
00112                               FT_Fixed*  advances );
00113 
00114 
00115   /*************************************************************************/
00116   /*                                                                       */
00117   /* <Struct>                                                              */
00118   /*    FT_Driver_ClassRec                                                 */
00119   /*                                                                       */
00120   /* <Description>                                                         */
00121   /*    The font driver class.  This structure mostly contains pointers to */
00122   /*    driver methods.                                                    */
00123   /*                                                                       */
00124   /* <Fields>                                                              */
00125   /*    root             :: The parent module.                             */
00126   /*                                                                       */
00127   /*    face_object_size :: The size of a face object in bytes.            */
00128   /*                                                                       */
00129   /*    size_object_size :: The size of a size object in bytes.            */
00130   /*                                                                       */
00131   /*    slot_object_size :: The size of a glyph object in bytes.           */
00132   /*                                                                       */
00133   /*    init_face        :: The format-specific face constructor.          */
00134   /*                                                                       */
00135   /*    done_face        :: The format-specific face destructor.           */
00136   /*                                                                       */
00137   /*    init_size        :: The format-specific size constructor.          */
00138   /*                                                                       */
00139   /*    done_size        :: The format-specific size destructor.           */
00140   /*                                                                       */
00141   /*    init_slot        :: The format-specific slot constructor.          */
00142   /*                                                                       */
00143   /*    done_slot        :: The format-specific slot destructor.           */
00144   /*                                                                       */
00145   /*                                                                       */
00146   /*    load_glyph       :: A function handle to load a glyph to a slot.   */
00147   /*                        This field is mandatory!                       */
00148   /*                                                                       */
00149   /*    get_kerning      :: A function handle to return the unscaled       */
00150   /*                        kerning for a given pair of glyphs.  Can be    */
00151   /*                        set to 0 if the format doesn't support         */
00152   /*                        kerning.                                       */
00153   /*                                                                       */
00154   /*    attach_file      :: This function handle is used to read           */
00155   /*                        additional data for a face from another        */
00156   /*                        file/stream.  For example, this can be used to */
00157   /*                        add data from AFM or PFM files on a Type 1     */
00158   /*                        face, or a CIDMap on a CID-keyed face.         */
00159   /*                                                                       */
00160   /*    get_advances     :: A function handle used to return advance       */
00161   /*                        widths of `count' glyphs (in font units),      */
00162   /*                        starting at `first'.  The `vertical' flag must */
00163   /*                        be set to get vertical advance heights.  The   */
00164   /*                        `advances' buffer is caller-allocated.         */
00165   /*                        Currently not implemented.  The idea of this   */
00166   /*                        function is to be able to perform              */
00167   /*                        device-independent text layout without loading */
00168   /*                        a single glyph image.                          */
00169   /*                                                                       */
00170   /*    request_size     :: A handle to a function used to request the new */
00171   /*                        character size.  Can be set to 0 if the        */
00172   /*                        scaling done in the base layer suffices.       */
00173   /*                                                                       */
00174   /*    select_size      :: A handle to a function used to select a new    */
00175   /*                        fixed size.  It is used only if                */
00176   /*                        @FT_FACE_FLAG_FIXED_SIZES is set.  Can be set  */
00177   /*                        to 0 if the scaling done in the base layer     */
00178   /*                        suffices.                                      */
00179   /* <Note>                                                                */
00180   /*    Most function pointers, with the exception of `load_glyph', can be */
00181   /*    set to 0 to indicate a default behaviour.                          */
00182   /*                                                                       */
00183   typedef struct  FT_Driver_ClassRec_
00184   {
00185     FT_Module_Class           root;
00186 
00187     FT_Long                   face_object_size;
00188     FT_Long                   size_object_size;
00189     FT_Long                   slot_object_size;
00190 
00191     FT_Face_InitFunc          init_face;
00192     FT_Face_DoneFunc          done_face;
00193 
00194     FT_Size_InitFunc          init_size;
00195     FT_Size_DoneFunc          done_size;
00196 
00197     FT_Slot_InitFunc          init_slot;
00198     FT_Slot_DoneFunc          done_slot;
00199 
00200 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00201 
00202     FT_Size_ResetPointsFunc   set_char_sizes;
00203     FT_Size_ResetPixelsFunc   set_pixel_sizes;
00204 
00205 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
00206 
00207     FT_Slot_LoadFunc          load_glyph;
00208 
00209     FT_Face_GetKerningFunc    get_kerning;
00210     FT_Face_AttachFunc        attach_file;
00211     FT_Face_GetAdvancesFunc   get_advances;
00212 
00213     /* since version 2.2 */
00214     FT_Size_RequestFunc       request_size;
00215     FT_Size_SelectFunc        select_size;
00216 
00217   } FT_Driver_ClassRec, *FT_Driver_Class;
00218 
00219 
00220   /*
00221    *  The following functions are used as stubs for `set_char_sizes' and
00222    *  `set_pixel_sizes'; the code uses `request_size' and `select_size'
00223    *  functions instead.
00224    *
00225    *  Implementation is in `src/base/ftobjs.c'.
00226    */
00227 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00228 
00229   FT_BASE( FT_Error )
00230   ft_stub_set_char_sizes( FT_Size     size,
00231                           FT_F26Dot6  width,
00232                           FT_F26Dot6  height,
00233                           FT_UInt     horz_res,
00234                           FT_UInt     vert_res );
00235 
00236   FT_BASE( FT_Error )
00237   ft_stub_set_pixel_sizes( FT_Size  size,
00238                            FT_UInt  width,
00239                            FT_UInt  height );
00240 
00241 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
00242 
00243   /*************************************************************************/
00244   /*                                                                       */
00245   /* <Macro>                                                               */
00246   /*    FT_DECLARE_DRIVER                                                  */
00247   /*                                                                       */
00248   /* <Description>                                                         */
00249   /*    Used to create a forward declaration of a                          */
00250   /*    FT_Driver_ClassRec stract instance.                                */
00251   /*                                                                       */
00252   /* <Macro>                                                               */
00253   /*    FT_DEFINE_DRIVER                                                   */
00254   /*                                                                       */
00255   /* <Description>                                                         */
00256   /*    Used to initialize an instance of FT_Driver_ClassRec struct.       */
00257   /*                                                                       */
00258   /*    When FT_CONFIG_OPTION_PIC is defined a Create funtion will need    */
00259   /*    to called with a pointer where the allocated stracture is returned.*/
00260   /*    And when it is no longer needed a Destroy function needs           */
00261   /*    to be called to release that allocation.                           */
00262   /*    fcinit.c (ft_create_default_module_classes) already contains       */
00263   /*    a mechanism to call these functions for the default modules        */
00264   /*    described in ftmodule.h                                            */
00265   /*                                                                       */
00266   /*    Notice that the created Create and Destroy functions call          */
00267   /*    pic_init and pic_free function to allow you to manually allocate   */
00268   /*    and initialize any additional global data, like module specific    */
00269   /*    interface, and put them in the global pic container defined in     */
00270   /*    ftpic.h. if you don't need them just implement the functions as    */
00271   /*    empty to resolve the link error.                                   */
00272   /*                                                                       */
00273   /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
00274   /*    allocated in the global scope (or the scope where the macro        */
00275   /*    is used).                                                          */
00276   /*                                                                       */
00277 #ifndef FT_CONFIG_OPTION_PIC
00278 
00279 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00280 #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
00281   a_, b_,
00282 #else
00283   #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
00284 #endif
00285 
00286 #define FT_DECLARE_DRIVER(class_)    \
00287   FT_CALLBACK_TABLE                  \
00288   const FT_Driver_ClassRec  class_;  
00289 
00290 #define FT_DEFINE_DRIVER(class_,                                             \
00291                          flags_, size_, name_, version_, requires_,          \
00292                          interface_, init_, done_, get_interface_,           \
00293                          face_object_size_, size_object_size_,               \
00294                          slot_object_size_, init_face_, done_face_,          \
00295                          init_size_, done_size_, init_slot_, done_slot_,     \
00296                          old_set_char_sizes_, old_set_pixel_sizes_,          \
00297                          load_glyph_, get_kerning_, attach_file_,            \
00298                          get_advances_, request_size_, select_size_ )        \
00299   FT_CALLBACK_TABLE_DEF                                                      \
00300   const FT_Driver_ClassRec class_ =                                          \
00301   {                                                                          \
00302     FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_,  \
00303                           init_,done_,get_interface_)                        \
00304                                                                              \
00305     face_object_size_,                                                       \
00306     size_object_size_,                                                       \
00307     slot_object_size_,                                                       \
00308                                                                              \
00309     init_face_,                                                              \
00310     done_face_,                                                              \
00311                                                                              \
00312     init_size_,                                                              \
00313     done_size_,                                                              \
00314                                                                              \
00315     init_slot_,                                                              \
00316     done_slot_,                                                              \
00317                                                                              \
00318     FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
00319                                                                              \
00320     load_glyph_,                                                             \
00321                                                                              \
00322     get_kerning_,                                                            \
00323     attach_file_,                                                            \
00324     get_advances_,                                                           \
00325                                                                              \
00326     request_size_,                                                           \
00327     select_size_                                                             \
00328   };
00329 
00330 #else /* FT_CONFIG_OPTION_PIC */ 
00331 
00332 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00333 #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
00334   clazz->set_char_sizes = a_; \
00335   clazz->set_pixel_sizes = b_;
00336 #else
00337   #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
00338 #endif
00339 
00340 #define FT_DECLARE_DRIVER(class_)    FT_DECLARE_MODULE(class_)
00341 
00342 #define FT_DEFINE_DRIVER(class_,                                             \
00343                          flags_, size_, name_, version_, requires_,          \
00344                          interface_, init_, done_, get_interface_,           \
00345                          face_object_size_, size_object_size_,               \
00346                          slot_object_size_, init_face_, done_face_,          \
00347                          init_size_, done_size_, init_slot_, done_slot_,     \
00348                          old_set_char_sizes_, old_set_pixel_sizes_,          \
00349                          load_glyph_, get_kerning_, attach_file_,            \
00350                          get_advances_, request_size_, select_size_ )        \
00351   void class_##_pic_free( FT_Library library );                              \
00352   FT_Error class_##_pic_init( FT_Library library );                          \
00353                                                                              \
00354   void                                                                       \
00355   FT_Destroy_Class_##class_( FT_Library        library,                      \
00356                              FT_Module_Class*  clazz )                       \
00357   {                                                                          \
00358     FT_Memory       memory = library->memory;                                \
00359     FT_Driver_Class dclazz = (FT_Driver_Class)clazz;                         \
00360     class_##_pic_free( library );                                            \
00361     if ( dclazz )                                                            \
00362       FT_FREE( dclazz );                                                     \
00363   }                                                                          \
00364                                                                              \
00365   FT_Error                                                                   \
00366   FT_Create_Class_##class_( FT_Library        library,                       \
00367                             FT_Module_Class**  output_class )                \
00368   {                                                                          \
00369     FT_Driver_Class  clazz;                                                  \
00370     FT_Error         error;                                                  \
00371     FT_Memory        memory = library->memory;                               \
00372                                                                              \
00373     if ( FT_ALLOC( clazz, sizeof(*clazz) ) )                                 \
00374       return error;                                                          \
00375                                                                              \
00376     error = class_##_pic_init( library );                                    \
00377     if(error)                                                                \
00378     {                                                                        \
00379       FT_FREE( clazz );                                                      \
00380       return error;                                                          \
00381     }                                                                        \
00382                                                                              \
00383     FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_,  \
00384                           init_,done_,get_interface_)                        \
00385                                                                              \
00386     clazz->face_object_size    = face_object_size_;                          \
00387     clazz->size_object_size    = size_object_size_;                          \
00388     clazz->slot_object_size    = slot_object_size_;                          \
00389                                                                              \
00390     clazz->init_face           = init_face_;                                 \
00391     clazz->done_face           = done_face_;                                 \
00392                                                                              \
00393     clazz->init_size           = init_size_;                                 \
00394     clazz->done_size           = done_size_;                                 \
00395                                                                              \
00396     clazz->init_slot           = init_slot_;                                 \
00397     clazz->done_slot           = done_slot_;                                 \
00398                                                                              \
00399     FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
00400                                                                              \
00401     clazz->load_glyph          = load_glyph_;                                \
00402                                                                              \
00403     clazz->get_kerning         = get_kerning_;                               \
00404     clazz->attach_file         = attach_file_;                               \
00405     clazz->get_advances        = get_advances_;                              \
00406                                                                              \
00407     clazz->request_size        = request_size_;                              \
00408     clazz->select_size         = select_size_;                               \
00409                                                                              \
00410     *output_class = (FT_Module_Class*)clazz;                                 \
00411     return FT_Err_Ok;                                                        \
00412   }                
00413 
00414 
00415 #endif /* FT_CONFIG_OPTION_PIC */
00416 
00417 FT_END_HEADER
00418 
00419 #endif /* __FTDRIVER_H__ */
00420 
00421 
00422 /* END */

Generated on Tue Jul 5 14:13:38 2011 for ROOT_528-00b_version by  doxygen 1.5.1