ReactOS 0.4.16-dev-2324-ge2cf0bf
cffgload.h File Reference
Include dependency graph for cffgload.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

FT_BEGIN_HEADER cff_get_glyph_data (TT_Face face, FT_UInt glyph_index, FT_Byte **pointer, FT_ULong *length)
 
 cff_free_glyph_data (TT_Face face, FT_Byte **pointer, FT_ULong length)
 
 cff_slot_load (CFF_GlyphSlot glyph, CFF_Size size, FT_UInt glyph_index, FT_Int32 load_flags)
 

Function Documentation

◆ cff_free_glyph_data()

cff_free_glyph_data ( TT_Face  face,
FT_Byte **  pointer,
FT_ULong  length 
)

Definition at line 80 of file cffgload.c.

83 {
84#ifndef FT_CONFIG_OPTION_INCREMENTAL
86#endif
87
88#ifdef FT_CONFIG_OPTION_INCREMENTAL
89 /* For incremental fonts get the character data using the */
90 /* callback function. */
91 if ( face->root.internal->incremental_interface )
92 {
94
95
96 data.pointer = *pointer;
97 data.length = (FT_Int)length;
98
99 face->root.internal->incremental_interface->funcs->free_glyph_data(
100 face->root.internal->incremental_interface->object, &data );
101 }
102 else
103#endif /* FT_CONFIG_OPTION_INCREMENTAL */
104
105 {
106 CFF_Font cff = (CFF_Font)(face->extra.data);
107
108
110 }
111 }
CFF_Font cff
Definition: cffdrivr.c:701
cff_index_forget_element(CFF_Index idx, FT_Byte **pbytes)
Definition: cffload.c:602
struct CFF_FontRec_ * CFF_Font
Definition: cfftypes.h:156
signed int FT_Int
Definition: fttypes.h:220
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei const GLvoid * pointer
Definition: glext.h:5848
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
#define FT_UNUSED(arg)
CFF_IndexRec charstrings_index
Definition: cfftypes.h:361

Referenced by cff_slot_load().

◆ cff_get_glyph_data()

FT_BEGIN_HEADER cff_get_glyph_data ( TT_Face  face,
FT_UInt  glyph_index,
FT_Byte **  pointer,
FT_ULong length 
)

Definition at line 44 of file cffgload.c.

48 {
49#ifdef FT_CONFIG_OPTION_INCREMENTAL
50 /* For incremental fonts get the character data using the */
51 /* callback function. */
52 if ( face->root.internal->incremental_interface )
53 {
56 face->root.internal->incremental_interface->funcs->get_glyph_data(
57 face->root.internal->incremental_interface->object,
58 glyph_index, &data );
59
60
61 *pointer = (FT_Byte*)data.pointer;
62 *length = (FT_ULong)data.length;
63
64 return error;
65 }
66 else
67#endif /* FT_CONFIG_OPTION_INCREMENTAL */
68
69 {
70 CFF_Font cff = (CFF_Font)(face->extra.data);
71
72
73 return cff_index_access_element( &cff->charstrings_index, glyph_index,
74 pointer, length );
75 }
76 }
cff_index_access_element(CFF_Index idx, FT_UInt element, FT_Byte **pbytes, FT_ULong *pbyte_len)
Definition: cffload.c:504
unsigned long FT_ULong
Definition: fttypes.h:253
unsigned char FT_Byte
Definition: fttypes.h:154
int FT_Error
Definition: fttypes.h:299
#define error(str)
Definition: mkdosfs.c:1605

Referenced by cff_slot_load().

◆ cff_slot_load()

cff_slot_load ( CFF_GlyphSlot  glyph,
CFF_Size  size,
FT_UInt  glyph_index,
FT_Int32  load_flags 
)

Definition at line 194 of file cffgload.c.

