ReactOS 0.4.16-dev-1067-ge98bba2
ttobjs.h File Reference
#include <ft2build.h>
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 417 of file ttobjs.h.

◆ TT_MAX_CODE_RANGES

#define TT_MAX_CODE_RANGES   3

Definition at line 125 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 152 of file ttobjs.h.

◆ TT_DefArray

◆ TT_DefRecord

◆ TT_Driver

typedef typedefFT_BEGIN_HEADER struct TT_DriverRec_* TT_Driver

Definition at line 39 of file ttobjs.h.

◆ TT_DriverRec

◆ TT_GlyphSlot

Definition at line 54 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 135 of file ttobjs.h.

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

Function Documentation

◆ tt_driver_done()

tt_driver_done ( FT_Module  ttdriver)

Definition at line 1440 of file ttobjs.c.

1441 {
1442 FT_UNUSED( ttdriver );
1443 }
#define FT_UNUSED(arg)
Definition: ftconfig.h:100

◆ tt_driver_init()

tt_driver_init ( FT_Module  ttdriver)

Definition at line 1402 of file ttobjs.c.

1403 {
1404
1405#ifdef TT_USE_BYTECODE_INTERPRETER
1406
1407 TT_Driver driver = (TT_Driver)ttdriver;
1408
1409 driver->interpreter_version = TT_INTERPRETER_VERSION_35;
1410#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1411 driver->interpreter_version = TT_INTERPRETER_VERSION_38;
1412#endif
1413#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1414 driver->interpreter_version = TT_INTERPRETER_VERSION_40;
1415#endif
1416
1417#else /* !TT_USE_BYTECODE_INTERPRETER */
1418
1419 FT_UNUSED( ttdriver );
1420
1421#endif /* !TT_USE_BYTECODE_INTERPRETER */
1422
1423 return FT_Err_Ok;
1424 }
return FT_Err_Ok
Definition: ftbbox.c:527
#define TT_INTERPRETER_VERSION_38
Definition: ftdriver.h:749
#define TT_INTERPRETER_VERSION_40
Definition: ftdriver.h:750
#define TT_INTERPRETER_VERSION_35
Definition: ftdriver.h:748
struct @1717::@1718 driver
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
Definition: ttobjs.h:39

◆ tt_face_done()

tt_face_done ( FT_Face  ttface)

Definition at line 769 of file ttobjs.c.

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

◆ 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 606 of file ttobjs.c.

