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 | |