]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/freetype/base/ftinit.c
better learn the operators...
[wxWidgets.git] / src / freetype / base / ftinit.c
... / ...
CommitLineData
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
66static
67const 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 */