summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/freetype/src/cid/cidgload.c
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2013-03-26 08:57:05 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-01 12:03:55 +0200
commit6845a4fb0147117e8517d66f18792ca7acdbe06e (patch)
tree68e35417b79989a7af8a4ea8c0d282b84dbe0a6e /src/3rdparty/freetype/src/cid/cidgload.c
parent0fcadcca3d0842354de07ffaa8c622e607aab22c (diff)
Update bundled FreeType sources to 2.3.12
Most important changes: * SFNT cmap 13 table format support; * fixed glitches when rasterizing stretched TTF (xsize!=ysize); * various fixes in Type1, CFF, and PCF drivers Change-Id: Ib9e2210ffbd0daa2fdbf518ea87f4be502de6b48 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/3rdparty/freetype/src/cid/cidgload.c')
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.c70
1 files changed, 40 insertions, 30 deletions
diff --git a/src/3rdparty/freetype/src/cid/cidgload.c b/src/3rdparty/freetype/src/cid/cidgload.c
index 64994b4419..ea61b4e128 100644
--- a/src/3rdparty/freetype/src/cid/cidgload.c
+++ b/src/3rdparty/freetype/src/cid/cidgload.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 Glyph Loader (body). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,6 +22,7 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_OUTLINE_H
+#include FT_INTERNAL_CALC_H
#include "ciderrs.h"
@@ -51,20 +52,25 @@
FT_ULong glyph_length = 0;
PSAux_Service psaux = (PSAux_Service)face->psaux;
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ FT_Incremental_InterfaceRec *inc =
+ face->root.internal->incremental_interface;
+#endif
+
+
+ FT_TRACE4(( "cid_load_glyph: glyph index %d\n", glyph_index ));
#ifdef FT_CONFIG_OPTION_INCREMENTAL
/* For incremental fonts get the character data using */
/* the callback function. */
- if ( face->root.internal->incremental_interface )
+ if ( inc )
{
FT_Data glyph_data;
- error = face->root.internal->incremental_interface->funcs->get_glyph_data(
- face->root.internal->incremental_interface->object,
- glyph_index,
- &glyph_data );
+ error = inc->funcs->get_glyph_data( inc->object,
+ glyph_index, &glyph_data );
if ( error )
goto Exit;
@@ -80,9 +86,7 @@
glyph_length );
}
- face->root.internal->incremental_interface->funcs->free_glyph_data(
- face->root.internal->incremental_interface->object,
- &glyph_data );
+ inc->funcs->free_glyph_data( inc->object, &glyph_data );
if ( error )
goto Exit;
@@ -163,23 +167,22 @@
#ifdef FT_CONFIG_OPTION_INCREMENTAL
/* Incremental fonts can optionally override the metrics. */
- if ( !error &&
- face->root.internal->incremental_interface &&
- face->root.internal->incremental_interface->funcs->get_glyph_metrics )
+ if ( !error && inc && inc->funcs->get_glyph_metrics )
{
FT_Incremental_MetricsRec metrics;
- metrics.bearing_x = decoder->builder.left_bearing.x;
- metrics.bearing_y = decoder->builder.left_bearing.y;
- metrics.advance = decoder->builder.advance.x;
- error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
- face->root.internal->incremental_interface->object,
- glyph_index, FALSE, &metrics );
- decoder->builder.left_bearing.x = metrics.bearing_x;
- decoder->builder.left_bearing.y = metrics.bearing_y;
- decoder->builder.advance.x = metrics.advance;
- decoder->builder.advance.y = 0;
+ metrics.bearing_x = FIXED_TO_INT( decoder->builder.left_bearing.x );
+ metrics.bearing_y = 0;
+ metrics.advance = FIXED_TO_INT( decoder->builder.advance.x );
+ metrics.advance_v = FIXED_TO_INT( decoder->builder.advance.y );
+
+ error = inc->funcs->get_glyph_metrics( inc->object,
+ glyph_index, FALSE, &metrics );
+
+ decoder->builder.left_bearing.x = INT_TO_FIXED( metrics.bearing_x );
+ decoder->builder.advance.x = INT_TO_FIXED( metrics.advance );
+ decoder->builder.advance.y = INT_TO_FIXED( metrics.advance_v );
}
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
@@ -251,7 +254,7 @@
/* ignore the error if one occurred - skip to next glyph */
}
- *max_advance = decoder.builder.advance.x;
+ *max_advance = FIXED_TO_INT( decoder.builder.advance.x );
psaux->t1_decoder_funcs->done( &decoder );
@@ -342,8 +345,10 @@
FT_Slot_Internal internal = cidglyph->internal;
- cidglyph->metrics.horiBearingX = decoder.builder.left_bearing.x;
- cidglyph->metrics.horiAdvance = decoder.builder.advance.x;
+ cidglyph->metrics.horiBearingX =
+ FIXED_TO_INT( decoder.builder.left_bearing.x );
+ cidglyph->metrics.horiAdvance =
+ FIXED_TO_INT( decoder.builder.advance.x );
internal->glyph_matrix = font_matrix;
internal->glyph_delta = font_offset;
@@ -357,8 +362,10 @@
/* copy the _unscaled_ advance width */
- metrics->horiAdvance = decoder.builder.advance.x;
- cidglyph->linearHoriAdvance = decoder.builder.advance.x;
+ metrics->horiAdvance =
+ FIXED_TO_INT( decoder.builder.advance.x );
+ cidglyph->linearHoriAdvance =
+ FIXED_TO_INT( decoder.builder.advance.x );
cidglyph->internal->glyph_transformed = 0;
/* make up vertical ones */
@@ -420,9 +427,12 @@
metrics->horiBearingX = cbox.xMin;
metrics->horiBearingY = cbox.yMax;
- /* make up vertical ones */
- ft_synthesize_vertical_metrics( metrics,
- metrics->vertAdvance );
+ if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
+ {
+ /* make up vertical ones */
+ ft_synthesize_vertical_metrics( metrics,
+ metrics->vertAdvance );
+ }
}
Exit: