• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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*  clazz );
28   void FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class*  clazz );
29 
30   /* forward declaration of PIC init function from ftrfork.c (not modularized) */
31   void FT_Init_Table_raccess_guess_table( ft_raccess_guess_rec*  record );
32 
33   /* forward declaration of PIC init functions from ftinit.c */
34   FT_Error
35   ft_create_default_module_classes( FT_Library  library );
36 
37   void
38   ft_destroy_default_module_classes( FT_Library  library );
39 
40   void
ft_base_pic_free(FT_Library library)41   ft_base_pic_free( FT_Library  library )
42   {
43     FT_PIC_Container*  pic_container = &library->pic_container;
44     FT_Memory          memory = library->memory;
45     if ( pic_container->base )
46     {
47       /* Destroy default module classes (in case FT_Add_Default_Modules was used) */
48       ft_destroy_default_module_classes( library );
49 
50       FT_FREE( pic_container->base );
51       pic_container->base = NULL;
52     }
53   }
54 
55 
56   FT_Error
ft_base_pic_init(FT_Library library)57   ft_base_pic_init( FT_Library  library )
58   {
59     FT_PIC_Container*  pic_container = &library->pic_container;
60     FT_Error           error = FT_Err_Ok;
61     BasePIC*           container;
62     FT_Memory          memory = library->memory;
63 
64     /* allocate pointer, clear and set global container pointer */
65     if ( FT_ALLOC ( container, sizeof ( *container ) ) )
66       return error;
67     FT_MEM_SET( container, 0, sizeof ( *container ) );
68     pic_container->base = container;
69 
70     /* initialize default modules list and pointers */
71     error = ft_create_default_module_classes( library );
72     if ( error )
73       goto Exit;
74 
75     /* initialize pointer table - this is how the module usually expects this data */
76     FT_Init_Class_ft_outline_glyph_class(
77       &container->ft_outline_glyph_class );
78     FT_Init_Class_ft_bitmap_glyph_class(
79       &container->ft_bitmap_glyph_class );
80     FT_Init_Table_raccess_guess_table(
81       (ft_raccess_guess_rec*)&container->ft_raccess_guess_table);
82 
83 Exit:
84     if( error )
85       ft_base_pic_free( library );
86     return error;
87   }
88 
89 
90 #endif /* FT_CONFIG_OPTION_PIC */
91 
92 
93 /* END */
94