Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  ftdriver.h                                                              */
  4. /*                                                                         */
  5. /*    FreeType font driver interface (specification).                      */
  6. /*                                                                         */
  7. /*  Copyright 1996-2001, 2002, 2003, 2006, 2008 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 __FTDRIVER_H__
  20. #define __FTDRIVER_H__
  21.  
  22.  
  23. #include <ft2build.h>
  24. #include FT_MODULE_H
  25.  
  26.  
  27. FT_BEGIN_HEADER
  28.  
  29.  
  30.   typedef FT_Error
  31.   (*FT_Face_InitFunc)( FT_Stream      stream,
  32.                        FT_Face        face,
  33.                        FT_Int         typeface_index,
  34.                        FT_Int         num_params,
  35.                        FT_Parameter*  parameters );
  36.  
  37.   typedef void
  38.   (*FT_Face_DoneFunc)( FT_Face  face );
  39.  
  40.  
  41.   typedef FT_Error
  42.   (*FT_Size_InitFunc)( FT_Size  size );
  43.  
  44.   typedef void
  45.   (*FT_Size_DoneFunc)( FT_Size  size );
  46.  
  47.  
  48.   typedef FT_Error
  49.   (*FT_Slot_InitFunc)( FT_GlyphSlot  slot );
  50.  
  51.   typedef void
  52.   (*FT_Slot_DoneFunc)( FT_GlyphSlot  slot );
  53.  
  54.  
  55.   typedef FT_Error
  56.   (*FT_Size_RequestFunc)( FT_Size          size,
  57.                           FT_Size_Request  req );
  58.  
  59.   typedef FT_Error
  60.   (*FT_Size_SelectFunc)( FT_Size   size,
  61.                          FT_ULong  size_index );
  62.  
  63. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  64.  
  65.   typedef FT_Error
  66.   (*FT_Size_ResetPointsFunc)( FT_Size     size,
  67.                               FT_F26Dot6  char_width,
  68.                               FT_F26Dot6  char_height,
  69.                               FT_UInt     horz_resolution,
  70.                               FT_UInt     vert_resolution );
  71.  
  72.   typedef FT_Error
  73.   (*FT_Size_ResetPixelsFunc)( FT_Size  size,
  74.                               FT_UInt  pixel_width,
  75.                               FT_UInt  pixel_height );
  76.  
  77. #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
  78.  
  79.   typedef FT_Error
  80.   (*FT_Slot_LoadFunc)( FT_GlyphSlot  slot,
  81.                        FT_Size       size,
  82.                        FT_UInt       glyph_index,
  83.                        FT_Int32      load_flags );
  84.  
  85.  
  86.   typedef FT_UInt
  87.   (*FT_CharMap_CharIndexFunc)( FT_CharMap  charmap,
  88.                                FT_Long     charcode );
  89.  
  90.   typedef FT_Long
  91.   (*FT_CharMap_CharNextFunc)( FT_CharMap  charmap,
  92.                               FT_Long     charcode );
  93.  
  94.  
  95.   typedef FT_Error
  96.   (*FT_Face_GetKerningFunc)( FT_Face     face,
  97.                              FT_UInt     left_glyph,
  98.                              FT_UInt     right_glyph,
  99.                              FT_Vector*  kerning );
  100.  
  101.  
  102.   typedef FT_Error
  103.   (*FT_Face_AttachFunc)( FT_Face    face,
  104.                          FT_Stream  stream );
  105.  
  106.  
  107.   typedef FT_Error
  108.   (*FT_Face_GetAdvancesFunc)( FT_Face    face,
  109.                               FT_UInt    first,
  110.                               FT_UInt    count,
  111.                               FT_Int32   flags,
  112.                               FT_Fixed*  advances );
  113.  
  114.  
  115.   /*************************************************************************/
  116.   /*                                                                       */
  117.   /* <Struct>                                                              */
  118.   /*    FT_Driver_ClassRec                                                 */
  119.   /*                                                                       */
  120.   /* <Description>                                                         */
  121.   /*    The font driver class.  This structure mostly contains pointers to */
  122.   /*    driver methods.                                                    */
  123.   /*                                                                       */
  124.   /* <Fields>                                                              */
  125.   /*    root             :: The parent module.                             */
  126.   /*                                                                       */
  127.   /*    face_object_size :: The size of a face object in bytes.            */
  128.   /*                                                                       */
  129.   /*    size_object_size :: The size of a size object in bytes.            */
  130.   /*                                                                       */
  131.   /*    slot_object_size :: The size of a glyph object in bytes.           */
  132.   /*                                                                       */
  133.   /*    init_face        :: The format-specific face constructor.          */
  134.   /*                                                                       */
  135.   /*    done_face        :: The format-specific face destructor.           */
  136.   /*                                                                       */
  137.   /*    init_size        :: The format-specific size constructor.          */
  138.   /*                                                                       */
  139.   /*    done_size        :: The format-specific size destructor.           */
  140.   /*                                                                       */
  141.   /*    init_slot        :: The format-specific slot constructor.          */
  142.   /*                                                                       */
  143.   /*    done_slot        :: The format-specific slot destructor.           */
  144.   /*                                                                       */
  145.   /*                                                                       */
  146.   /*    load_glyph       :: A function handle to load a glyph to a slot.   */
  147.   /*                        This field is mandatory!                       */
  148.   /*                                                                       */
  149.   /*    get_kerning      :: A function handle to return the unscaled       */
  150.   /*                        kerning for a given pair of glyphs.  Can be    */
  151.   /*                        set to 0 if the format doesn't support         */
  152.   /*                        kerning.                                       */
  153.   /*                                                                       */
  154.   /*    attach_file      :: This function handle is used to read           */
  155.   /*                        additional data for a face from another        */
  156.   /*                        file/stream.  For example, this can be used to */
  157.   /*                        add data from AFM or PFM files on a Type 1     */
  158.   /*                        face, or a CIDMap on a CID-keyed face.         */
  159.   /*                                                                       */
  160.   /*    get_advances     :: A function handle used to return advance       */
  161.   /*                        widths of `count' glyphs (in font units),      */
  162.   /*                        starting at `first'.  The `vertical' flag must */
  163.   /*                        be set to get vertical advance heights.  The   */
  164.   /*                        `advances' buffer is caller-allocated.         */
  165.   /*                        Currently not implemented.  The idea of this   */
  166.   /*                        function is to be able to perform              */
  167.   /*                        device-independent text layout without loading */
  168.   /*                        a single glyph image.                          */
  169.   /*                                                                       */
  170.   /*    request_size     :: A handle to a function used to request the new */
  171.   /*                        character size.  Can be set to 0 if the        */
  172.   /*                        scaling done in the base layer suffices.       */
  173.   /*                                                                       */
  174.   /*    select_size      :: A handle to a function used to select a new    */
  175.   /*                        fixed size.  It is used only if                */
  176.   /*                        @FT_FACE_FLAG_FIXED_SIZES is set.  Can be set  */
  177.   /*                        to 0 if the scaling done in the base layer     */
  178.   /*                        suffices.                                      */
  179.   /* <Note>                                                                */
  180.   /*    Most function pointers, with the exception of `load_glyph', can be */
  181.   /*    set to 0 to indicate a default behaviour.                          */
  182.   /*                                                                       */
  183.   typedef struct  FT_Driver_ClassRec_
  184.   {
  185.     FT_Module_Class           root;
  186.  
  187.     FT_Long                   face_object_size;
  188.     FT_Long                   size_object_size;
  189.     FT_Long                   slot_object_size;
  190.  
  191.     FT_Face_InitFunc          init_face;
  192.     FT_Face_DoneFunc          done_face;
  193.  
  194.     FT_Size_InitFunc          init_size;
  195.     FT_Size_DoneFunc          done_size;
  196.  
  197.     FT_Slot_InitFunc          init_slot;
  198.     FT_Slot_DoneFunc          done_slot;
  199.  
  200. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  201.  
  202.     FT_Size_ResetPointsFunc   set_char_sizes;
  203.     FT_Size_ResetPixelsFunc   set_pixel_sizes;
  204.  
  205. #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
  206.  
  207.     FT_Slot_LoadFunc          load_glyph;
  208.  
  209.     FT_Face_GetKerningFunc    get_kerning;
  210.     FT_Face_AttachFunc        attach_file;
  211.     FT_Face_GetAdvancesFunc   get_advances;
  212.  
  213.     /* since version 2.2 */
  214.     FT_Size_RequestFunc       request_size;
  215.     FT_Size_SelectFunc        select_size;
  216.  
  217.   } FT_Driver_ClassRec, *FT_Driver_Class;
  218.  
  219.  
  220.   /*
  221.    *  The following functions are used as stubs for `set_char_sizes' and
  222.    *  `set_pixel_sizes'; the code uses `request_size' and `select_size'
  223.    *  functions instead.
  224.    *
  225.    *  Implementation is in `src/base/ftobjs.c'.
  226.    */
  227. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  228.  
  229.   FT_BASE( FT_Error )
  230.   ft_stub_set_char_sizes( FT_Size     size,
  231.                           FT_F26Dot6  width,
  232.                           FT_F26Dot6  height,
  233.                           FT_UInt     horz_res,
  234.                           FT_UInt     vert_res );
  235.  
  236.   FT_BASE( FT_Error )
  237.   ft_stub_set_pixel_sizes( FT_Size  size,
  238.                            FT_UInt  width,
  239.                            FT_UInt  height );
  240.  
  241. #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
  242.  
  243.   /*************************************************************************/
  244.   /*                                                                       */
  245.   /* <Macro>                                                               */
  246.   /*    FT_DECLARE_DRIVER                                                  */
  247.   /*                                                                       */
  248.   /* <Description>                                                         */
  249.   /*    Used to create a forward declaration of a                          */
  250.   /*    FT_Driver_ClassRec stract instance.                                */
  251.   /*                                                                       */
  252.   /* <Macro>                                                               */
  253.   /*    FT_DEFINE_DRIVER                                                   */
  254.   /*                                                                       */
  255.   /* <Description>                                                         */
  256.   /*    Used to initialize an instance of FT_Driver_ClassRec struct.       */
  257.   /*                                                                       */
  258.   /*    When FT_CONFIG_OPTION_PIC is defined a Create funtion will need    */
  259.   /*    to called with a pointer where the allocated stracture is returned.*/
  260.   /*    And when it is no longer needed a Destroy function needs           */
  261.   /*    to be called to release that allocation.                           */
  262.   /*    fcinit.c (ft_create_default_module_classes) already contains       */
  263.   /*    a mechanism to call these functions for the default modules        */
  264.   /*    described in ftmodule.h                                            */
  265.   /*                                                                       */
  266.   /*    Notice that the created Create and Destroy functions call          */
  267.   /*    pic_init and pic_free function to allow you to manually allocate   */
  268.   /*    and initialize any additional global data, like module specific    */
  269.   /*    interface, and put them in the global pic container defined in     */
  270.   /*    ftpic.h. if you don't need them just implement the functions as    */
  271.   /*    empty to resolve the link error.                                   */
  272.   /*                                                                       */
  273.   /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
  274.   /*    allocated in the global scope (or the scope where the macro        */
  275.   /*    is used).                                                          */
  276.   /*                                                                       */
  277. #ifndef FT_CONFIG_OPTION_PIC
  278.  
  279. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  280. #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
  281.   a_, b_,
  282. #else
  283.   #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
  284. #endif
  285.  
  286. #define FT_DECLARE_DRIVER(class_)    \
  287.   FT_CALLBACK_TABLE                  \
  288.   const FT_Driver_ClassRec  class_;  
  289.  
  290. #define FT_DEFINE_DRIVER(class_,                                             \
  291.                          flags_, size_, name_, version_, requires_,          \
  292.                          interface_, init_, done_, get_interface_,           \
  293.                          face_object_size_, size_object_size_,               \
  294.                          slot_object_size_, init_face_, done_face_,          \
  295.                          init_size_, done_size_, init_slot_, done_slot_,     \
  296.                          old_set_char_sizes_, old_set_pixel_sizes_,          \
  297.                          load_glyph_, get_kerning_, attach_file_,            \
  298.                          get_advances_, request_size_, select_size_ )        \
  299.   FT_CALLBACK_TABLE_DEF                                                      \
  300.   const FT_Driver_ClassRec class_ =                                          \
  301.   {                                                                          \
  302.     FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_,  \
  303.                           init_,done_,get_interface_)                        \
  304.                                                                              \
  305.     face_object_size_,                                                       \
  306.     size_object_size_,                                                       \
  307.     slot_object_size_,                                                       \
  308.                                                                              \
  309.     init_face_,                                                              \
  310.     done_face_,                                                              \
  311.                                                                              \
  312.     init_size_,                                                              \
  313.     done_size_,                                                              \
  314.                                                                              \
  315.     init_slot_,                                                              \
  316.     done_slot_,                                                              \
  317.                                                                              \
  318.     FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
  319.                                                                              \
  320.     load_glyph_,                                                             \
  321.                                                                              \
  322.     get_kerning_,                                                            \
  323.     attach_file_,                                                            \
  324.     get_advances_,                                                           \
  325.                                                                              \
  326.     request_size_,                                                           \
  327.     select_size_                                                             \
  328.   };
  329.  
  330. #else /* FT_CONFIG_OPTION_PIC */
  331.  
  332. #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
  333. #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
  334.   clazz->set_char_sizes = a_; \
  335.   clazz->set_pixel_sizes = b_;
  336. #else
  337.   #define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
  338. #endif
  339.  
  340. #define FT_DECLARE_DRIVER(class_)    FT_DECLARE_MODULE(class_)
  341.  
  342. #define FT_DEFINE_DRIVER(class_,                                             \
  343.                          flags_, size_, name_, version_, requires_,          \
  344.                          interface_, init_, done_, get_interface_,           \
  345.                          face_object_size_, size_object_size_,               \
  346.                          slot_object_size_, init_face_, done_face_,          \
  347.                          init_size_, done_size_, init_slot_, done_slot_,     \
  348.                          old_set_char_sizes_, old_set_pixel_sizes_,          \
  349.                          load_glyph_, get_kerning_, attach_file_,            \
  350.                          get_advances_, request_size_, select_size_ )        \
  351.   void class_##_pic_free( FT_Library library );                              \
  352.   FT_Error class_##_pic_init( FT_Library library );                          \
  353.                                                                              \
  354.   void                                                                       \
  355.   FT_Destroy_Class_##class_( FT_Library        library,                      \
  356.                              FT_Module_Class*  clazz )                       \
  357.   {                                                                          \
  358.     FT_Memory       memory = library->memory;                                \
  359.     FT_Driver_Class dclazz = (FT_Driver_Class)clazz;                         \
  360.     class_##_pic_free( library );                                            \
  361.     if ( dclazz )                                                            \
  362.       FT_FREE( dclazz );                                                     \
  363.   }                                                                          \
  364.                                                                              \
  365.   FT_Error                                                                   \
  366.   FT_Create_Class_##class_( FT_Library        library,                       \
  367.                             FT_Module_Class**  output_class )                \
  368.   {                                                                          \
  369.     FT_Driver_Class  clazz;                                                  \
  370.     FT_Error         error;                                                  \
  371.     FT_Memory        memory = library->memory;                               \
  372.                                                                              \
  373.     if ( FT_ALLOC( clazz, sizeof(*clazz) ) )                                 \
  374.       return error;                                                          \
  375.                                                                              \
  376.     error = class_##_pic_init( library );                                    \
  377.     if(error)                                                                \
  378.     {                                                                        \
  379.       FT_FREE( clazz );                                                      \
  380.       return error;                                                          \
  381.     }                                                                        \
  382.                                                                              \
  383.     FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_,  \
  384.                           init_,done_,get_interface_)                        \
  385.                                                                              \
  386.     clazz->face_object_size    = face_object_size_;                          \
  387.     clazz->size_object_size    = size_object_size_;                          \
  388.     clazz->slot_object_size    = slot_object_size_;                          \
  389.                                                                              \
  390.     clazz->init_face           = init_face_;                                 \
  391.     clazz->done_face           = done_face_;                                 \
  392.                                                                              \
  393.     clazz->init_size           = init_size_;                                 \
  394.     clazz->done_size           = done_size_;                                 \
  395.                                                                              \
  396.     clazz->init_slot           = init_slot_;                                 \
  397.     clazz->done_slot           = done_slot_;                                 \
  398.                                                                              \
  399.     FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
  400.                                                                              \
  401.     clazz->load_glyph          = load_glyph_;                                \
  402.                                                                              \
  403.     clazz->get_kerning         = get_kerning_;                               \
  404.     clazz->attach_file         = attach_file_;                               \
  405.     clazz->get_advances        = get_advances_;                              \
  406.                                                                              \
  407.     clazz->request_size        = request_size_;                              \
  408.     clazz->select_size         = select_size_;                               \
  409.                                                                              \
  410.     *output_class = (FT_Module_Class*)clazz;                                 \
  411.     return FT_Err_Ok;                                                        \
  412.   }                
  413.  
  414.  
  415. #endif /* FT_CONFIG_OPTION_PIC */
  416.  
  417. FT_END_HEADER
  418.  
  419. #endif /* __FTDRIVER_H__ */
  420.  
  421.  
  422. /* END */
  423.