ReactOS 0.4.16-dev-2354-g16de117
ttdriver.c File Reference
Include dependency graph for ttdriver.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define FT_COMPONENT   ttdriver
 
#define TT_HINTER_FLAG   0
 
#define TT_SIZE_SELECT   0
 

Functions

static FT_Error tt_property_set (FT_Module module, const char *property_name, const void *value, FT_Bool value_is_string)
 
static FT_Error tt_property_get (FT_Module module, const char *property_name, const void *value)
 
 FT_DEFINE_SERVICE_PROPERTIESREC (tt_service_properties,(FT_Properties_SetFunc) tt_property_set,(FT_Properties_GetFunc) tt_property_get) static FT_Error tt_get_kerning(FT_Face ttface
 
 if (sfnt)
 
static FT_Error tt_size_request (FT_Size size, FT_Size_Request req)
 
static FT_Error tt_glyph_load (FT_GlyphSlot ttslot, FT_Size ttsize, FT_UInt glyph_index, FT_Int32 load_flags)
 
 FT_DEFINE_SERVICE_TTGLYFREC (tt_service_truetype_glyf,(TT_Glyf_GetLocationFunc) tt_face_get_location) FT_DEFINE_SERVICEDESCREC4(tt_services
 
&tt_service_properties tt_get_interface (FT_Module driver, const char *tt_interface)
 

Variables

FT_UInt left_glyph
 
FT_UInt FT_UInt right_glyph
 
FT_UInt FT_UInt FT_Vectorkerning
 
SFNT_Service sfnt = (SFNT_Service)face->sfnt
 
kerning x = 0
 
kerning y = 0
 
static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine
 
 FT_SERVICE_ID_FONT_FORMAT
 
 FT_FONT_FORMAT_TRUETYPE
 
 FT_SERVICE_ID_TRUETYPE_ENGINE
 
 FT_SERVICE_ID_TT_GLYF
 
tt_service_truetype_glyf
 
 FT_SERVICE_ID_PROPERTIES
 

Macro Definition Documentation

◆ FT_COMPONENT

#define FT_COMPONENT   ttdriver

Definition at line 53 of file ttdriver.c.

◆ TT_HINTER_FLAG

#define TT_HINTER_FLAG   0

Definition at line 613 of file ttdriver.c.

◆ TT_SIZE_SELECT

#define TT_SIZE_SELECT   0

Definition at line 619 of file ttdriver.c.

Function Documentation

◆ FT_DEFINE_SERVICE_PROPERTIESREC()

FT_DEFINE_SERVICE_PROPERTIESREC ( tt_service_properties  ,
(FT_Properties_SetFunc tt_property_set,
(FT_Properties_GetFunc tt_property_get 
)

◆ FT_DEFINE_SERVICE_TTGLYFREC()

FT_DEFINE_SERVICE_TTGLYFREC ( tt_service_truetype_glyf  ,
(TT_Glyf_GetLocationFunc tt_face_get_location 
)

◆ if()

if ( sfnt  )

Definition at line 214 of file ttdriver.c.

227 {
228 FT_UInt nn;
229 TT_Face face = (TT_Face)ttface;
230
231
232 /* XXX: TODO: check for sbits */
233
235 {
236#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
237 /* no fast retrieval for blended MM fonts without VVAR table */
238 if ( ( FT_IS_NAMED_INSTANCE( ttface ) || FT_IS_VARIATION( ttface ) ) &&
239 !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
240 return FT_THROW( Unimplemented_Feature );
241#endif
242
243 for ( nn = 0; nn < count; nn++ )
244 {
245 FT_Short tsb;
246 FT_UShort ah;
247
248
249 /* since we don't need `tsb', we use zero for `yMax' parameter */
250 TT_Get_VMetrics( face, start + nn, 0, &tsb, &ah );
251 advances[nn] = ah;
252 }
253 }
254 else
255 {
256#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
257 /* no fast retrieval for blended MM fonts without HVAR table */
258 if ( ( FT_IS_NAMED_INSTANCE( ttface ) || FT_IS_VARIATION( ttface ) ) &&
259 !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
260 return FT_THROW( Unimplemented_Feature );
261#endif
262
263 for ( nn = 0; nn < count; nn++ )
264 {
265 FT_Short lsb;
266 FT_UShort aw;
267
268
269 TT_Get_HMetrics( face, start + nn, &lsb, &aw );
270 advances[nn] = aw;
271 }
272 }
273
274 return FT_Err_Ok;
275 }
#define FT_LOAD_VERTICAL_LAYOUT
Definition: freetype.h:3026
#define FT_IS_VARIATION(face)
Definition: freetype.h:1401
#define FT_IS_NAMED_INSTANCE(face)
Definition: freetype.h:1383
return FT_Err_Ok
Definition: ftbbox.c:526
#define FT_THROW(e)
Definition: ftdebug.h:243
unsigned short FT_UShort
Definition: fttypes.h:209
signed short FT_Short
Definition: fttypes.h:198
unsigned int FT_UInt
Definition: fttypes.h:231
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLbitfield flags
Definition: glext.h:7161
TT_Get_HMetrics(TT_Face face, FT_UInt idx, FT_Short *lsb, FT_UShort *aw)
Definition: ttgload.c:99
TT_Get_VMetrics(TT_Face face, FT_UInt idx, FT_Pos yMax, FT_Short *tsb, FT_UShort *ah)
Definition: ttgload.c:117
#define TT_FACE_FLAG_VAR_HADVANCE
Definition: tttypes.h:1135
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:988
#define TT_FACE_FLAG_VAR_VADVANCE
Definition: tttypes.h:1140

◆ tt_get_interface()

&tt_service_properties tt_get_interface ( FT_Module  driver,
const char tt_interface 
)

Definition at line 576 of file ttdriver.c.

578 {
581 FT_Module sfntd;
583
584
585 result = ft_service_list_lookup( tt_services, tt_interface );
586 if ( result )
587 return result;
588
589 if ( !driver )
590 return NULL;
591 library = driver->library;
592 if ( !library )
593 return NULL;
594
595 /* only return the default interface from the SFNT module */
596 sfntd = FT_Get_Module( library, "sfnt" );
597 if ( sfntd )
598 {
600 if ( sfnt )
601 return sfnt->get_interface( driver, tt_interface );
602 }
603
604 return 0;
605 }
FT_Library library
Definition: cffdrivr.c:660
#define NULL
Definition: types.h:112
FT_Get_Module(FT_Library library, const char *module_name)
Definition: ftobjs.c:4984
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
Definition: ftobjs.c:109
GLuint64EXT * result
Definition: glext.h:11304
struct @1789::@1790 driver
SFNT_Interface * SFNT_Service
Definition: sfnt.h:784
FT_Module_Class * clazz
Definition: ftobjs.h:500
const void * module_interface
Definition: ftmodapi.h:240
FT_Module_Requester get_interface
Definition: sfnt.h:717
SFNT_Service sfnt
Definition: ttdriver.c:208

◆ tt_glyph_load()

static FT_Error tt_glyph_load ( FT_GlyphSlot  ttslot,
FT_Size  ttsize,
FT_UInt  glyph_index,
FT_Int32  load_flags 
)
static

Definition at line 420 of file ttdriver.c.

424 {
426 TT_Size size = (TT_Size)ttsize;
427 FT_Face face = ttslot->face;
429
430
431 if ( !slot )
432 return FT_THROW( Invalid_Slot_Handle );
433
434 if ( !size )
435 return FT_THROW( Invalid_Size_Handle );
436
437 if ( !face )
438 return FT_THROW( Invalid_Face_Handle );
439
440#ifdef FT_CONFIG_OPTION_INCREMENTAL
441 if ( glyph_index >= (FT_UInt)face->num_glyphs &&
442 !face->internal->incremental_interface )
443#else
444 if ( glyph_index >= (FT_UInt)face->num_glyphs )
445#endif
446 return FT_THROW( Invalid_Argument );
447
448 if ( load_flags & FT_LOAD_NO_HINTING )
449 {
450 /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */
451 /* are necessary to disable hinting for tricky fonts */
452
453 if ( FT_IS_TRICKY( face ) )
454 load_flags &= ~FT_LOAD_NO_HINTING;
455
456 if ( load_flags & FT_LOAD_NO_AUTOHINT )
457 load_flags |= FT_LOAD_NO_HINTING;
458 }
459
460 if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) )
461 {
462 load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE;
463
464 if ( !FT_IS_TRICKY( face ) )
465 load_flags |= FT_LOAD_NO_HINTING;
466 }
467
468 /* use hinted metrics only if we load a glyph with hinting */
469 size->metrics = ( load_flags & FT_LOAD_NO_HINTING )
470 ? &ttsize->metrics
471 : &size->hinted_metrics;
472
473 /* now fill in the glyph slot with outline/bitmap/layered */
474 error = TT_Load_Glyph( size, slot, glyph_index, load_flags );
475
476 /* force drop-out mode to 2 - irrelevant now */
477 /* slot->outline.dropout_mode = 2; */
478
479 return error;
480 }
#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_NO_HINTING
Definition: freetype.h:3023
#define FT_LOAD_NO_AUTOHINT
Definition: freetype.h:3035
#define FT_IS_TRICKY(face)
Definition: freetype.h:1432
int FT_Error
Definition: fttypes.h:299
GLsizeiptr size
Definition: glext.h:5919
#define error(str)
Definition: mkdosfs.c:1605
FT_Size_Metrics metrics
Definition: freetype.h:1636
Definition: vfat.h:185
TT_Load_Glyph(TT_Size size, TT_GlyphSlot glyph, FT_UInt glyph_index, FT_Int32 load_flags)
Definition: ttgload.c:2807
FT_GlyphSlot TT_GlyphSlot
Definition: ttobjs.h:53
struct TT_SizeRec_ * TT_Size
Definition: tttypes.h:1722

◆ tt_property_get()

static FT_Error tt_property_get ( FT_Module  module,
const char property_name,
const void value 
)
static

Definition at line 118 of file ttdriver.c.

121 {
124
125 FT_UInt interpreter_version = driver->interpreter_version;
126
127
128 if ( !ft_strcmp( property_name, "interpreter-version" ) )
129 {
131
132
133 *val = interpreter_version;
134
135 return error;
136 }
137
138 FT_TRACE0(( "tt_property_get: missing property `%s'\n",
139 property_name ));
140 return FT_THROW( Missing_Property );
141 }
#define FT_TRACE0(varformat)
Definition: ftdebug.h:187
#define ft_strcmp
Definition: ftstdlib.h:86
GLuint GLfloat * val
Definition: glext.h:7180
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
Definition: ttobjs.h:38
Definition: pdh_main.c:96

◆ tt_property_set()

static FT_Error tt_property_set ( FT_Module  module,
const char property_name,
const void value,
FT_Bool  value_is_string 
)
static

Definition at line 61 of file ttdriver.c.

65 {
68
69#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
70 FT_UNUSED( value_is_string );
71#endif
72
73
74 if ( !ft_strcmp( property_name, "interpreter-version" ) )
75 {
76 FT_UInt interpreter_version;
77
78
79#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
80 if ( value_is_string )
81 {
82 const char* s = (const char*)value;
83
84
85 interpreter_version = (FT_UInt)ft_strtol( s, NULL, 10 );
86 }
87 else
88#endif
89 {
90 FT_UInt* iv = (FT_UInt*)value;
91
92
93 interpreter_version = *iv;
94 }
95
96 if ( interpreter_version == TT_INTERPRETER_VERSION_35
97#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
98 || interpreter_version == TT_INTERPRETER_VERSION_38
99#endif
101 || interpreter_version == TT_INTERPRETER_VERSION_40
102#endif
103 )
104 driver->interpreter_version = interpreter_version;
105 else
106 error = FT_ERR( Unimplemented_Feature );
107
108 return error;
109 }
110
111 FT_TRACE0(( "tt_property_set: missing property `%s'\n",
112 property_name ));
113 return FT_THROW( Missing_Property );
114 }
#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
#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
Definition: ftoption.h:968
#define ft_strtol
Definition: ftstdlib.h:145
#define FT_ERR(e)
Definition: fttypes.h:599
GLdouble s
Definition: gl.h:2039
#define FT_UNUSED(arg)

◆ tt_size_request()

static FT_Error tt_size_request ( FT_Size  size,
FT_Size_Request  req 
)
static

Definition at line 331 of file ttdriver.c.

333 {
334 TT_Size ttsize = (TT_Size)size;
336
337
338#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
339
340 if ( FT_HAS_FIXED_SIZES( size->face ) )
341 {
342 TT_Face ttface = (TT_Face)size->face;
344 FT_ULong strike_index;
345
346
347 error = sfnt->set_sbit_strike( ttface, req, &strike_index );
348
349 if ( error )
350 ttsize->strike_index = 0xFFFFFFFFUL;
351 else
352 return tt_size_select( size, strike_index );
353 }
354
355#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
356
357 FT_Request_Metrics( size->face, req );
358
359 if ( FT_IS_SCALABLE( size->face ) )
360 {
361 error = tt_size_reset( ttsize, 0 );
362
363#ifdef TT_USE_BYTECODE_INTERPRETER
364 /* for the `MPS' bytecode instruction we need the point size */
365 if ( !error )
366 {
367 FT_UInt resolution =
368 ttsize->metrics->x_ppem > ttsize->metrics->y_ppem
369 ? req->horiResolution
370 : req->vertResolution;
371
372
373 /* if we don't have a resolution value, assume 72dpi */
374 if ( req->type == FT_SIZE_REQUEST_TYPE_SCALES ||
375 !resolution )
376 resolution = 72;
377
378 ttsize->point_size = FT_MulDiv( ttsize->ttmetrics.ppem,
379 64 * 72,
380 resolution );
381 }
382#endif
383 }
384
385 return error;
386 }
@ FT_SIZE_REQUEST_TYPE_SCALES
Definition: freetype.h:2556
#define FT_HAS_FIXED_SIZES(face)
Definition: freetype.h:1320
#define FT_IS_SCALABLE(face)
Definition: freetype.h:1271
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
Definition: ftcalc.c:415
FT_Request_Metrics(FT_Face face, FT_Size_Request req)
Definition: ftobjs.c:3092
unsigned long FT_ULong
Definition: fttypes.h:253
FT_UShort x_ppem
Definition: freetype.h:1597
FT_UShort y_ppem
Definition: freetype.h:1598
FT_UInt horiResolution
Definition: freetype.h:2607
FT_Size_Request_Type type
Definition: freetype.h:2604
FT_UInt vertResolution
Definition: freetype.h:2608
TT_Set_SBit_Strike_Func set_sbit_strike
Definition: sfnt.h:764
void * sfnt
Definition: tttypes.h:1499
FT_Size_Metrics * metrics
Definition: ttobjs.h:280
TT_Size_Metrics ttmetrics
Definition: ttobjs.h:283
FT_ULong strike_index
Definition: ttobjs.h:285
FT_UShort ppem
Definition: ttobjs.h:256
tt_size_reset(TT_Size size, FT_Bool only_height)
Definition: ttobjs.c:1302

Variable Documentation

◆ FT_FONT_FORMAT_TRUETYPE

FT_FONT_FORMAT_TRUETYPE

Definition at line 568 of file ttdriver.c.

◆ FT_SERVICE_ID_FONT_FORMAT

FT_SERVICE_ID_FONT_FORMAT

Definition at line 568 of file ttdriver.c.

◆ FT_SERVICE_ID_PROPERTIES

FT_SERVICE_ID_PROPERTIES

Definition at line 571 of file ttdriver.c.

◆ FT_SERVICE_ID_TRUETYPE_ENGINE

FT_SERVICE_ID_TRUETYPE_ENGINE

Definition at line 569 of file ttdriver.c.

◆ FT_SERVICE_ID_TT_GLYF

FT_SERVICE_ID_TT_GLYF

Definition at line 570 of file ttdriver.c.

◆ kerning

◆ left_glyph

FT_UInt left_glyph

Definition at line 203 of file ttdriver.c.

Referenced by cff_get_kerning(), FT_Get_Kerning(), Get_Kerning(), and tt_face_get_kerning().

◆ right_glyph

FT_UInt FT_UInt right_glyph

Definition at line 204 of file ttdriver.c.

Referenced by cff_get_kerning(), FT_Get_Kerning(), Get_Kerning(), and tt_face_get_kerning().

◆ sfnt

◆ tt_service_truetype_engine

& tt_service_truetype_engine
static
Initial value:
=
{
}
@ FT_TRUETYPE_ENGINE_TYPE_NONE
Definition: ftmodapi.h:746

Definition at line 533 of file ttdriver.c.

◆ tt_service_truetype_glyf

& tt_service_truetype_glyf

Definition at line 570 of file ttdriver.c.

◆ x

kerning x = 0

Definition at line 211 of file ttdriver.c.

◆ y

kerning y = 0

Definition at line 212 of file ttdriver.c.