ReactOS 0.4.16-dev-106-g10b08aa
psblues.c File Reference
#include "psft.h"
#include "psblues.h"
#include "pshints.h"
#include "psfont.h"
Include dependency graph for psblues.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define FT_COMPONENT   trace_cf2blues
 
#define cf2_blueToFixed(x)   cf2_intToFixed( x )
 

Functions

 cf2_blues_init (CF2_Blues blues, CF2_Font font)
 
 cf2_blues_capture (const CF2_Blues blues, CF2_Hint bottomHintEdge, CF2_Hint topHintEdge)
 

Macro Definition Documentation

◆ cf2_blueToFixed

#define cf2_blueToFixed (   x)    cf2_intToFixed( x )

Definition at line 62 of file psblues.c.

◆ FT_COMPONENT

#define FT_COMPONENT   trace_cf2blues

Definition at line 54 of file psblues.c.

Function Documentation

◆ cf2_blues_capture()

cf2_blues_capture ( const CF2_Blues  blues,
CF2_Hint  bottomHintEdge,
CF2_Hint  topHintEdge 
)

Definition at line 465 of file psblues.c.

468 {
469 /* TODO: validate? */
470 CF2_Fixed csFuzz = blues->blueFuzz;
471
472 /* new position of captured edge */
473 CF2_Fixed dsNew;
474
475 /* amount that hint is moved when positioned */
476 CF2_Fixed dsMove = 0;
477
478 FT_Bool captured = FALSE;
479 CF2_UInt i;
480
481
482 /* assert edge flags are consistent */
483 FT_ASSERT( !cf2_hint_isTop( bottomHintEdge ) &&
484 !cf2_hint_isBottom( topHintEdge ) );
485
486 /* TODO: search once without blue fuzz for compatibility with coretype? */
487 for ( i = 0; i < blues->count; i++ )
488 {
489 if ( blues->zone[i].bottomZone &&
490 cf2_hint_isBottom( bottomHintEdge ) )
491 {
492 if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <=
493 bottomHintEdge->csCoord &&
494 bottomHintEdge->csCoord <=
495 ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
496 {
497 /* bottom edge captured by bottom zone */
498
499 if ( blues->suppressOvershoot )
500 dsNew = blues->zone[i].dsFlatEdge;
501
502 else if ( SUB_INT32( blues->zone[i].csTopEdge,
503 bottomHintEdge->csCoord ) >=
504 blues->blueShift )
505 {
506 /* guarantee minimum of 1 pixel overshoot */
507 dsNew = FT_MIN(
508 cf2_fixedRound( bottomHintEdge->dsCoord ),
509 blues->zone[i].dsFlatEdge - cf2_intToFixed( 1 ) );
510 }
511
512 else
513 {
514 /* simply round captured edge */
515 dsNew = cf2_fixedRound( bottomHintEdge->dsCoord );
516 }
517
518 dsMove = SUB_INT32( dsNew, bottomHintEdge->dsCoord );
519 captured = TRUE;
520
521 break;
522 }
523 }
524
525 if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) )
526 {
527 if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <=
528 topHintEdge->csCoord &&
529 topHintEdge->csCoord <=
530 ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
531 {
532 /* top edge captured by top zone */
533
534 if ( blues->suppressOvershoot )
535 dsNew = blues->zone[i].dsFlatEdge;
536
537 else if ( SUB_INT32( topHintEdge->csCoord,
538 blues->zone[i].csBottomEdge ) >=
539 blues->blueShift )
540 {
541 /* guarantee minimum of 1 pixel overshoot */
542 dsNew = FT_MAX(
543 cf2_fixedRound( topHintEdge->dsCoord ),
544 blues->zone[i].dsFlatEdge + cf2_intToFixed( 1 ) );
545 }
546
547 else
548 {
549 /* simply round captured edge */
550 dsNew = cf2_fixedRound( topHintEdge->dsCoord );
551 }
552
553 dsMove = SUB_INT32( dsNew, topHintEdge->dsCoord );
554 captured = TRUE;
555
556 break;
557 }
558 }
559 }
560
561 if ( captured )
562 {
563 /* move both edges and flag them `locked' */
564 if ( cf2_hint_isValid( bottomHintEdge ) )
565 {
566 bottomHintEdge->dsCoord = ADD_INT32( bottomHintEdge->dsCoord,
567 dsMove );
568 cf2_hint_lock( bottomHintEdge );
569 }
570
571 if ( cf2_hint_isValid( topHintEdge ) )
572 {
573 topHintEdge->dsCoord = ADD_INT32( topHintEdge->dsCoord, dsMove );
574 cf2_hint_lock( topHintEdge );
575 }
576 }
577
578 return captured;
579 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define SUB_INT32(a, b)
Definition: ftcalc.h:431
#define ADD_INT32(a, b)
Definition: ftcalc.h:429
#define FT_ASSERT(condition)
Definition: ftdebug.h:211
#define FT_MIN(a, b)
Definition: ftobjs.h:71
#define FT_MAX(a, b)
Definition: ftobjs.h:72
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define CF2_UInt
Definition: pstypes.h:64
#define cf2_intToFixed(i)
Definition: psfixed.h:60
#define CF2_Fixed
Definition: psfixed.h:48
#define cf2_fixedRound(x)
Definition: psfixed.h:64
cf2_hint_isBottom(const CF2_Hint hint)
Definition: pshints.c:248
cf2_hint_isTop(const CF2_Hint hint)
Definition: pshints.c:240
cf2_hint_lock(CF2_Hint hint)
Definition: pshints.c:270
cf2_hint_isValid(const CF2_Hint hint)
Definition: pshints.c:218
CF2_Fixed dsFlatEdge
Definition: psblues.h:134
CF2_Fixed csBottomEdge
Definition: psblues.h:131
FT_Bool bottomZone
Definition: psblues.h:136
CF2_Fixed csTopEdge
Definition: psblues.h:132
CF2_Fixed blueFuzz
Definition: psblues.h:158
CF2_Fixed blueShift
Definition: psblues.h:157
FT_Bool suppressOvershoot
Definition: psblues.h:153
CF2_BlueRec zone[CF2_MAX_BLUES+CF2_MAX_OTHERBLUES]
Definition: psblues.h:165
CF2_UInt count
Definition: psblues.h:152
CF2_Fixed csCoord
Definition: psblues.h:123
CF2_Fixed dsCoord
Definition: psblues.h:124

