Home | History | Annotate | Download | only in truetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ttpic.c                                                                */
      4 /*                                                                         */
      5 /*    The FreeType position independent code services for truetype module. */
      6 /*                                                                         */
      7 /*  Copyright 2009-2018 by                                                 */
      8 /*  Oran Agra and Mickey Gabel.                                            */
      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_FREETYPE_H
     21 #include FT_INTERNAL_OBJECTS_H
     22 #include "ttpic.h"
     23 #include "tterrors.h"
     24 
     25 
     26 #ifdef FT_CONFIG_OPTION_PIC
     27 
     28   /* forward declaration of PIC init functions from ttdriver.c */
     29   FT_Error
     30   FT_Create_Class_tt_services( FT_Library           library,
     31                                FT_ServiceDescRec**  output_class );
     32   void
     33   FT_Destroy_Class_tt_services( FT_Library          library,
     34                                 FT_ServiceDescRec*  clazz );
     35   void
     36   FT_Init_Class_tt_service_gx_multi_masters(
     37     FT_Service_MultiMastersRec*  sv_mm );
     38   void
     39   FT_Init_Class_tt_service_truetype_glyf(
     40     FT_Service_TTGlyfRec*  sv_ttglyf );
     41 
     42 
     43   void
     44   tt_driver_class_pic_free( FT_Library  library )
     45   {
     46     FT_PIC_Container*  pic_container = &library->pic_container;
     47     FT_Memory          memory        = library->memory;
     48 
     49 
     50     if ( pic_container->truetype )
     51     {
     52       TTModulePIC*  container = (TTModulePIC*)pic_container->truetype;
     53 
     54 
     55       if ( container->tt_services )
     56         FT_Destroy_Class_tt_services( library, container->tt_services );
     57       container->tt_services = NULL;
     58       FT_FREE( container );
     59       pic_container->truetype = NULL;
     60     }
     61   }
     62 
     63 
     64   FT_Error
     65   tt_driver_class_pic_init( FT_Library  library )
     66   {
     67     FT_PIC_Container*  pic_container = &library->pic_container;
     68     FT_Error           error         = FT_Err_Ok;
     69     TTModulePIC*       container     = NULL;
     70     FT_Memory          memory        = library->memory;
     71 
     72 
     73     /* allocate pointer, clear and set global container pointer */
     74     if ( FT_ALLOC( container, sizeof ( *container ) ) )
     75       return error;
     76     FT_MEM_SET( container, 0, sizeof ( *container ) );
     77     pic_container->truetype = container;
     78 
     79     /* initialize pointer table - this is how the module usually */
     80     /* expects this data                                         */
     81     error = FT_Create_Class_tt_services( library,
     82                                          &container->tt_services );
     83     if ( error )
     84       goto Exit;
     85 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
     86     FT_Init_Class_tt_service_gx_multi_masters(
     87       &container->tt_service_gx_multi_masters );
     88 #endif
     89     FT_Init_Class_tt_service_truetype_glyf(
     90       &container->tt_service_truetype_glyf );
     91 
     92   Exit:
     93     if ( error )
     94       tt_driver_class_pic_free( library );
     95     return error;
     96   }
     97 
     98 #endif /* FT_CONFIG_OPTION_PIC */
     99 
    100 
    101 /* END */
    102