198 {
201 PS_Decoder psdecoder;
202 TT_Face face = (TT_Face)glyph->root.face;
203 FT_Bool hinting, scaled, force_scaling;
204 CFF_Font cff = (CFF_Font)face->extra.data;
205
206 PSAux_Service psaux = (PSAux_Service)face->psaux;
208
209 FT_Matrix font_matrix;
210 FT_Vector font_offset;
211
212
213 force_scaling = FALSE;
214
215 /* in a CID-keyed font, consider `glyph_index' as a CID and map */
216 /* it immediately to the real glyph_index -- if it isn't a */
217 /* subsetted font, glyph_indices and CIDs are identical, though */
218 if ( cff->top_font.font_dict.cid_registry != 0xFFFFU &&
219 cff->charset.cids )
220 {
221 /* don't handle CID 0 (.notdef) which is directly mapped to GID 0 */
222 if ( glyph_index != 0 )
223 {
224 glyph_index = cff_charset_cid_to_gindex( &cff->charset,
225 glyph_index );
226 if ( glyph_index == 0 )
227 return FT_THROW( Invalid_Argument );
228 }
229 }
230 else if ( glyph_index >= cff->num_glyphs )
231 return FT_THROW( Invalid_Argument );
232
233 if ( load_flags & FT_LOAD_NO_RECURSE )
234 load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
235
236 glyph->x_scale = 0x10000L;
237 glyph->y_scale = 0x10000L;
238 if ( size )
239 {
240 glyph->x_scale = size->root.metrics.x_scale;
241 glyph->y_scale = size->root.metrics.y_scale;
242 }
243
244#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
245
246 /* try to load embedded bitmap if any */
247 /* */
248 /* XXX: The convention should be emphasized in */
249 /* the documents because it can be confusing. */
250 if ( size )
251 {
252 CFF_Face cff_face = (CFF_Face)size->root.face;
253 SFNT_Service sfnt = (SFNT_Service)cff_face->sfnt;
254 FT_Stream stream = cff_face->root.stream;
255
256
257 if ( size->strike_index != 0xFFFFFFFFUL &&
258 sfnt->load_eblc &&
259 ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
260 {
262
263
265 size->strike_index,
266 glyph_index,
267 (FT_UInt)load_flags,
268 stream,
269 &glyph->root.bitmap,
270 &metrics );
271
272 if ( !error )
273 {
274 FT_Bool has_vertical_info;
277
278
279 glyph->root.outline.n_points = 0;
280 glyph->root.outline.n_contours = 0;
281
282 glyph->root.metrics.width = (FT_Pos)metrics.width * 64;
283 glyph->root.metrics.height = (FT_Pos)metrics.height * 64;
284
285 glyph->root.metrics.horiBearingX = (FT_Pos)metrics.horiBearingX * 64;
286 glyph->root.metrics.horiBearingY = (FT_Pos)metrics.horiBearingY * 64;
287 glyph->root.metrics.horiAdvance = (FT_Pos)metrics.horiAdvance * 64;
288
289 glyph->root.metrics.vertBearingX = (FT_Pos)metrics.vertBearingX * 64;
290 glyph->root.metrics.vertBearingY = (FT_Pos)metrics.vertBearingY * 64;
291 glyph->root.metrics.vertAdvance = (FT_Pos)metrics.vertAdvance * 64;
292
293 glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
294
295 if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
296 {
297 glyph->root.bitmap_left = metrics.vertBearingX;
298 glyph->root.bitmap_top = metrics.vertBearingY;
299 }
300 else
301 {
302 glyph->root.bitmap_left = metrics.horiBearingX;
303 glyph->root.bitmap_top = metrics.horiBearingY;
304 }
305
306 /* compute linear advance widths */
307
308 (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 0,
309 glyph_index,
310 &dummy,
311 &advance );
313
314 has_vertical_info = FT_BOOL(
315 face->vertical_info &&
316 face->vertical.number_Of_VMetrics > 0 );
317
318 /* get the vertical metrics from the vmtx table if we have one */
319 if ( has_vertical_info )
320 {
321 (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
322 glyph_index,
323 &dummy,
324 &advance );
326 }
327 else
328 {
329 /* make up vertical ones */
330 if ( face->os2.version != 0xFFFFU )
331 glyph->root.linearVertAdvance = (FT_Pos)
332 ( face->os2.sTypoAscender - face->os2.sTypoDescender );
333 else
334 glyph->root.linearVertAdvance = (FT_Pos)
335 ( face->horizontal.Ascender - face->horizontal.Descender );
336 }
337
338 return error;
339 }
340 }
341 }
342
343#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
344
345 /* return immediately if we only want the embedded bitmaps */
346 if ( load_flags & FT_LOAD_SBITS_ONLY )
347 return FT_THROW( Invalid_Argument );
348
349 /* if we have a CID subfont, use its matrix (which has already */
350 /* been multiplied with the root matrix) */
351
352 /* this scaling is only relevant if the PS hinter isn't active */
353 if ( cff->num_subfonts )
354 {
355 FT_Long top_upm, sub_upm;
357 glyph_index );
358
359
360 if ( fd_index >= cff->num_subfonts )
361 fd_index = (FT_Byte)( cff->num_subfonts - 1 );
362
364 sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em;
365
366 font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix;
367 font_offset = cff->subfonts[fd_index]->font_dict.font_offset;
368
369 if ( top_upm != sub_upm )
370 {
371 glyph->x_scale = FT_MulDiv( glyph->x_scale, top_upm, sub_upm );
372 glyph->y_scale = FT_MulDiv( glyph->y_scale, top_upm, sub_upm );
373
374 force_scaling = TRUE;
375 }
376 }
377 else
378 {
379 font_matrix = cff->top_font.font_dict.font_matrix;
380 font_offset = cff->top_font.font_dict.font_offset;
381 }
382
383 glyph->root.outline.n_points = 0;
384 glyph->root.outline.n_contours = 0;
385
386 /* top-level code ensures that FT_LOAD_NO_HINTING is set */
387 /* if FT_LOAD_NO_SCALE is active */
388 hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
389 scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
390
391 glyph->hint = hinting;
392 glyph->scaled = scaled;
393 glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; /* by default */
394
395 {
396#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
398#endif
399
400 FT_Byte* charstring;
401 FT_ULong charstring_len;
402
403
404 decoder_funcs->init( &decoder, face, size, glyph, hinting,
405 FT_LOAD_TARGET_MODE( load_flags ),
408
409 /* this is for pure CFFs */
410 if ( load_flags & FT_LOAD_ADVANCE_ONLY )
411 decoder.width_only = TRUE;
412
413 decoder.builder.no_recurse =
414 FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
415
416 /* now load the unscaled outline */
417 error = cff_get_glyph_data( face, glyph_index,
418 &charstring, &charstring_len );
419 if ( error )
420 goto Glyph_Build_Finished;
421
422 error = decoder_funcs->prepare( &decoder, size, glyph_index );
423 if ( error )
424 goto Glyph_Build_Finished;
425
426#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
427 /* choose which CFF renderer to use */
428 if ( driver->hinting_engine == FT_HINTING_FREETYPE )
429 error = decoder_funcs->parse_charstrings_old( &decoder,
430 charstring,
431 charstring_len,
432 0 );
433 else
434#endif
435 {
436 psaux->ps_decoder_init( &psdecoder, &decoder, FALSE );
437
438 error = decoder_funcs->parse_charstrings( &psdecoder,
439 charstring,
440 charstring_len );
441
442 /* Adobe's engine uses 16.16 numbers everywhere; */
443 /* as a consequence, glyphs larger than 2000ppem get rejected */
444 if ( FT_ERR_EQ( error, Glyph_Too_Big ) )
445 {
446 /* this time, we retry unhinted and scale up the glyph later on */
447 /* (the engine uses and sets the hardcoded value 0x10000 / 64 = */
448 /* 0x400 for both `x_scale' and `y_scale' in this case) */
449 hinting = FALSE;
450 force_scaling = TRUE;
451 glyph->hint = hinting;
452
453 error = decoder_funcs->parse_charstrings( &psdecoder,
454 charstring,
455 charstring_len );
456 }
457 }
458
459 cff_free_glyph_data( face, &charstring, charstring_len );
460
461 if ( error )
462 goto Glyph_Build_Finished;
463
464#ifdef FT_CONFIG_OPTION_INCREMENTAL
465 /* Control data and length may not be available for incremental */
466 /* fonts. */
467 if ( face->root.internal->incremental_interface )
468 {
469 glyph->root.control_data = NULL;
470 glyph->root.control_len = 0;
471 }
472 else
473#endif /* FT_CONFIG_OPTION_INCREMENTAL */
474
475 /* We set control_data and control_len if charstrings is loaded. */
476 /* See how charstring loads at cff_index_access_element() in */
477 /* cffload.c. */
478 {
479 CFF_Index csindex = &cff->charstrings_index;
480
481
482 if ( csindex->offsets )
483 {
484 glyph->root.control_data = csindex->bytes +
485 csindex->offsets[glyph_index] - 1;
486 glyph->root.control_len = (FT_Long)charstring_len;
487 }
488 }
489
490 Glyph_Build_Finished:
491 /* save new glyph tables, if no error */
492 if ( !error )
493 decoder.builder.funcs.done( &decoder.builder );
494 /* XXX: anything to do for broken glyph entry? */
495 }
496
497#ifdef FT_CONFIG_OPTION_INCREMENTAL
498
499 /* Incremental fonts can optionally override the metrics. */
500 if ( !error &&
501 face->root.internal->incremental_interface &&
502 face->root.internal->incremental_interface->funcs->get_glyph_metrics )
503 {
505
506
507 metrics.bearing_x = decoder.builder.left_bearing.x;
508 metrics.bearing_y = 0;
509 metrics.advance = decoder.builder.advance.x;
510 metrics.advance_v = decoder.builder.advance.y;
511
512 error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
513 face->root.internal->incremental_interface->object,
514 glyph_index, FALSE, &metrics );
515
516 decoder.builder.left_bearing.x = metrics.bearing_x;
517 decoder.builder.advance.x = metrics.advance;
518 decoder.builder.advance.y = metrics.advance_v;
519 }
520
521#endif /* FT_CONFIG_OPTION_INCREMENTAL */
522
523 if ( !error )
524 {
525 /* Now, set the metrics -- this is rather simple, as */
526 /* the left side bearing is the xMin, and the top side */
527 /* bearing the yMax. */
528
529 /* For composite glyphs, return only left side bearing and */
530 /* advance width. */
531 if ( load_flags & FT_LOAD_NO_RECURSE )
532 {
534
535
536 glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
537 glyph->root.metrics.horiAdvance = decoder.glyph_width;
538 internal->glyph_matrix = font_matrix;
539 internal->glyph_delta = font_offset;
540 internal->glyph_transformed = 1;
541 }
542 else
543 {
544 FT_BBox cbox;
546 FT_Bool has_vertical_info;
547
548
549 if ( face->horizontal.number_Of_HMetrics )
550 {
551 FT_Short horiBearingX = 0;
552 FT_UShort horiAdvance = 0;
553
554
555 ( (SFNT_Service)face->sfnt )->get_metrics( face, 0,
556 glyph_index,
557 &horiBearingX,
558 &horiAdvance );
559 metrics->horiAdvance = horiAdvance;
560 metrics->horiBearingX = horiBearingX;
561 glyph->root.linearHoriAdvance = horiAdvance;
562 }
563 else
564 {
565 /* copy the _unscaled_ advance width */
566 metrics->horiAdvance = decoder.glyph_width;
567 glyph->root.linearHoriAdvance = decoder.glyph_width;
568 }
569
570 glyph->root.internal->glyph_transformed = 0;
571
572 has_vertical_info = FT_BOOL( face->vertical_info &&
573 face->vertical.number_Of_VMetrics > 0 );
574
575 /* get the vertical metrics from the vmtx table if we have one */
576 if ( has_vertical_info )
577 {
578 FT_Short vertBearingY = 0;
579 FT_UShort vertAdvance = 0;
580
581
582 ( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
583 glyph_index,
584 &vertBearingY,
585 &vertAdvance );
586 metrics->vertBearingY = vertBearingY;
587 metrics->vertAdvance = vertAdvance;
588 }
589 else
590 {
591 /* make up vertical ones */
592 if ( face->os2.version != 0xFFFFU )
593 metrics->vertAdvance = (FT_Pos)( face->os2.sTypoAscender -
594 face->os2.sTypoDescender );
595 else
596 metrics->vertAdvance = (FT_Pos)( face->horizontal.Ascender -
597 face->horizontal.Descender );
598 }
599
600 glyph->root.linearVertAdvance = metrics->vertAdvance;
601
602 glyph->root.format = FT_GLYPH_FORMAT_OUTLINE;
603
604 glyph->root.outline.flags = 0;
605 if ( size && size->root.metrics.y_ppem < 24 )
607
609
610 /* apply the font matrix, if any */
611 if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
612 font_matrix.xy != 0 || font_matrix.yx != 0 )
613 {
614 FT_Outline_Transform( &glyph->root.outline, &font_matrix );
615
616 metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
617 font_matrix.xx );
618 metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
619 font_matrix.yy );
620 }
621
622 if ( font_offset.x || font_offset.y )
623 {
625 font_offset.x,
626 font_offset.y );
627
628 metrics->horiAdvance += font_offset.x;
629 metrics->vertAdvance += font_offset.y;
630 }
631
632 if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling )
633 {
634 /* scale the outline and the metrics */
635 FT_Int n;
636 FT_Outline* cur = &glyph->root.outline;
637 FT_Vector* vec = cur->points;
638 FT_Fixed x_scale = glyph->x_scale;
639 FT_Fixed y_scale = glyph->y_scale;
640
641
642 /* First of all, scale the points */
643 if ( !hinting || !decoder.builder.hints_funcs )
644 for ( n = cur->n_points; n > 0; n--, vec++ )
645 {
646 vec->x = FT_MulFix( vec->x, x_scale );
647 vec->y = FT_MulFix( vec->y, y_scale );
648 }
649
650 /* Then scale the metrics */
651 metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
652 metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
653 }
654
655 /* compute the other metrics */
656 FT_Outline_Get_CBox( &glyph->root.outline, &cbox );
657
658 metrics->width = cbox.xMax - cbox.xMin;
659 metrics->height = cbox.yMax - cbox.yMin;
660
661 metrics->horiBearingX = cbox.xMin;
662 metrics->horiBearingY = cbox.yMax;
663
664 if ( has_vertical_info )
665 {
666 metrics->vertBearingX = metrics->horiBearingX -
667 metrics->horiAdvance / 2;
668 metrics->vertBearingY = FT_MulFix( metrics->vertBearingY,
669 glyph->y_scale );
670 }
671 else
672 {
673 if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
675 metrics->vertAdvance );
676 }
677 }
678 }
679
680 return error;
681 }
ios_base &_STLP_CALL internal(ios_base &__s)
Definition: _ios_base.h:311
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
cff_get_glyph_data(TT_Face face, FT_UInt glyph_index, FT_Byte **pointer, FT_ULong *length)
Definition: cffgload.c:44
cff_free_glyph_data(TT_Face face, FT_Byte **pointer, FT_ULong length)
Definition: cffgload.c:80
cff_charset_cid_to_gindex(CFF_Charset charset, FT_UInt cid)
Definition: cffload.c:870
cff_fd_select_get(CFF_FDSelect fdselect, FT_UInt glyph_index)
Definition: cffload.c:756
FT_BEGIN_HEADER typedef TT_Face CFF_Face
Definition: cffotypes.h:32
FT_BEGIN_HEADER struct CFF_IndexRec_ * CFF_Index
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FT_LOAD_VERTICAL_LAYOUT
Definition: freetype.h:3026
#define FT_LOAD_TARGET_MODE(x)
Definition: freetype.h:3154
FT_BEGIN_HEADER struct FT_Glyph_Metrics_ FT_Glyph_Metrics
#define FT_LOAD_SBITS_ONLY
Definition: freetype.h:3045
#define FT_LOAD_NO_BITMAP
Definition: freetype.h:3025
#define FT_LOAD_NO_SCALE
Definition: freetype.h:3022
#define FT_LOAD_NO_RECURSE
Definition: freetype.h:3031
#define FT_LOAD_ADVANCE_ONLY
Definition: freetype.h:3044
#define FT_LOAD_NO_HINTING
Definition: freetype.h:3023
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
Definition: ftcalc.c:415
FT_MulFix(FT_Long a, FT_Long b)
Definition: ftcalc.c:508
FT_Vector * vec
Definition: ftbbox.c:469
#define FT_THROW(e)
Definition: ftdebug.h:243
#define FT_HINTING_FREETYPE
Definition: ftdriver.h:343
#define FT_OUTLINE_HIGH_PRECISION
Definition: ftimage.h:443
#define FT_OUTLINE_REVERSE_FILL
Definition: ftimage.h:437
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:57
ft_synthesize_vertical_metrics(FT_Glyph_Metrics *metrics, FT_Pos advance)
Definition: ftobjs.c:2997
#define FT_FACE_DRIVER(x)
Definition: ftobjs.h:601
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
Definition: ftoutln.c:507
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
Definition: ftoutln.c:706
FT_Outline_Get_CBox(const FT_Outline *outline, FT_BBox *acbox)
Definition: ftoutln.c:457
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
#define FT_ERR_EQ(x, e)
Definition: fttypes.h:604
signed long FT_Fixed
Definition: fttypes.h:287
signed long FT_Long
Definition: fttypes.h:242
unsigned short FT_UShort
Definition: fttypes.h:209
signed short FT_Short
Definition: fttypes.h:198
unsigned int FT_UInt
Definition: fttypes.h:231
#define FT_BOOL(x)
Definition: fttypes.h:591
FxCollectionEntry * cur
GLdouble n
Definition: glext.h:7729
GLsizeiptr size
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
if(dx< 0)
Definition: linetemp.h:194
struct @1789::@1790 driver
FT_BEGIN_HEADER struct PS_DriverRec_ * PS_Driver
struct PSAux_ServiceRec_ * PSAux_Service
SFNT_Interface * SFNT_Service
Definition: sfnt.h:784
FT_UShort * cids
Definition: cfftypes.h:103
FT_UInt cid_registry
Definition: cfftypes.h:214
FT_Vector font_offset
Definition: cfftypes.h:201
FT_ULong units_per_em
Definition: cfftypes.h:200
FT_Matrix font_matrix
Definition: cfftypes.h:198
FT_UInt num_subfonts
Definition: cfftypes.h:378
CFF_SubFont subfonts[CFF_MAX_CID_FONTS]
Definition: cfftypes.h:379
CFF_CharsetRec charset
Definition: cfftypes.h:359
CFF_SubFontRec top_font
Definition: cfftypes.h:377
CFF_FDSelectRec fd_select
Definition: cfftypes.h:381
FT_UInt num_glyphs
Definition: cfftypes.h:344
FT_Fixed y_scale
Definition: cffotypes.h:67
FT_Fixed x_scale
Definition: cffotypes.h:66
FT_Bool scaled
Definition: cffotypes.h:64
FT_GlyphSlotRec root
Definition: cffotypes.h:61
CFF_FontRecDictRec font_dict
Definition: cfftypes.h:304
FT_Pos xMin
Definition: ftimage.h:120
FT_Pos yMax
Definition: ftimage.h:121
FT_Pos yMin
Definition: ftimage.h:120
FT_Pos xMax
Definition: ftimage.h:121
FT_Int bitmap_top
Definition: freetype.h:1888
void * control_data
Definition: freetype.h:1895
FT_Int bitmap_left
Definition: freetype.h:1887
FT_Bitmap bitmap
Definition: freetype.h:1886
FT_Outline outline
Definition: freetype.h:1890
FT_Slot_Internal internal
Definition: freetype.h:1903
FT_Fixed linearHoriAdvance
Definition: freetype.h:1880
FT_Fixed linearVertAdvance
Definition: freetype.h:1881
FT_Glyph_Metrics metrics
Definition: freetype.h:1879
FT_Glyph_Format format
Definition: freetype.h:1884
short n_contours
Definition: ftimage.h:338
int flags
Definition: ftimage.h:345
short n_points
Definition: ftimage.h:339
FT_Bool glyph_transformed
Definition: ftobjs.h:427
FT_Pos x
Definition: ftimage.h:77
FT_Pos y
Definition: ftimage.h:78
void(* ps_decoder_init)(PS_Decoder *ps_decoder, void *decoder, FT_Bool is_t1)
Definition: psaux.h:1361
const CFF_Decoder_FuncsRec * cff_decoder_funcs
Definition: psaux.h:1375
TT_Load_Table_Func load_eblc
Definition: sfnt.h:761
TT_Load_SBit_Image_Func load_sbit_image
Definition: sfnt.h:743
FT_FaceRec root
Definition: tttypes.h:1464
Definition: parse.h:23
SFNT_Service sfnt
Definition: ttdriver.c:208
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:988

Referenced by cff_glyph_load().