ReactOS 0.4.16-dev-2358-g0df3463
ttobjs.h File Reference
Include dependency graph for ttobjs.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  TT_GraphicsState_
 
struct  TT_CodeRange_
 
struct  TT_DefRecord_
 
struct  TT_Transform_
 
struct  TT_Size_Metrics_
 
struct  TT_SizeRec_
 
struct  TT_DriverRec_
 

Macros

#define TT_MAX_CODE_RANGES   3
 
#define IS_HINTED(flags)   ( ( flags & FT_LOAD_NO_HINTING ) == 0 )
 

Typedefs

typedef typedefFT_BEGIN_HEADER struct TT_DriverRec_TT_Driver
 
typedef FT_GlyphSlot TT_GlyphSlot
 
typedef struct TT_GraphicsState_ TT_GraphicsState
 
typedef enum TT_CodeRange_Tag_ TT_CodeRange_Tag
 
typedef struct TT_CodeRange_ TT_CodeRange
 
typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES]
 
typedef struct TT_DefRecord_ TT_DefRecord
 
typedef struct TT_DefRecord_TT_DefArray
 
typedef struct TT_Transform_ TT_Transform
 
typedef struct TT_Size_Metrics_ TT_Size_Metrics
 
typedef struct TT_SizeRec_ TT_SizeRec
 
typedef struct TT_DriverRec_ TT_DriverRec
 

Enumerations

enum  TT_CodeRange_Tag_ { tt_coderange_none = 0 , tt_coderange_font , tt_coderange_cvt , tt_coderange_glyph }
 

Functions

 tt_face_init (FT_Stream stream, FT_Face ttface, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
 
 tt_face_done (FT_Face ttface)
 
 tt_size_init (FT_Size ttsize)
 
 tt_size_done (FT_Size ttsize)
 
 tt_size_reset (TT_Size size, FT_Bool only_height)
 
 tt_driver_init (FT_Module ttdriver)
 
 tt_driver_done (FT_Module ttdriver)
 
 tt_slot_init (FT_GlyphSlot slot)
 

Macro Definition Documentation

◆ IS_HINTED

#define IS_HINTED (   flags)    ( ( flags & FT_LOAD_NO_HINTING ) == 0 )

Definition at line 416 of file ttobjs.h.

◆ TT_MAX_CODE_RANGES

#define TT_MAX_CODE_RANGES   3

Definition at line 124 of file ttobjs.h.

Typedef Documentation

◆ TT_CodeRange

◆ TT_CodeRange_Tag

◆ TT_CodeRangeTable

typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES]

Definition at line 151 of file ttobjs.h.

◆ TT_DefArray

◆ TT_DefRecord

◆ TT_Driver

typedef typedefFT_BEGIN_HEADER struct TT_DriverRec_* TT_Driver

Definition at line 38 of file ttobjs.h.

◆ TT_DriverRec

◆ TT_GlyphSlot

Definition at line 53 of file ttobjs.h.

◆ TT_GraphicsState

◆ TT_Size_Metrics

◆ TT_SizeRec

◆ TT_Transform

Enumeration Type Documentation

◆ TT_CodeRange_Tag_

Enumerator
tt_coderange_none 
tt_coderange_font 
tt_coderange_cvt 
tt_coderange_glyph 

Definition at line 134 of file ttobjs.h.

