Home | History | Annotate | Download | only in base
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  basepic.c                                                              */
      4 /*                                                                         */
      5 /*    The FreeType position independent code services for base.            */
      6 /*                                                                         */
      7 /*  Copyright 2009 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 "basepic.h"
     23 
     24 #ifdef FT_CONFIG_OPTION_PIC
     25 
     26   /* forward declaration of PIC init functions from ftglyph.c */
     27   void FT_Init_Class_ft_outline_glyph_class(FT_Glyph_Class*);
     28   void FT_Init_Class_ft_bitmap_glyph_class(FT_Glyph_Class*);
     29 
     30   /* forward declaration of PIC init functions from ftinit.c */
     31   FT_Error ft_create_default_module_classes(FT_Library);
     32   void ft_destroy_default_module_classes(FT_Library);
     33 
     34   void
     35   ft_base_pic_free( FT_Library library )
     36   {
     37     FT_PIC_Container* pic_container = &library->pic_container;
     38     FT_Memory    memory = library->memory;
     39     if ( pic_container->base )
     40     {
     41       /* Destroy default module classes (in case FT_Add_Default_Modules was used) */
     42       ft_destroy_default_module_classes( library );
     43 
     44       FT_FREE( pic_container->base );
     45       pic_container->base = NULL;
     46     }
     47   }
     48 
     49 
     50   FT_Error
     51   ft_base_pic_init( FT_Library library )
     52   {
     53     FT_PIC_Container* pic_container = &library->pic_container;
     54     FT_Error        error = FT_Err_Ok;
     55     BasePIC*     container;
     56     FT_Memory    memory = library->memory;
     57 
     58     /* allocate pointer, clear and set global container pointer */
     59     if ( FT_ALLOC ( container, sizeof ( *container ) ) )
     60       return error;
     61     FT_MEM_SET( container, 0, sizeof(*container) );
     62     pic_container->base = container;
     63 
     64     /* initialize default modules list and pointers */
     65     error = ft_create_default_module_classes( library );
     66     if ( error )
     67       goto Exit;
     68 
     69     /* initialize pointer table - this is how the module usually expects this data */
     70     FT_Init_Class_ft_outline_glyph_class(&container->ft_outline_glyph_class);
     71     FT_Init_Class_ft_bitmap_glyph_class(&container->ft_bitmap_glyph_class);
     72 
     73 Exit:
     74     if(error)
     75       ft_base_pic_free(library);
     76     return error;
     77   }
     78 
     79 
     80 #endif /* FT_CONFIG_OPTION_PIC */
     81 
     82 
     83 /* END */
     84