4 |
/* */ |
/* */ |
5 |
/* The FreeType services (specification only). */ |
/* The FreeType services (specification only). */ |
6 |
/* */ |
/* */ |
7 |
/* Copyright 2003, 2004 by */ |
/* Copyright 2003, 2004, 2005 by */ |
8 |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
9 |
/* */ |
/* */ |
10 |
/* This file is part of the FreeType project, and may only be used, */ |
/* This file is part of the FreeType project, and may only be used, */ |
61 |
|
|
62 |
#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ |
#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ |
63 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
64 |
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \ |
FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ |
65 |
FT_Pointer _tmp_ = NULL; \ |
FT_Pointer _tmp_ = NULL; \ |
66 |
FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \ |
FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \ |
67 |
\ |
\ |
68 |
|
\ |
69 |
if ( module->clazz->get_interface ) \ |
if ( module->clazz->get_interface ) \ |
70 |
_tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ |
_tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ |
71 |
*_pptr_ = _tmp_; \ |
*_pptr_ = _tmp_; \ |
75 |
|
|
76 |
#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ |
#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ |
77 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
78 |
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \ |
FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ |
79 |
FT_Pointer _tmp_ = NULL; \ |
FT_Pointer _tmp_ = NULL; \ |
80 |
\ |
\ |
81 |
if ( module->clazz->get_interface ) \ |
if ( module->clazz->get_interface ) \ |
82 |
_tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ |
_tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ |
111 |
|
|
112 |
#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ |
#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ |
113 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
114 |
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \ |
FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ |
115 |
FT_Pointer _tmp_; \ |
FT_Pointer _tmp_; \ |
116 |
FT_Pointer _pptr_ = (FT_Pointer*)&(ptr); \ |
FT_Pointer _pptr_ = (FT_Pointer*)&(ptr); \ |
117 |
\ |
\ |
118 |
|
\ |
119 |
_tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \ |
_tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \ |
120 |
*_pptr_ = _tmp_; \ |
*_pptr_ = _tmp_; \ |
121 |
FT_END_STMNT |
FT_END_STMNT |
124 |
|
|
125 |
#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ |
#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ |
126 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
127 |
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \ |
FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ |
128 |
FT_Pointer _tmp_; \ |
FT_Pointer _tmp_; \ |
129 |
\ |
\ |
130 |
|
\ |
131 |
_tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \ |
_tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \ |
132 |
ptr = _tmp_; \ |
ptr = _tmp_; \ |
133 |
FT_END_STMNT |
FT_END_STMNT |
134 |
|
|
135 |
#endif /* !C++ */ |
#endif /* !C++ */ |
136 |
|
|
137 |
|
|
138 |
/*************************************************************************/ |
/*************************************************************************/ |
139 |
/*************************************************************************/ |
/*************************************************************************/ |
140 |
/***** *****/ |
/***** *****/ |
233 |
*/ |
*/ |
234 |
#ifdef __cplusplus |
#ifdef __cplusplus |
235 |
|
|
236 |
#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ |
#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ |
237 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
238 |
FT_Pointer svc; \ |
FT_Pointer svc; \ |
239 |
FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \ |
FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \ |
240 |
\ |
\ |
241 |
\ |
\ |
242 |
svc = FT_FACE(face)->internal->services. service_ ## id; \ |
svc = FT_FACE( face )->internal->services. service_ ## id; \ |
243 |
if ( svc == FT_SERVICE_UNAVAILABLE ) \ |
if ( svc == FT_SERVICE_UNAVAILABLE ) \ |
244 |
svc = NULL; \ |
svc = NULL; \ |
245 |
else if ( svc == NULL ) \ |
else if ( svc == NULL ) \ |
246 |
{ \ |
{ \ |
247 |
FT_FACE_FIND_SERVICE( face, svc, id ); \ |
FT_FACE_FIND_SERVICE( face, svc, id ); \ |
248 |
\ |
\ |
249 |
FT_FACE(face)->internal->services. service_ ## id = \ |
FT_FACE( face )->internal->services. service_ ## id = \ |
250 |
(FT_Pointer)( svc != NULL ? svc \ |
(FT_Pointer)( svc != NULL ? svc \ |
251 |
: FT_SERVICE_UNAVAILABLE ); \ |
: FT_SERVICE_UNAVAILABLE ); \ |
252 |
} \ |
} \ |
253 |
*Pptr = svc; \ |
*Pptr = svc; \ |
254 |
FT_END_STMNT |
FT_END_STMNT |
255 |
|
|
256 |
#else /* !C++ */ |
#else /* !C++ */ |
257 |
|
|
258 |
#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ |
#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ |
259 |
FT_BEGIN_STMNT \ |
FT_BEGIN_STMNT \ |
260 |
FT_Pointer svc; \ |
FT_Pointer svc; \ |
261 |
\ |
\ |
262 |
\ |
\ |
263 |
svc = FT_FACE(face)->internal->services. service_ ## id; \ |
svc = FT_FACE( face )->internal->services. service_ ## id; \ |
264 |
if ( svc == FT_SERVICE_UNAVAILABLE ) \ |
if ( svc == FT_SERVICE_UNAVAILABLE ) \ |
265 |
svc = NULL; \ |
svc = NULL; \ |
266 |
else if ( svc == NULL ) \ |
else if ( svc == NULL ) \ |
267 |
{ \ |
{ \ |
268 |
FT_FACE_FIND_SERVICE( face, svc, id ); \ |
FT_FACE_FIND_SERVICE( face, svc, id ); \ |
269 |
\ |
\ |
270 |
FT_FACE(face)->internal->services. service_ ## id = \ |
FT_FACE( face )->internal->services. service_ ## id = \ |
271 |
(FT_Pointer)( svc != NULL ? svc \ |
(FT_Pointer)( svc != NULL ? svc \ |
272 |
: FT_SERVICE_UNAVAILABLE ); \ |
: FT_SERVICE_UNAVAILABLE ); \ |
273 |
} \ |
} \ |
274 |
ptr = svc; \ |
ptr = svc; \ |
275 |
FT_END_STMNT |
FT_END_STMNT |
276 |
|
|
277 |
#endif /* !C++ */ |
#endif /* !C++ */ |