Referenced by cf2_hintmap_build().

◆ cf2_blues_init()

cf2_blues_init ( CF2_Blues  blues,
CF2_Font  font 
)

Definition at line 66 of file psblues.c.

68 {
69 /* pointer to parsed font object */
70 PS_Decoder* decoder = font->decoder;
71
72 CF2_Fixed zoneHeight;
73 CF2_Fixed maxZoneHeight = 0;
74 CF2_Fixed csUnitsPerPixel;
75
76 size_t numBlueValues;
77 size_t numOtherBlues;
78 size_t numFamilyBlues;
79 size_t numFamilyOtherBlues;
80
81 FT_Pos* blueValues;
82 FT_Pos* otherBlues;
83 FT_Pos* familyBlues;
84 FT_Pos* familyOtherBlues;
85
86 size_t i;
87 CF2_Fixed emBoxBottom, emBoxTop;
88
89#if 0
90 CF2_Int unitsPerEm = font->unitsPerEm;
91
92
93 if ( unitsPerEm == 0 )
94 unitsPerEm = 1000;
95#endif
96
97 FT_ZERO( blues );
98 blues->scale = font->innerTransform.d;
99
100 cf2_getBlueMetrics( decoder,
101 &blues->blueScale,
102 &blues->blueShift,
103 &blues->blueFuzz );
104
105 cf2_getBlueValues( decoder, &numBlueValues, &blueValues );
106 cf2_getOtherBlues( decoder, &numOtherBlues, &otherBlues );
107 cf2_getFamilyBlues( decoder, &numFamilyBlues, &familyBlues );
108 cf2_getFamilyOtherBlues( decoder, &numFamilyOtherBlues, &familyOtherBlues );
109
110 /*
111 * synthetic em box hint heuristic
112 *
113 * Apply this when ideographic dictionary (LanguageGroup 1) has no
114 * real alignment zones. Adobe tools generate dummy zones at -250 and
115 * 1100 for a 1000 unit em. Fonts with ICF-based alignment zones
116 * should not enable the heuristic. When the heuristic is enabled,
117 * the font's blue zones are ignored.
118 *
119 */
120
121 /* get em box from OS/2 typoAscender/Descender */
122 /* TODO: FreeType does not parse these metrics. Skip them for now. */
123#if 0
124 FCM_getHorizontalLineMetrics( &e,
125 font->font,
126 &ascender,
127 &descender,
128 &linegap );
129 if ( ascender - descender == unitsPerEm )
130 {
131 emBoxBottom = cf2_intToFixed( descender );
132 emBoxTop = cf2_intToFixed( ascender );
133 }
134 else
135#endif
136 {
137 emBoxBottom = CF2_ICF_Bottom;
138 emBoxTop = CF2_ICF_Top;
139 }
140
141 if ( cf2_getLanguageGroup( decoder ) == 1 &&
142 ( numBlueValues == 0 ||
143 ( numBlueValues == 4 &&
144 cf2_blueToFixed( blueValues[0] ) < emBoxBottom &&
145 cf2_blueToFixed( blueValues[1] ) < emBoxBottom &&
146 cf2_blueToFixed( blueValues[2] ) > emBoxTop &&
147 cf2_blueToFixed( blueValues[3] ) > emBoxTop ) ) )
148 {
149 /*
150 * Construct hint edges suitable for synthetic ghost hints at top
151 * and bottom of em box. +-CF2_MIN_COUNTER allows for unhinted
152 * features above or below the last hinted edge. This also gives a
153 * net 1 pixel boost to the height of ideographic glyphs.
154 *
155 * Note: Adjust synthetic hints outward by epsilon (0x.0001) to
156 * avoid interference. E.g., some fonts have real hints at
157 * 880 and -120.
158 */
159
160 blues->emBoxBottomEdge.csCoord = emBoxBottom - CF2_FIXED_EPSILON;
162 FT_MulFix(
164 blues->scale ) ) -
166 blues->emBoxBottomEdge.scale = blues->scale;
168 CF2_Locked |
170
171 blues->emBoxTopEdge.csCoord = emBoxTop + CF2_FIXED_EPSILON +
172 2 * font->darkenY;
174 FT_MulFix(
175 blues->emBoxTopEdge.csCoord,
176 blues->scale ) ) +
178 blues->emBoxTopEdge.scale = blues->scale;
180 CF2_Locked |
182
183 blues->doEmBoxHints = TRUE; /* enable the heuristic */
184
185 return;
186 }
187
188 /* copy `BlueValues' and `OtherBlues' to a combined array of top and */
189 /* bottom zones */
190 for ( i = 0; i < numBlueValues; i += 2 )
191 {
192 blues->zone[blues->count].csBottomEdge =
193 cf2_blueToFixed( blueValues[i] );
194 blues->zone[blues->count].csTopEdge =
195 cf2_blueToFixed( blueValues[i + 1] );
196
197 zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
198 blues->zone[blues->count].csBottomEdge );
199
200 if ( zoneHeight < 0 )
201 {
202 FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
203 continue; /* reject this zone */
204 }
205
206 if ( zoneHeight > maxZoneHeight )
207 {
208 /* take maximum before darkening adjustment */
209 /* so overshoot suppression point doesn't change */
210 maxZoneHeight = zoneHeight;
211 }
212
213 /* adjust both edges of top zone upward by twice darkening amount */
214 if ( i != 0 )
215 {
216 blues->zone[blues->count].csTopEdge += 2 * font->darkenY;
217 blues->zone[blues->count].csBottomEdge += 2 * font->darkenY;
218 }
219
220 /* first `BlueValue' is bottom zone; others are top */
221 if ( i == 0 )
222 {
223 blues->zone[blues->count].bottomZone =
224 TRUE;
225 blues->zone[blues->count].csFlatEdge =
226 blues->zone[blues->count].csTopEdge;
227 }
228 else
229 {
230 blues->zone[blues->count].bottomZone =
231 FALSE;
232 blues->zone[blues->count].csFlatEdge =
233 blues->zone[blues->count].csBottomEdge;
234 }
235
236 blues->count += 1;
237 }
238
239 for ( i = 0; i < numOtherBlues; i += 2 )
240 {
241 blues->zone[blues->count].csBottomEdge =
242 cf2_blueToFixed( otherBlues[i] );
243 blues->zone[blues->count].csTopEdge =
244 cf2_blueToFixed( otherBlues[i + 1] );
245
246 zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
247 blues->zone[blues->count].csBottomEdge );
248
249 if ( zoneHeight < 0 )
250 {
251 FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" ));
252 continue; /* reject this zone */
253 }
254
255 if ( zoneHeight > maxZoneHeight )
256 {
257 /* take maximum before darkening adjustment */
258 /* so overshoot suppression point doesn't change */
259 maxZoneHeight = zoneHeight;
260 }
261
262 /* Note: bottom zones are not adjusted for darkening amount */
263
264 /* all OtherBlues are bottom zone */
265 blues->zone[blues->count].bottomZone =
266 TRUE;
267 blues->zone[blues->count].csFlatEdge =
268 blues->zone[blues->count].csTopEdge;
269
270 blues->count += 1;
271 }
272
273 /* Adjust for FamilyBlues */
274
275 /* Search for the nearest flat edge in `FamilyBlues' or */
276 /* `FamilyOtherBlues'. According to the Black Book, any matching edge */
277 /* must be within one device pixel */
278
279 csUnitsPerPixel = FT_DivFix( cf2_intToFixed( 1 ), blues->scale );
280
281 /* loop on all zones in this font */
282 for ( i = 0; i < blues->count; i++ )
283 {
284 size_t j;
285 CF2_Fixed minDiff;
286 CF2_Fixed flatFamilyEdge, diff;
287 /* value for this font */
288 CF2_Fixed flatEdge = blues->zone[i].csFlatEdge;
289
290
291 if ( blues->zone[i].bottomZone )
292 {
293 /* In a bottom zone, the top edge is the flat edge. */
294 /* Search `FamilyOtherBlues' for bottom zones; look for closest */
295 /* Family edge that is within the one pixel threshold. */
296
297 minDiff = CF2_FIXED_MAX;
298
299 for ( j = 0; j < numFamilyOtherBlues; j += 2 )
300 {
301 /* top edge */
302 flatFamilyEdge = cf2_blueToFixed( familyOtherBlues[j + 1] );
303
304 diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
305
306 if ( diff < minDiff && diff < csUnitsPerPixel )
307 {
308 blues->zone[i].csFlatEdge = flatFamilyEdge;
309 minDiff = diff;
310
311 if ( diff == 0 )
312 break;
313 }
314 }
315
316 /* check the first member of FamilyBlues, which is a bottom zone */
317 if ( numFamilyBlues >= 2 )
318 {
319 /* top edge */
320 flatFamilyEdge = cf2_blueToFixed( familyBlues[1] );
321
322 diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
323
324 if ( diff < minDiff && diff < csUnitsPerPixel )
325 blues->zone[i].csFlatEdge = flatFamilyEdge;
326 }
327 }
328 else
329 {
330 /* In a top zone, the bottom edge is the flat edge. */
331 /* Search `FamilyBlues' for top zones; skip first zone, which is a */
332 /* bottom zone; look for closest Family edge that is within the */
333 /* one pixel threshold */
334
335 minDiff = CF2_FIXED_MAX;
336
337 for ( j = 2; j < numFamilyBlues; j += 2 )
338 {
339 /* bottom edge */
340 flatFamilyEdge = cf2_blueToFixed( familyBlues[j] );
341
342 /* adjust edges of top zone upward by twice darkening amount */
343 flatFamilyEdge += 2 * font->darkenY; /* bottom edge */
344
345 diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
346
347 if ( diff < minDiff && diff < csUnitsPerPixel )
348 {
349 blues->zone[i].csFlatEdge = flatFamilyEdge;
350 minDiff = diff;
351
352 if ( diff == 0 )
353 break;
354 }
355 }
356 }
357 }
358
359 /* TODO: enforce separation of zones, including BlueFuzz */
360
361 /* Adjust BlueScale; similar to AdjustBlueScale() in coretype */
362 /* `bcsetup.c'. */
363
364 if ( maxZoneHeight > 0 )
365 {
366 if ( blues->blueScale > FT_DivFix( cf2_intToFixed( 1 ),
367 maxZoneHeight ) )
368 {
369 /* clamp at maximum scale */
370 blues->blueScale = FT_DivFix( cf2_intToFixed( 1 ),
371 maxZoneHeight );
372 }
373
374 /*
375 * TODO: Revisit the bug fix for 613448. The minimum scale
376 * requirement catches a number of library fonts. For
377 * example, with default BlueScale (.039625) and 0.4 minimum,
378 * the test below catches any font with maxZoneHeight < 10.1.
379 * There are library fonts ranging from 2 to 10 that get
380 * caught, including e.g., Eurostile LT Std Medium with
381 * maxZoneHeight of 6.
382 *
383 */
384#if 0
385 if ( blueScale < .4 / maxZoneHeight )
386 {
387 tetraphilia_assert( 0 );
388 /* clamp at minimum scale, per bug 0613448 fix */
389 blueScale = .4 / maxZoneHeight;
390 }
391#endif
392
393 }
394
395 /*
396 * Suppress overshoot and boost blue zones at small sizes. Boost
397 * amount varies linearly from 0.5 pixel near 0 to 0 pixel at
398 * blueScale cutoff.
399 * Note: This boost amount is different from the coretype heuristic.
400 *
401 */
402
403 if ( blues->scale < blues->blueScale )
404 {
405 blues->suppressOvershoot = TRUE;
406
407 /* Change rounding threshold for `dsFlatEdge'. */
408 /* Note: constant changed from 0.5 to 0.6 to avoid a problem with */
409 /* 10ppem Arial */
410
411 blues->boost = cf2_doubleToFixed( .6 ) -
413 blues->scale,
414 blues->blueScale );
415 if ( blues->boost > 0x7FFF )
416 {
417 /* boost must remain less than 0.5, or baseline could go negative */
418 blues->boost = 0x7FFF;
419 }
420 }
421
422 /* boost and darkening have similar effects; don't do both */
423 if ( font->stemDarkened )
424 blues->boost = 0;
425
426 /* set device space alignment for each zone; */
427 /* apply boost amount before rounding flat edge */
428
429 for ( i = 0; i < blues->count; i++ )
430 {
431 if ( blues->zone[i].bottomZone )
433 FT_MulFix(
434 blues->zone[i].csFlatEdge,
435 blues->scale ) -
436 blues->boost );
437 else
439 FT_MulFix(
440 blues->zone[i].csFlatEdge,
441 blues->scale ) +
442 blues->boost );
443 }
444 }
FT_DivFix(FT_Long a, FT_Long b)
Definition: ftcalc.c:608
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
Definition: ftcalc.c:416
FT_MulFix(FT_Long a, FT_Long b)
Definition: ftcalc.c:509
#define FT_TRACE4(varformat)
Definition: ftdebug.h:161
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:58
#define FT_ZERO(p)
Definition: ftmemory.h:237
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define e
Definition: ke_i.h:82
#define CF2_Int
Definition: pstypes.h:65
Definition: mk_font.cpp:20
#define cf2_blueToFixed(x)
Definition: psblues.c:62
@ CF2_Synthetic
Definition: psblues.h:93
@ CF2_GhostTop
Definition: psblues.h:88
@ CF2_GhostBottom
Definition: psblues.h:87
@ CF2_Locked
Definition: psblues.h:91
#define CF2_MIN_COUNTER
Definition: psblues.h:114
@ CF2_ICF_Bottom
Definition: psblues.h:106
@ CF2_ICF_Top
Definition: psblues.h:105
#define CF2_FIXED_EPSILON
Definition: psfixed.h:55
#define CF2_FIXED_MAX
Definition: psfixed.h:52
#define cf2_doubleToFixed(f)
Definition: psfixed.h:66
#define cf2_fixedAbs(x)
Definition: psfixed.h:68
cf2_getBlueValues(PS_Decoder *decoder, size_t *count, FT_Pos **data)
Definition: psft.c:569
cf2_getLanguageGroup(PS_Decoder *decoder)
Definition: psft.c:621
cf2_getFamilyOtherBlues(PS_Decoder *decoder, size_t *count, FT_Pos **data)
Definition: psft.c:608
cf2_getFamilyBlues(PS_Decoder *decoder, size_t *count, FT_Pos **data)
Definition: psft.c:595
cf2_getOtherBlues(PS_Decoder *decoder, size_t *count, FT_Pos **data)
Definition: psft.c:582
cf2_getBlueMetrics(PS_Decoder *decoder, CF2_Fixed *blueScale, CF2_Fixed *blueShift, CF2_Fixed *blueFuzz)
Definition: psft.c:549
CF2_Fixed csFlatEdge
Definition: psblues.h:133
CF2_Fixed blueScale
Definition: psblues.h:156
CF2_Fixed boost
Definition: psblues.h:160
FT_Bool doEmBoxHints
Definition: psblues.h:154
CF2_HintRec emBoxTopEdge
Definition: psblues.h:162
CF2_HintRec emBoxBottomEdge
Definition: psblues.h:163
CF2_Fixed scale
Definition: psblues.h:151
CF2_Fixed scale
Definition: psblues.h:125
CF2_UInt flags
Definition: psblues.h:120

Referenced by cf2_font_setup().