135 {
140
enum TT_CodeRange_Tag_ TT_CodeRange_Tag
@ tt_coderange_none
Definition: ttobjs.h:136
@ tt_coderange_font
Definition: ttobjs.h:137
@ tt_coderange_cvt
Definition: ttobjs.h:138
@ tt_coderange_glyph
Definition: ttobjs.h:139

Function Documentation

◆ tt_driver_done()

tt_driver_done ( FT_Module  ttdriver)

Definition at line 1448 of file ttobjs.c.

1449 {
1450 FT_UNUSED( ttdriver );
1451 }
#define FT_UNUSED(arg)

◆ tt_driver_init()

tt_driver_init ( FT_Module  ttdriver)

Definition at line 1410 of file ttobjs.c.

1411 {
1412
1413#ifdef TT_USE_BYTECODE_INTERPRETER
1414
1415 TT_Driver driver = (TT_Driver)ttdriver;
1416
1417 driver->interpreter_version = TT_INTERPRETER_VERSION_35;
1418#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1419 driver->interpreter_version = TT_INTERPRETER_VERSION_38;
1420#endif
1421#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1422 driver->interpreter_version = TT_INTERPRETER_VERSION_40;
1423#endif
1424
1425#else /* !TT_USE_BYTECODE_INTERPRETER */
1426
1427 FT_UNUSED( ttdriver );
1428
1429#endif /* !TT_USE_BYTECODE_INTERPRETER */
1430
1431 return FT_Err_Ok;
1432 }
return FT_Err_Ok
Definition: ftbbox.c:526
#define TT_INTERPRETER_VERSION_38
Definition: ftdriver.h:744
#define TT_INTERPRETER_VERSION_40
Definition: ftdriver.h:745
#define TT_INTERPRETER_VERSION_35
Definition: ftdriver.h:743
struct @1789::@1790 driver
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
Definition: ttobjs.h:38

◆ tt_face_done()

tt_face_done ( FT_Face  ttface)

Definition at line 768 of file ttobjs.c.

769 {
770 TT_Face face = (TT_Face)ttface;
774
775
776 if ( !face )
777 return;
778
779 memory = ttface->memory;
780 stream = ttface->stream;
781 sfnt = (SFNT_Service)face->sfnt;
782
783 /* for `extended TrueType formats' (i.e. compressed versions) */
784 if ( face->extra.finalizer )
785 face->extra.finalizer( face->extra.data );
786
787 if ( sfnt )
788 sfnt->done_face( face );
789
790 /* freeing the locations table */
792
794
795 /* freeing the CVT */
796 FT_FREE( face->cvt );
797 face->cvt_size = 0;
798
799 /* freeing the programs */
800 FT_FRAME_RELEASE( face->font_program );
801 FT_FRAME_RELEASE( face->cvt_program );
802 face->font_program_size = 0;
803 face->cvt_program_size = 0;
804
805#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
806 tt_done_blend( face );
807 face->blend = NULL;
808#endif
809 }
#define NULL
Definition: types.h:112
#define FT_FREE(ptr)
Definition: ftmemory.h:337
#define FT_FRAME_RELEASE(bytes)
Definition: ftstream.h:562
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:64
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
if(dx< 0)
Definition: linetemp.h:194
static char memory[1024 *256]
Definition: process.c:122
SFNT_Interface * SFNT_Service
Definition: sfnt.h:784
FT_Stream stream
Definition: freetype.h:1073
FT_Memory memory
Definition: freetype.h:1072
TT_Done_Face_Func done_face
Definition: sfnt.h:716
Definition: parse.h:23
SFNT_Service sfnt
Definition: ttdriver.c:208
tt_face_free_hdmx(TT_Face face)
Definition: ttpload.c:611
tt_face_done_loca(TT_Face face)
Definition: ttpload.c:290
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:988

◆ tt_face_init()

tt_face_init ( FT_Stream  stream,
FT_Face  ttface,
FT_Int  face_index,
FT_Int  num_params,
FT_Parameter params 
)

Definition at line 605 of file ttobjs.c.

610 {
614 TT_Face face = (TT_Face)ttface;
615
616
617 FT_TRACE2(( "TTF driver\n" ));
618
619 library = ttface->driver->root.library;
620
622 if ( !sfnt )
623 {
624 FT_ERROR(( "tt_face_init: cannot access `sfnt' module\n" ));
625 error = FT_THROW( Missing_Module );
626 goto Exit;
627 }
628
629 /* create input stream from resource */
630 if ( FT_STREAM_SEEK( 0 ) )
631 goto Exit;
632
633 /* check that we have a valid TrueType file */
634 FT_TRACE2(( " " ));
635 error = sfnt->init_face( stream, face, face_index, num_params, params );
636
637 /* Stream may have changed. */
638 stream = face->root.stream;
639
640 if ( error )
641 goto Exit;
642
643 /* We must also be able to accept Mac/GX fonts, as well as OT ones. */
644 /* The 0x00020000 tag is completely undocumented; some fonts from */
645 /* Arphic made for Chinese Windows 3.1 have this. */
646 if ( face->format_tag != 0x00010000L && /* MS fonts */
647 face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */
648 face->format_tag != TTAG_true && /* Mac fonts */
649 face->format_tag != TTAG_0xA5kbd && /* `Keyboard.dfont' (legacy Mac OS X) */
650 face->format_tag != TTAG_0xA5lst ) /* `LastResort.dfont' (legacy Mac OS X) */
651 {
652 FT_TRACE2(( " not a TTF font\n" ));
653 goto Bad_Format;
654 }
655
656#ifdef TT_USE_BYTECODE_INTERPRETER
658#endif
659
660 /* If we are performing a simple font format check, exit immediately. */
661 if ( face_index < 0 )
662 return FT_Err_Ok;
663
664 /* Load font directory */
665 error = sfnt->load_face( stream, face, face_index, num_params, params );
666 if ( error )
667 goto Exit;
668
669 if ( tt_check_trickyness( ttface ) )
671
673 if ( error )
674 goto Exit;
675
676 if ( FT_IS_SCALABLE( ttface ) )
677 {
678#ifdef FT_CONFIG_OPTION_INCREMENTAL
679 if ( !ttface->internal->incremental_interface )
680#endif
681 {
683
684 /* having a (non-zero) `glyf' table without */
685 /* a `loca' table is not valid */
686 if ( face->glyf_len && FT_ERR_EQ( error, Table_Missing ) )
687 goto Exit;
688 if ( error )
689 goto Exit;
690 }
691
692 /* `fpgm', `cvt', and `prep' are optional */
694 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
695 goto Exit;
696
698 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
699 goto Exit;
700
702 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
703 goto Exit;
704
705 /* Check the scalable flag based on `loca'. */
706#ifdef FT_CONFIG_OPTION_INCREMENTAL
707 if ( !ttface->internal->incremental_interface )
708#endif
709 {
710 if ( ttface->num_fixed_sizes &&
711 face->glyph_locations &&
712 tt_check_single_notdef( ttface ) )
713 {
714 FT_TRACE5(( "tt_face_init:"
715 " Only the `.notdef' glyph has an outline.\n"
716 " "
717 " Resetting scalable flag to FALSE.\n" ));
718
719 ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
720 }
721 }
722 }
723
724#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
725
726 {
727 FT_UInt instance_index = (FT_UInt)face_index >> 16;
728
729
730 if ( FT_HAS_MULTIPLE_MASTERS( ttface ) &&
731 instance_index > 0 )
732 {
733 error = TT_Set_Named_Instance( face, instance_index );
734 if ( error )
735 goto Exit;
736
737 tt_apply_mvar( face );
738 }
739 }
740
741#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
742
743 /* initialize standard glyph loading routines */
745
746 Exit:
747 return error;
748
749 Bad_Format:
750 error = FT_THROW( Unknown_File_Format );
751 goto Exit;
752 }
FT_Library library
Definition: cffdrivr.c:660
#define FT_FACE_FLAG_HINTER
Definition: freetype.h:1208
#define FT_HAS_MULTIPLE_MASTERS(face)
Definition: freetype.h:1361
#define FT_IS_SCALABLE(face)
Definition: freetype.h:1271
#define FT_FACE_FLAG_TRICKY
Definition: freetype.h:1210
#define FT_ERROR(varformat)
Definition: ftdebug.h:211
#define FT_TRACE5(varformat)
Definition: ftdebug.h:192
#define FT_THROW(e)
Definition: ftdebug.h:243
#define FT_TRACE2(varformat)
Definition: ftdebug.h:189
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
Definition: ftobjs.c:5012
#define FT_STREAM_SEEK(position)
Definition: ftstream.h:525
#define FT_ERR_EQ(x, e)
Definition: fttypes.h:604
int FT_Error
Definition: fttypes.h:299
#define FT_ERR_NEQ(x, e)
Definition: fttypes.h:606
unsigned int FT_UInt
Definition: fttypes.h:231
GLenum const GLfloat * params
Definition: glext.h:5645
#define error(str)
Definition: mkdosfs.c:1605
static void Exit(void)
Definition: sock.c:1330
FT_ModuleRec root
Definition: ftobjs.h:801
FT_Driver driver
Definition: freetype.h:1071
FT_Int num_fixed_sizes
Definition: freetype.h:1041
FT_Face_Internal internal
Definition: freetype.h:1080
FT_Long face_flags
Definition: freetype.h:1033
FT_Library library
Definition: ftobjs.h:501
TT_Init_Face_Func init_face
Definition: sfnt.h:714
TT_Load_Face_Func load_face
Definition: sfnt.h:715
TT_Init_Glyph_Loading(TT_Face face)
Definition: ttgload.c:779
static FT_Bool tt_check_trickyness(FT_Face face)
Definition: ttobjs.c:505
static FT_Bool tt_check_single_notdef(FT_Face ttface)
Definition: ttobjs.c:527
tt_face_load_prep(TT_Face face, FT_Stream stream)
Definition: ttpload.c:468
tt_face_load_cvt(TT_Face face, FT_Stream stream)
Definition: ttpload.c:321
tt_face_load_fpgm(TT_Face face, FT_Stream stream)
Definition: ttpload.c:404
tt_face_load_hdmx(TT_Face face, FT_Stream stream)
Definition: ttpload.c:531
tt_face_load_loca(TT_Face face, FT_Stream stream)
Definition: ttpload.c:63
#define TTAG_true
Definition: tttags.h:99
#define TTAG_0xA5kbd
Definition: tttags.h:112
#define TTAG_0xA5lst
Definition: tttags.h:115

◆ tt_size_done()

tt_size_done ( FT_Size  ttsize)

Definition at line 1270 of file ttobjs.c.

1271 {
1272 TT_Size size = (TT_Size)ttsize;
1273
1274
1275#ifdef TT_USE_BYTECODE_INTERPRETER
1276 tt_size_done_bytecode( ttsize );
1277#endif
1278
1279 size->ttmetrics.valid = FALSE;
1280 }
#define FALSE
Definition: types.h:117
GLsizeiptr size
Definition: glext.h:5919
struct TT_SizeRec_ * TT_Size
Definition: tttypes.h:1722

◆ tt_size_init()

tt_size_init ( FT_Size  ttsize)

Definition at line 1239 of file ttobjs.c.

1240 {
1241 TT_Size size = (TT_Size)ttsize;
1243
1244
1245#ifdef TT_USE_BYTECODE_INTERPRETER
1246 size->bytecode_ready = -1;
1247 size->cvt_ready = -1;
1248#endif
1249
1250 size->ttmetrics.valid = FALSE;
1251 size->strike_index = 0xFFFFFFFFUL;
1252
1253 return error;
1254 }

◆ tt_size_reset()

tt_size_reset ( TT_Size  size,
FT_Bool  only_height 
)

Definition at line 1302 of file ttobjs.c.

1304 {
1305 TT_Face face;
1306 FT_Size_Metrics* size_metrics;
1307
1308
1309 face = (TT_Face)size->root.face;
1310
1311 /* nothing to do for CFF2 */
1312 if ( face->is_cff2 )
1313 return FT_Err_Ok;
1314
1315 size->ttmetrics.valid = FALSE;
1316
1317 size_metrics = &size->hinted_metrics;
1318
1319 /* copy the result from base layer */
1320 *size_metrics = size->root.metrics;
1321
1322 if ( size_metrics->x_ppem < 1 || size_metrics->y_ppem < 1 )
1323 return FT_THROW( Invalid_PPem );
1324
1325 /* This bit flag, if set, indicates that the ppems must be */
1326 /* rounded to integers. Nearly all TrueType fonts have this bit */
1327 /* set, as hinting won't work really well otherwise. */
1328 /* */
1329 if ( face->header.Flags & 8 )
1330 {
1331 /* the TT spec always asks for ROUND, not FLOOR or CEIL */
1332 size_metrics->ascender = FT_PIX_ROUND(
1333 FT_MulFix( face->root.ascender,
1334 size_metrics->y_scale ) );
1335 size_metrics->descender = FT_PIX_ROUND(
1336 FT_MulFix( face->root.descender,
1337 size_metrics->y_scale ) );
1338 size_metrics->height = FT_PIX_ROUND(
1339 FT_MulFix( face->root.height,
1340 size_metrics->y_scale ) );
1341 }
1342
1343 size->ttmetrics.valid = TRUE;
1344
1345 if ( only_height )
1346 {
1347 /* we must not recompute the scaling values here since */
1348 /* `tt_size_reset' was already called (with only_height = 0) */
1349 return FT_Err_Ok;
1350 }
1351
1352 if ( face->header.Flags & 8 )
1353 {
1354 /* base scaling values on integer ppem values, */
1355 /* as mandated by the TrueType specification */
1356 size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6,
1357 face->root.units_per_EM );
1358 size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6,
1359 face->root.units_per_EM );
1360
1361 size_metrics->max_advance = FT_PIX_ROUND(
1362 FT_MulFix( face->root.max_advance_width,
1363 size_metrics->x_scale ) );
1364 }
1365
1366 /* compute new transformation */
1367 if ( size_metrics->x_ppem >= size_metrics->y_ppem )
1368 {
1369 size->ttmetrics.scale = size_metrics->x_scale;
1370 size->ttmetrics.ppem = size_metrics->x_ppem;
1371 size->ttmetrics.x_ratio = 0x10000L;
1372 size->ttmetrics.y_ratio = FT_DivFix( size_metrics->y_ppem,
1373 size_metrics->x_ppem );
1374 }
1375 else
1376 {
1377 size->ttmetrics.scale = size_metrics->y_scale;
1378 size->ttmetrics.ppem = size_metrics->y_ppem;
1379 size->ttmetrics.x_ratio = FT_DivFix( size_metrics->x_ppem,
1380 size_metrics->y_ppem );
1381 size->ttmetrics.y_ratio = 0x10000L;
1382 }
1383
1384 size->metrics = size_metrics;
1385
1386#ifdef TT_USE_BYTECODE_INTERPRETER
1387 size->cvt_ready = -1;
1388#endif /* TT_USE_BYTECODE_INTERPRETER */
1389
1390 return FT_Err_Ok;
1391 }
#define TRUE
Definition: types.h:120
WORD face[3]
Definition: mesh.c:4747
FT_DivFix(FT_Long a, FT_Long b)
Definition: ftcalc.c:607
FT_MulFix(FT_Long a, FT_Long b)
Definition: ftcalc.c:508
#define FT_PIX_ROUND(x)
Definition: ftobjs.h:92
FT_Fixed y_scale
Definition: freetype.h:1601
FT_Fixed x_scale
Definition: freetype.h:1600
FT_Pos descender
Definition: freetype.h:1604
FT_UShort x_ppem
Definition: freetype.h:1597
FT_UShort y_ppem
Definition: freetype.h:1598
FT_Pos max_advance
Definition: freetype.h:1606

Referenced by tt_size_request().

◆ tt_slot_init()

tt_slot_init ( FT_GlyphSlot  slot)

Definition at line 1470 of file ttobjs.c.

1471 {
1472 return FT_GlyphLoader_CreateExtra( slot->internal->loader );
1473 }
FT_GlyphLoader_CreateExtra(FT_GlyphLoader loader)
Definition: ftgloadr.c:166
Definition: vfat.h:185