1 /***************************************************************************/
5 /* The FreeType position independent code services for sfnt module. */
7 /* Copyright 2009, 2010, 2012, 2013 by */
8 /* Oran Agra and Mickey Gabel. */
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. */
16 /***************************************************************************/
20 #include FT_FREETYPE_H
21 #include FT_INTERNAL_OBJECTS_H
26 #ifdef FT_CONFIG_OPTION_PIC
28 /* forward declaration of PIC init functions from sfdriver.c */
30 FT_Create_Class_sfnt_services( FT_Library library
,
31 FT_ServiceDescRec
** output_class
);
33 FT_Destroy_Class_sfnt_services( FT_Library library
,
34 FT_ServiceDescRec
* clazz
);
36 FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec
* clazz
);
38 FT_Init_Class_sfnt_interface( FT_Library library
,
39 SFNT_Interface
* clazz
);
41 FT_Init_Class_sfnt_service_glyph_dict(
43 FT_Service_GlyphDictRec
* clazz
);
45 FT_Init_Class_sfnt_service_ps_name(
47 FT_Service_PsFontNameRec
* clazz
);
49 FT_Init_Class_tt_service_get_cmap_info(
51 FT_Service_TTCMapsRec
* clazz
);
53 FT_Init_Class_sfnt_service_sfnt_table(
54 FT_Service_SFNT_TableRec
* clazz
);
57 /* forward declaration of PIC init functions from ttcmap.c */
59 FT_Create_Class_tt_cmap_classes( FT_Library library
,
60 TT_CMap_Class
** output_class
);
62 FT_Destroy_Class_tt_cmap_classes( FT_Library library
,
63 TT_CMap_Class
* clazz
);
67 sfnt_module_class_pic_free( FT_Library library
)
69 FT_PIC_Container
* pic_container
= &library
->pic_container
;
70 FT_Memory memory
= library
->memory
;
73 if ( pic_container
->sfnt
)
75 sfntModulePIC
* container
= (sfntModulePIC
*)pic_container
->sfnt
;
78 if ( container
->sfnt_services
)
79 FT_Destroy_Class_sfnt_services( library
,
80 container
->sfnt_services
);
81 container
->sfnt_services
= NULL
;
83 if ( container
->tt_cmap_classes
)
84 FT_Destroy_Class_tt_cmap_classes( library
,
85 container
->tt_cmap_classes
);
86 container
->tt_cmap_classes
= NULL
;
89 pic_container
->sfnt
= NULL
;
95 sfnt_module_class_pic_init( FT_Library library
)
97 FT_PIC_Container
* pic_container
= &library
->pic_container
;
98 FT_Error error
= FT_Err_Ok
;
99 sfntModulePIC
* container
= NULL
;
100 FT_Memory memory
= library
->memory
;
103 /* allocate pointer, clear and set global container pointer */
104 if ( FT_ALLOC( container
, sizeof ( *container
) ) )
106 FT_MEM_SET( container
, 0, sizeof ( *container
) );
107 pic_container
->sfnt
= container
;
109 /* initialize pointer table - */
110 /* this is how the module usually expects this data */
111 error
= FT_Create_Class_sfnt_services( library
,
112 &container
->sfnt_services
);
116 error
= FT_Create_Class_tt_cmap_classes( library
,
117 &container
->tt_cmap_classes
);
121 FT_Init_Class_sfnt_service_glyph_dict(
122 library
, &container
->sfnt_service_glyph_dict
);
123 FT_Init_Class_sfnt_service_ps_name(
124 library
, &container
->sfnt_service_ps_name
);
125 FT_Init_Class_tt_service_get_cmap_info(
126 library
, &container
->tt_service_get_cmap_info
);
127 FT_Init_Class_sfnt_service_sfnt_table(
128 &container
->sfnt_service_sfnt_table
);
129 #ifdef TT_CONFIG_OPTION_BDF
130 FT_Init_Class_sfnt_service_bdf( &container
->sfnt_service_bdf
);
132 FT_Init_Class_sfnt_interface( library
, &container
->sfnt_interface
);
136 sfnt_module_class_pic_free( library
);
140 #endif /* FT_CONFIG_OPTION_PIC */