summaryrefslogtreecommitdiffstats
path: root/src/sfnt/ttsbit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sfnt/ttsbit.c')
-rw-r--r--src/sfnt/ttsbit.c47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c
index 7469ff1..180d559 100644
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded bitmap support (body). */
/* */
-/* Copyright 2005-2009, 2013 by */
+/* Copyright 2005-2009, 2013, 2014 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Copyright 2013 by Google, Inc. */
@@ -256,7 +256,8 @@
case TT_SBIT_TABLE_TYPE_SBIX:
{
FT_Stream stream = face->root.stream;
- FT_UInt offset, ppem, resolution, upem;
+ FT_UInt offset, upem;
+ FT_UShort ppem, resolution;
TT_HoriHeader *hori;
FT_ULong table_size;
@@ -800,12 +801,12 @@
FT_Error error = FT_Err_Ok;
FT_UInt num_components, nn;
- FT_Char horiBearingX = decoder->metrics->horiBearingX;
- FT_Char horiBearingY = decoder->metrics->horiBearingY;
- FT_Byte horiAdvance = decoder->metrics->horiAdvance;
- FT_Char vertBearingX = decoder->metrics->vertBearingX;
- FT_Char vertBearingY = decoder->metrics->vertBearingY;
- FT_Byte vertAdvance = decoder->metrics->vertAdvance;
+ FT_Char horiBearingX = (FT_Char)decoder->metrics->horiBearingX;
+ FT_Char horiBearingY = (FT_Char)decoder->metrics->horiBearingY;
+ FT_Byte horiAdvance = (FT_Byte)decoder->metrics->horiAdvance;
+ FT_Char vertBearingX = (FT_Char)decoder->metrics->vertBearingX;
+ FT_Char vertBearingY = (FT_Char)decoder->metrics->vertBearingY;
+ FT_Byte vertAdvance = (FT_Byte)decoder->metrics->vertAdvance;
if ( p + 2 > limit )
@@ -967,7 +968,6 @@
break;
case 2:
- case 5:
case 7:
{
/* Don't trust `glyph_format'. For example, Apple's main Korean */
@@ -997,6 +997,10 @@
}
break;
+ case 5:
+ loader = tt_sbit_decoder_load_bit_aligned;
+ break;
+
case 8:
if ( p + 1 > p_limit )
goto Fail;
@@ -1013,10 +1017,11 @@
case 19: /* metrics in EBLC, PNG image data */
#ifdef FT_CONFIG_OPTION_USE_PNG
loader = tt_sbit_decoder_load_png;
+ break;
#else
error = FT_THROW( Unimplemented_Feature );
+ goto Fail;
#endif /* FT_CONFIG_OPTION_USE_PNG */
- break;
default:
error = FT_THROW( Invalid_Table );
@@ -1243,11 +1248,11 @@
FT_Bitmap *map,
TT_SBit_MetricsRec *metrics )
{
- FT_UInt sbix_pos, strike_offset, glyph_start, glyph_end;
- FT_ULong table_size, data_size;
- FT_Int originOffsetX, originOffsetY;
- FT_Tag graphicType;
- FT_Int recurse_depth = 0;
+ FT_UInt sbix_pos, strike_offset, glyph_start, glyph_end;
+ FT_ULong table_size;
+ FT_Int originOffsetX, originOffsetY;
+ FT_Tag graphicType;
+ FT_Int recurse_depth = 0;
FT_Error error;
FT_Byte* p;
@@ -1298,7 +1303,6 @@
originOffsetY = FT_GET_SHORT();
graphicType = FT_GET_TAG4();
- data_size = glyph_end - glyph_start - 8;
switch ( graphicType )
{
@@ -1322,7 +1326,7 @@
metrics,
stream->memory,
stream->cursor,
- data_size,
+ glyph_end - glyph_start - 8,
TRUE );
#else
error = FT_THROW( Unimplemented_Feature );
@@ -1349,10 +1353,11 @@
tt_face_get_metrics( face, FALSE, glyph_index, &abearing, &aadvance );
- metrics->horiBearingX = originOffsetX;
- metrics->horiBearingY = -originOffsetY + metrics->height;
- metrics->horiAdvance = aadvance * face->root.size->metrics.x_ppem /
- face->header.Units_Per_EM;
+ metrics->horiBearingX = (FT_Short)originOffsetX;
+ metrics->horiBearingY = (FT_Short)( -originOffsetY + metrics->height );
+ metrics->horiAdvance = (FT_Short)( aadvance *
+ face->root.size->metrics.x_ppem /
+ face->header.Units_Per_EM );
}
return error;