611 {
615 TT_Face face = (TT_Face)ttface;
616
617
618 FT_TRACE2(( "TTF driver\n" ));
619
620 library = ttface->driver->root.library;
621
623 if ( !sfnt )
624 {
625 FT_ERROR(( "tt_face_init: cannot access `sfnt' module\n" ));
626 error = FT_THROW( Missing_Module );
627 goto Exit;
628 }
629
630 /* create input stream from resource */
631 if ( FT_STREAM_SEEK( 0 ) )
632 goto Exit;
633
634 /* check that we have a valid TrueType file */
635 FT_TRACE2(( " " ));
636 error = sfnt->init_face( stream, face, face_index, num_params, params );
637
638 /* Stream may have changed. */
639 stream = face->root.stream;
640
641 if ( error )
642 goto Exit;
643
644 /* We must also be able to accept Mac/GX fonts, as well as OT ones. */
645 /* The 0x00020000 tag is completely undocumented; some fonts from */
646 /* Arphic made for Chinese Windows 3.1 have this. */
647 if ( face->format_tag != 0x00010000L && /* MS fonts */
648 face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */
649 face->format_tag != TTAG_true && /* Mac fonts */
650 face->format_tag != TTAG_0xA5kbd && /* `Keyboard.dfont' (legacy Mac OS X) */
651 face->format_tag != TTAG_0xA5lst ) /* `LastResort.dfont' (legacy Mac OS X) */
652 {
653 FT_TRACE2(( " not a TTF font\n" ));
654 goto Bad_Format;
655 }
656
657#ifdef TT_USE_BYTECODE_INTERPRETER
659#endif
660
661 /* If we are performing a simple font format check, exit immediately. */
662 if ( face_index < 0 )
663 return FT_Err_Ok;
664
665 /* Load font directory */
666 error = sfnt->load_face( stream, face, face_index, num_params, params );
667 if ( error )
668 goto Exit;
669
670 if ( tt_check_trickyness( ttface ) )
672
674 if ( error )
675 goto Exit;
676
677 if ( FT_IS_SCALABLE( ttface ) )
678 {
679#ifdef FT_CONFIG_OPTION_INCREMENTAL
680 if ( !ttface->internal->incremental_interface )
681#endif
682 {
684
685 /* having a (non-zero) `glyf' table without */
686 /* a `loca' table is not valid */
687 if ( face->glyf_len && FT_ERR_EQ( error, Table_Missing ) )
688 goto Exit;
689 if ( error )
690 goto Exit;
691 }
692
693 /* `fpgm', `cvt', and `prep' are optional */
695 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
696 goto Exit;
697
699 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
700 goto Exit;
701
703 if ( error && FT_ERR_NEQ( error, Table_Missing ) )
704 goto Exit;
705
706 /* Check the scalable flag based on `loca'. */
707#ifdef FT_CONFIG_OPTION_INCREMENTAL
708 if ( !ttface->internal->incremental_interface )
709#endif
710 {
711 if ( ttface->num_fixed_sizes &&
712 face->glyph_locations &&
713 tt_check_single_notdef( ttface ) )
714 {
715 FT_TRACE5(( "tt_face_init:"
716 " Only the `.notdef' glyph has an outline.\n"
717 " "
718 " Resetting scalable flag to FALSE.\n" ));
719
720 ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
721 }
722 }
723 }
724
725#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
726
727 {
728 FT_UInt instance_index = (FT_UInt)face_index >> 16;
729
730
731 if ( FT_HAS_MULTIPLE_MASTERS( ttface ) &&
732 instance_index > 0 )
733 {
734 error = TT_Set_Named_Instance( face, instance_index );
735 if ( error )
736 goto Exit;
737
738 tt_apply_mvar( face );
739 }
740 }
741
742#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
743
744 /* initialize standard glyph loading routines */
746
747 Exit:
748 return error;
749
750 Bad_Format:
751 error = FT_THROW( Unknown_File_Format );
752 goto Exit;
753 }
FT_Library library
Definition: cffdrivr.c:661
#define FT_FACE_FLAG_HINTER
Definition: freetype.h:1221
#define FT_HAS_MULTIPLE_MASTERS(face)
Definition: freetype.h:1374
#define FT_IS_SCALABLE(face)
Definition: freetype.h:1284
#define FT_FACE_FLAG_TRICKY
Definition: freetype.h:1223
#define FT_ERROR(varformat)
Definition: ftdebug.h:209
#define FT_TRACE5(varformat)
Definition: ftdebug.h:190
#define FT_THROW(e)
Definition: ftdebug.h:241
#define FT_TRACE2(varformat)
Definition: ftdebug.h:187
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
Definition: ftobjs.c:4992
#define FT_STREAM_SEEK(position)
Definition: ftstream.h:514
#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:803
FT_Driver driver
Definition: freetype.h:1084
FT_Int num_fixed_sizes
Definition: freetype.h:1054
FT_Face_Internal internal
Definition: freetype.h:1093
FT_Long face_flags
Definition: freetype.h:1046
FT_Library library
Definition: ftobjs.h:503
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:761
static FT_Bool tt_check_trickyness(FT_Face face)
Definition: ttobjs.c:506
static FT_Bool tt_check_single_notdef(FT_Face ttface)
Definition: ttobjs.c:528
tt_face_load_prep(TT_Face face, FT_Stream stream)
Definition: ttpload.c:469
tt_face_load_cvt(TT_Face face, FT_Stream stream)
Definition: ttpload.c:322
tt_face_load_fpgm(TT_Face face, FT_Stream stream)
Definition: ttpload.c:405
tt_face_load_hdmx(TT_Face face, FT_Stream stream)
Definition: ttpload.c:532
tt_face_load_loca(TT_Face face, FT_Stream stream)
Definition: ttpload.c:64
#define TTAG_true
Definition: tttags.h:100
#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 1262 of file ttobjs.c.

1263 {
1264 TT_Size size = (TT_Size)ttsize;
1265
1266
1267#ifdef TT_USE_BYTECODE_INTERPRETER
1268 tt_size_done_bytecode( ttsize );
1269#endif
1270
1271 size->ttmetrics.valid = FALSE;
1272 }
#define FALSE
Definition: types.h:117
GLsizeiptr size
Definition: glext.h:5919
struct TT_SizeRec_ * TT_Size
Definition: tttypes.h:1796

◆ tt_size_init()

tt_size_init ( FT_Size  ttsize)

Definition at line 1231 of file ttobjs.c.

1232 {
1233 TT_Size size = (TT_Size)ttsize;
1235
1236
1237#ifdef TT_USE_BYTECODE_INTERPRETER
1238 size->bytecode_ready = -1;
1239 size->cvt_ready = -1;
1240#endif
1241
1242 size->ttmetrics.valid = FALSE;
1243 size->strike_index = 0xFFFFFFFFUL;
1244
1245 return error;
1246 }

◆ tt_size_reset()

tt_size_reset ( TT_Size  size,
FT_Bool  only_height 
)

Definition at line 1294 of file ttobjs.c.

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

Referenced by tt_size_request().

◆ tt_slot_init()

tt_slot_init ( FT_GlyphSlot  slot)

Definition at line 1462 of file ttobjs.c.

1463 {
1464 return FT_GlyphLoader_CreateExtra( slot->internal->loader );
1465 }
FT_GlyphLoader_CreateExtra(FT_GlyphLoader loader)
Definition: ftgloadr.c:166
Definition: vfat.h:185