]> git.saurik.com Git - wxWidgets.git/blob - src/freetype/base/ftinit.c
another attempt to fix wxPanel/wxFrame::m_winLastFocused handling
[wxWidgets.git] / src / freetype / base / ftinit.c
1 /***************************************************************************/
2 /* */
3 /* ftinit.c */
4 /* */
5 /* FreeType initialization layer (body). */
6 /* */
7 /* Copyright 1996-2000 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 /* */
20 /* The purpose of this file is to implement the following two */
21 /* functions: */
22 /* */
23 /* FT_Add_Default_Modules(): */
24 /* This function is used to add the set of default modules to a */
25 /* fresh new library object. The set is taken from the header file */
26 /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */
27 /* Build System' for more information. */
28 /* */
29 /* FT_Init_FreeType(): */
30 /* This function creates a system object for the current platform, */
31 /* builds a library out of it, then calls FT_Default_Drivers(). */
32 /* */
33 /* Note that even if FT_Init_FreeType() uses the implementation of the */
34 /* system object defined at build time, client applications are still */
35 /* able to provide their own `ftsystem.c'. */
36 /* */
37 /*************************************************************************/
38
39
40 #include <freetype/config/ftconfig.h>
41 #include <freetype/internal/ftobjs.h>
42 #include <freetype/internal/ftdebug.h>
43 #include <freetype/ftmodule.h>
44
45
46 /*************************************************************************/
47 /* */
48 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
49 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
50 /* messages during execution. */
51 /* */
52 #undef FT_COMPONENT
53 #define FT_COMPONENT trace_init
54
55 #undef FT_USE_MODULE
56 #define FT_USE_MODULE( x ) extern const FT_Module_Class* x;
57
58 #ifdef macintosh
59 FT_USE_MODULE(fond_driver_class)
60 #endif
61 #include <freetype/config/ftmodule.h>
62
63 #undef FT_USE_MODULE
64 #define FT_USE_MODULE( x ) (const FT_Module_Class*)&x,
65
66 static
67 const FT_Module_Class* ft_default_modules[] =
68 {
69 #ifdef macintosh
70 FT_USE_MODULE(fond_driver_class)
71 #endif
72 #include <freetype/config/ftmodule.h>
73 0
74 };
75
76
77 /*************************************************************************/
78 /* */
79 /* <Function> */
80 /* FT_Add_Default_Modules */
81 /* */
82 /* <Description> */
83 /* Adds the set of default drivers to a given library object. */
84 /* This is only useful when you create a library object with */
85 /* FT_New_Library() (usually to plug a custom memory manager). */
86 /* */
87 /* <InOut> */
88 /* library :: A handle to a new library object. */
89 /* */
90 FT_EXPORT_FUNC( void ) FT_Add_Default_Modules( FT_Library library )
91 {
92 FT_Error error;
93 const FT_Module_Class** cur;
94
95
96 /* test for valid `library' delayed to FT_Add_Module() */
97
98 cur = ft_default_modules;
99 while ( *cur )
100 {
101 error = FT_Add_Module( library, *cur );
102 /* notify errors, but don't stop */
103 if ( error )
104 {
105 FT_ERROR(( "FT_Add_Default_Module: Cannot install `%s', error = %x\n",
106 (*cur)->module_name, error ));
107 }
108 cur++;
109 }
110 }
111
112
113 /*************************************************************************/
114 /* */
115 /* <Function> */
116 /* FT_Init_FreeType */
117 /* */
118 /* <Description> */
119 /* Initializes a new FreeType library object. The set of drivers */
120 /* that are registered by this function is determined at build time. */
121 /* */
122 /* <Output> */
123 /* library :: A handle to a new library object. */
124 /* */
125 /* <Return> */
126 /* FreeType error code. 0 means success. */
127 /* */
128 FT_EXPORT_FUNC( FT_Error ) FT_Init_FreeType( FT_Library* library )
129 {
130 FT_Error error;
131 FT_Memory memory;
132
133
134 /* First of all, allocate a new system object -- this function is part */
135 /* of the system-specific component, i.e. `ftsystem.c'. */
136
137 memory = FT_New_Memory();
138 if ( !memory )
139 {
140 FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
141 return FT_Err_Unimplemented_Feature;
142 }
143
144 /* build a library out of it, then fill it with the set of */
145 /* default drivers. */
146
147 error = FT_New_Library( memory, library );
148 if ( !error )
149 FT_Add_Default_Modules( *library );
150
151 return error;
152 }
153
154
155 /* END */