Index: src/base/ftobjs.c |
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c |
index 5069afb2c91e867d83f081fe09c2752c1352c8da..36ee79749fceeb5b50d55a98db3421f63717d9c8 100644 |
--- a/src/base/ftobjs.c |
+++ b/src/base/ftobjs.c |
@@ -4,7 +4,7 @@ |
/* */ |
/* The FreeType private base classes (body). */ |
/* */ |
-/* Copyright 1996-2011 by */ |
+/* Copyright 1996-2012 by */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -445,6 +445,10 @@ |
else |
prev->next = cur->next; |
+ /* finalize client-specific data */ |
+ if ( slot->generic.finalizer ) |
+ slot->generic.finalizer( slot ); |
+ |
ft_glyphslot_done( slot ); |
FT_FREE( slot ); |
break; |
@@ -620,7 +624,8 @@ |
FT_DRIVER_IS_SCALABLE( driver ) && |
FT_DRIVER_USES_OUTLINES( driver ) && |
!FT_IS_TRICKY( face ) && |
- ( ( face->internal->transform_matrix.yx == 0 && |
+ ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) || |
+ ( face->internal->transform_matrix.yx == 0 && |
face->internal->transform_matrix.xx != 0 ) || |
( face->internal->transform_matrix.xx == 0 && |
face->internal->transform_matrix.yx != 0 ) ) ) |
@@ -756,11 +761,11 @@ |
else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) |
{ |
/* apply `standard' transformation if no renderer is available */ |
- if ( &internal->transform_matrix ) |
+ if ( internal->transform_flags & 1 ) |
FT_Outline_Transform( &slot->outline, |
&internal->transform_matrix ); |
- if ( &internal->transform_delta ) |
+ if ( internal->transform_flags & 2 ) |
FT_Outline_Translate( &slot->outline, |
internal->transform_delta.x, |
internal->transform_delta.y ); |
@@ -1186,7 +1191,7 @@ |
/* there's a Mac-specific extended implementation of FT_New_Face() */ |
/* in src/base/ftmac.c */ |
-#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON ) |
+#ifndef FT_MACINTOSH |
/* documentation is in freetype.h */ |
@@ -1210,7 +1215,7 @@ |
return FT_Open_Face( library, &args, face_index, aface ); |
} |
-#endif /* defined( FT_MACINTOSH ) && !defined( DARWIN_NO_CARBON ) */ |
+#endif |
/* documentation is in freetype.h */ |
@@ -1519,7 +1524,7 @@ |
} |
-#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON ) |
+#ifndef FT_MACINTOSH |
/* The resource header says we've got resource_cnt `POST' (type1) */ |
/* resources in this file. They all need to be coalesced into */ |
@@ -1874,7 +1879,7 @@ |
for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) |
{ |
- is_darwin_vfs = raccess_rule_by_darwin_vfs( i ); |
+ is_darwin_vfs = ft_raccess_rule_by_darwin_vfs( library, i ); |
if ( is_darwin_vfs && vfs_rfork_has_no_font ) |
{ |
FT_TRACE3(( "Skip rule %d: darwin vfs resource fork" |
@@ -2613,6 +2618,18 @@ |
metrics->height = bsize->height << 6; |
metrics->max_advance = bsize->x_ppem; |
} |
+ |
+ FT_TRACE5(( "FT_Select_Metrics:\n" )); |
+ FT_TRACE5(( " x scale: %d (%f)\n", |
+ metrics->x_scale, metrics->x_scale / 65536.0 )); |
+ FT_TRACE5(( " y scale: %d (%f)\n", |
+ metrics->y_scale, metrics->y_scale / 65536.0 )); |
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); |
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); |
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 )); |
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 )); |
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); |
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); |
} |
@@ -2721,6 +2738,18 @@ |
metrics->x_scale = 1L << 16; |
metrics->y_scale = 1L << 16; |
} |
+ |
+ FT_TRACE5(( "FT_Request_Metrics:\n" )); |
+ FT_TRACE5(( " x scale: %d (%f)\n", |
+ metrics->x_scale, metrics->x_scale / 65536.0 )); |
+ FT_TRACE5(( " y scale: %d (%f)\n", |
+ metrics->y_scale, metrics->y_scale / 65536.0 )); |
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); |
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); |
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 )); |
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 )); |
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); |
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); |
} |
@@ -2742,7 +2771,33 @@ |
clazz = face->driver->clazz; |
if ( clazz->select_size ) |
- return clazz->select_size( face->size, (FT_ULong)strike_index ); |
+ { |
+ FT_Error error; |
+ |
+ |
+ error = clazz->select_size( face->size, (FT_ULong)strike_index ); |
+ |
+#ifdef FT_DEBUG_LEVEL_TRACE |
+ { |
+ FT_Size_Metrics* metrics = &face->size->metrics; |
+ |
+ |
+ FT_TRACE5(( "FT_Select_Size (font driver's `select_size'):\n" )); |
+ FT_TRACE5(( " x scale: %d (%f)\n", |
+ metrics->x_scale, metrics->x_scale / 65536.0 )); |
+ FT_TRACE5(( " y scale: %d (%f)\n", |
+ metrics->y_scale, metrics->y_scale / 65536.0 )); |
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); |
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); |
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 )); |
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 )); |
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); |
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); |
+ } |
+#endif |
+ |
+ return error; |
+ } |
FT_Select_Metrics( face, (FT_ULong)strike_index ); |
@@ -2770,7 +2825,33 @@ |
clazz = face->driver->clazz; |
if ( clazz->request_size ) |
- return clazz->request_size( face->size, req ); |
+ { |
+ FT_Error error; |
+ |
+ |
+ error = clazz->request_size( face->size, req ); |
+ |
+#ifdef FT_DEBUG_LEVEL_TRACE |
+ { |
+ FT_Size_Metrics* metrics = &face->size->metrics; |
+ |
+ |
+ FT_TRACE5(( "FT_Request_Size (font driver's `request_size'):\n" )); |
+ FT_TRACE5(( " x scale: %d (%f)\n", |
+ metrics->x_scale, metrics->x_scale / 65536.0 )); |
+ FT_TRACE5(( " y scale: %d (%f)\n", |
+ metrics->y_scale, metrics->y_scale / 65536.0 )); |
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); |
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); |
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 )); |
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 )); |
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); |
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); |
+ } |
+#endif |
+ |
+ return error; |
+ } |
/* |
* The reason that a driver doesn't have `request_size' defined is |
@@ -4008,10 +4089,10 @@ |
/* all child faces. */ |
/* */ |
/* <InOut> */ |
- /* module :: A handle to the target driver object. */ |
+ /* module :: A handle to the target driver object. */ |
/* */ |
/* <Note> */ |
- /* The driver _must_ be LOCKED! */ |
+ /* The driver _must_ be LOCKED! */ |
/* */ |
static void |
Destroy_Module( FT_Module module ) |
@@ -4021,10 +4102,6 @@ |
FT_Library library = module->library; |
- /* finalize client-data - before anything else */ |
- if ( module->generic.finalizer ) |
- module->generic.finalizer( module ); |
- |
if ( library && library->auto_hinter == module ) |
library->auto_hinter = 0; |
@@ -4241,6 +4318,7 @@ |
FT_Module* cur = library->modules; |
FT_Module* limit = cur + library->num_modules; |
+ |
for ( ; cur < limit; cur++ ) |
{ |
if ( cur[0] != module ) |
@@ -4434,10 +4512,6 @@ |
memory = library->memory; |
- /* Discard client-data */ |
- if ( library->generic.finalizer ) |
- library->generic.finalizer( library ); |
- |
/* |
* Close all faces in the library. If we don't do this, we can have |
* some subtle memory leaks. |