OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* ttpic.c */ | |
4 /* */ | |
5 /* The FreeType position independent code services for truetype module. */ | |
6 /* */ | |
7 /* Copyright 2009, 2010, 2012, 2013 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 "../../include/ft2build.h" | |
20 #include "../../include/freetype/freetype.h" | |
21 #include "../../include/freetype/internal/ftobjs.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 */ | |
OLD | NEW |