Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  pshmod.c                                                               */
  4. /*                                                                         */
  5. /*    FreeType PostScript hinter module implementation (body).             */
  6. /*                                                                         */
  7. /*  Copyright 2001, 2002, 2007, 2009, 2012 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. #include <ft2build.h>
  20. #include FT_INTERNAL_OBJECTS_H
  21. #include "pshrec.h"
  22. #include "pshalgo.h"
  23. #include "pshpic.h"
  24.  
  25.  
  26.   /* the Postscript Hinter module structure */
  27.   typedef struct  PS_Hinter_Module_Rec_
  28.   {
  29.     FT_ModuleRec          root;
  30.     PS_HintsRec           ps_hints;
  31.  
  32.     PSH_Globals_FuncsRec  globals_funcs;
  33.     T1_Hints_FuncsRec     t1_funcs;
  34.     T2_Hints_FuncsRec     t2_funcs;
  35.  
  36.   } PS_Hinter_ModuleRec, *PS_Hinter_Module;
  37.  
  38.  
  39.   /* finalize module */
  40.   FT_CALLBACK_DEF( void )
  41.   ps_hinter_done( PS_Hinter_Module  module )
  42.   {
  43.     module->t1_funcs.hints = NULL;
  44.     module->t2_funcs.hints = NULL;
  45.  
  46.     ps_hints_done( &module->ps_hints );
  47.   }
  48.  
  49.  
  50.   /* initialize module, create hints recorder and the interface */
  51.   FT_CALLBACK_DEF( FT_Error )
  52.   ps_hinter_init( PS_Hinter_Module  module )
  53.   {
  54.     FT_Memory  memory = module->root.memory;
  55.     void*      ph     = &module->ps_hints;
  56.  
  57.  
  58.     ps_hints_init( &module->ps_hints, memory );
  59.  
  60.     psh_globals_funcs_init( &module->globals_funcs );
  61.  
  62.     t1_hints_funcs_init( &module->t1_funcs );
  63.     module->t1_funcs.hints = (T1_Hints)ph;
  64.  
  65.     t2_hints_funcs_init( &module->t2_funcs );
  66.     module->t2_funcs.hints = (T2_Hints)ph;
  67.  
  68.     return 0;
  69.   }
  70.  
  71.  
  72.   /* returns global hints interface */
  73.   FT_CALLBACK_DEF( PSH_Globals_Funcs )
  74.   pshinter_get_globals_funcs( FT_Module  module )
  75.   {
  76.     return &((PS_Hinter_Module)module)->globals_funcs;
  77.   }
  78.  
  79.  
  80.   /* return Type 1 hints interface */
  81.   FT_CALLBACK_DEF( T1_Hints_Funcs )
  82.   pshinter_get_t1_funcs( FT_Module  module )
  83.   {
  84.     return &((PS_Hinter_Module)module)->t1_funcs;
  85.   }
  86.  
  87.  
  88.   /* return Type 2 hints interface */
  89.   FT_CALLBACK_DEF( T2_Hints_Funcs )
  90.   pshinter_get_t2_funcs( FT_Module  module )
  91.   {
  92.     return &((PS_Hinter_Module)module)->t2_funcs;
  93.   }
  94.  
  95.  
  96.   FT_DEFINE_PSHINTER_INTERFACE(
  97.     pshinter_interface,
  98.     pshinter_get_globals_funcs,
  99.     pshinter_get_t1_funcs,
  100.     pshinter_get_t2_funcs )
  101.  
  102.  
  103.   FT_DEFINE_MODULE(
  104.     pshinter_module_class,
  105.  
  106.     0,
  107.     sizeof ( PS_Hinter_ModuleRec ),
  108.     "pshinter",
  109.     0x10000L,
  110.     0x20000L,
  111.  
  112.     &PSHINTER_INTERFACE_GET,              /* module-specific interface */
  113.  
  114.     (FT_Module_Constructor)ps_hinter_init,
  115.     (FT_Module_Destructor) ps_hinter_done,
  116.     (FT_Module_Requester)  NULL )   /* no additional interface for now */
  117.  
  118.  
  119. /* END */
  120.