1 | /**************************************************************************** |
2 | * |
3 | * pshmod.c |
4 | * |
5 | * FreeType PostScript hinter module implementation (body). |
6 | * |
7 | * Copyright (C) 2001-2019 by |
8 | * David Turner, Robert Wilhelm, and Werner Lemberg. |
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_INTERNAL_OBJECTS_H |
21 | #include "pshrec.h" |
22 | #include "pshalgo.h" |
23 | |
24 | |
25 | /* the Postscript Hinter module structure */ |
26 | typedef struct PS_Hinter_Module_Rec_ |
27 | { |
28 | FT_ModuleRec root; |
29 | PS_HintsRec ps_hints; |
30 | |
31 | PSH_Globals_FuncsRec globals_funcs; |
32 | T1_Hints_FuncsRec t1_funcs; |
33 | T2_Hints_FuncsRec t2_funcs; |
34 | |
35 | } PS_Hinter_ModuleRec, *PS_Hinter_Module; |
36 | |
37 | |
38 | /* finalize module */ |
39 | FT_CALLBACK_DEF( void ) |
40 | ps_hinter_done( PS_Hinter_Module module ) |
41 | { |
42 | module->t1_funcs.hints = NULL; |
43 | module->t2_funcs.hints = NULL; |
44 | |
45 | ps_hints_done( &module->ps_hints ); |
46 | } |
47 | |
48 | |
49 | /* initialize module, create hints recorder and the interface */ |
50 | FT_CALLBACK_DEF( FT_Error ) |
51 | ps_hinter_init( PS_Hinter_Module module ) |
52 | { |
53 | FT_Memory memory = module->root.memory; |
54 | void* ph = &module->ps_hints; |
55 | |
56 | |
57 | ps_hints_init( &module->ps_hints, memory ); |
58 | |
59 | psh_globals_funcs_init( &module->globals_funcs ); |
60 | |
61 | t1_hints_funcs_init( &module->t1_funcs ); |
62 | module->t1_funcs.hints = (T1_Hints)ph; |
63 | |
64 | t2_hints_funcs_init( &module->t2_funcs ); |
65 | module->t2_funcs.hints = (T2_Hints)ph; |
66 | |
67 | return 0; |
68 | } |
69 | |
70 | |
71 | /* returns global hints interface */ |
72 | FT_CALLBACK_DEF( PSH_Globals_Funcs ) |
73 | pshinter_get_globals_funcs( FT_Module module ) |
74 | { |
75 | return &((PS_Hinter_Module)module)->globals_funcs; |
76 | } |
77 | |
78 | |
79 | /* return Type 1 hints interface */ |
80 | FT_CALLBACK_DEF( T1_Hints_Funcs ) |
81 | pshinter_get_t1_funcs( FT_Module module ) |
82 | { |
83 | return &((PS_Hinter_Module)module)->t1_funcs; |
84 | } |
85 | |
86 | |
87 | /* return Type 2 hints interface */ |
88 | FT_CALLBACK_DEF( T2_Hints_Funcs ) |
89 | pshinter_get_t2_funcs( FT_Module module ) |
90 | { |
91 | return &((PS_Hinter_Module)module)->t2_funcs; |
92 | } |
93 | |
94 | |
95 | FT_DEFINE_PSHINTER_INTERFACE( |
96 | pshinter_interface, |
97 | |
98 | pshinter_get_globals_funcs, |
99 | pshinter_get_t1_funcs, |
100 | pshinter_get_t2_funcs |
101 | ) |
102 | |
103 | |
104 | FT_DEFINE_MODULE( |
105 | pshinter_module_class, |
106 | |
107 | 0, |
108 | sizeof ( PS_Hinter_ModuleRec ), |
109 | "pshinter" , |
110 | 0x10000L, |
111 | 0x20000L, |
112 | |
113 | &pshinter_interface, /* module-specific interface */ |
114 | |
115 | (FT_Module_Constructor)ps_hinter_init, /* module_init */ |
116 | (FT_Module_Destructor) ps_hinter_done, /* module_done */ |
117 | (FT_Module_Requester) NULL /* get_interface */ |
118 | ) |
119 | |
120 | /* END */ |
121 | |