diff options
Diffstat (limited to 'src/sfnt/ttsbit.c')
-rw-r--r-- | src/sfnt/ttsbit.c | 47 |
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; |