| Index: third_party/freetype/src/base/ftstroke.c
|
| diff --git a/third_party/freetype/src/base/ftstroke.c b/third_party/freetype/src/base/ftstroke.c
|
| index d123e0274c82e48cc8e300c0bcf83cd9cfd27c99..fecb3cc25c0e14f25db68c41737aea47420a0f20 100644
|
| --- a/third_party/freetype/src/base/ftstroke.c
|
| +++ b/third_party/freetype/src/base/ftstroke.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* FreeType path stroker (body). */
|
| /* */
|
| -/* Copyright 2002-2006, 2008-2011, 2013, 2014 by */
|
| +/* Copyright 2002-2015 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -24,6 +24,16 @@
|
| #include FT_INTERNAL_DEBUG_H
|
| #include FT_INTERNAL_OBJECTS_H
|
|
|
| +#include "basepic.h"
|
| +
|
| +
|
| + /* declare an extern to access `ft_outline_glyph_class' globally */
|
| + /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
|
| + /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
|
| +#ifndef FT_CONFIG_OPTION_PIC
|
| + FT_CALLBACK_TABLE const FT_Glyph_Class ft_outline_glyph_class;
|
| +#endif
|
| +
|
|
|
| /* documentation is in ftstroke.h */
|
|
|
| @@ -347,7 +357,7 @@
|
| ft_stroke_border_close( FT_StrokeBorder border,
|
| FT_Bool reverse )
|
| {
|
| - FT_UInt start = border->start;
|
| + FT_UInt start = (FT_UInt)border->start;
|
| FT_UInt count = border->num_points;
|
|
|
|
|
| @@ -599,7 +609,7 @@
|
| if ( border->start >= 0 )
|
| ft_stroke_border_close( border, FALSE );
|
|
|
| - border->start = border->num_points;
|
| + border->start = (FT_Int)border->num_points;
|
| border->movable = FALSE;
|
|
|
| return ft_stroke_border_lineto( border, to, FALSE );
|
| @@ -742,7 +752,7 @@
|
| }
|
| }
|
|
|
| - outline->n_points = (short)( outline->n_points + border->num_points );
|
| + outline->n_points += (short)border->num_points;
|
|
|
| FT_ASSERT( FT_Outline_Check( outline ) == 0 );
|
| }
|
| @@ -834,8 +844,8 @@
|
| stroker->miter_limit = miter_limit;
|
|
|
| /* ensure miter limit has sensible value */
|
| - if ( stroker->miter_limit < 0x10000 )
|
| - stroker->miter_limit = 0x10000;
|
| + if ( stroker->miter_limit < 0x10000L )
|
| + stroker->miter_limit = 0x10000L;
|
|
|
| /* save line join style: */
|
| /* line join style can be temporarily changed when stroking curves */
|
| @@ -999,7 +1009,9 @@
|
|
|
| /* Only intersect borders if between two lineto's and both */
|
| /* lines are long enough (line_length is zero for curves). */
|
| - if ( !border->movable || line_length == 0 )
|
| + /* Also avoid U-turns of nearly 180 degree. */
|
| + if ( !border->movable || line_length == 0 ||
|
| + theta > 0x59C000 || theta < -0x59C000 )
|
| intersect = FALSE;
|
| else
|
| {
|
| @@ -1220,11 +1232,8 @@
|
| goto Exit;
|
|
|
| /* when we turn to the right, the inside side is 0 */
|
| - inside_side = 0;
|
| -
|
| /* otherwise, the inside side is 1 */
|
| - if ( turn < 0 )
|
| - inside_side = 1;
|
| + inside_side = ( turn < 0 );
|
|
|
| /* process the inside side */
|
| error = ft_stroker_inside( stroker, inside_side, line_length );
|
| @@ -1232,7 +1241,7 @@
|
| goto Exit;
|
|
|
| /* process the outside side */
|
| - error = ft_stroker_outside( stroker, 1 - inside_side, line_length );
|
| + error = ft_stroker_outside( stroker, !inside_side, line_length );
|
|
|
| Exit:
|
| return error;
|
| @@ -1822,7 +1831,7 @@
|
|
|
| FT_ASSERT( left->start >= 0 );
|
|
|
| - new_points = left->num_points - left->start;
|
| + new_points = (FT_Int)left->num_points - left->start;
|
| if ( new_points > 0 )
|
| {
|
| error = ft_stroke_border_grow( right, (FT_UInt)new_points );
|
| @@ -1862,8 +1871,8 @@
|
| }
|
| }
|
|
|
| - left->num_points = left->start;
|
| - right->num_points += new_points;
|
| + left->num_points = (FT_UInt)left->start;
|
| + right->num_points += (FT_UInt)new_points;
|
|
|
| right->movable = FALSE;
|
| left->movable = FALSE;
|
| @@ -1941,11 +1950,8 @@
|
| if ( turn != 0 )
|
| {
|
| /* when we turn to the right, the inside side is 0 */
|
| - inside_side = 0;
|
| -
|
| /* otherwise, the inside side is 1 */
|
| - if ( turn < 0 )
|
| - inside_side = 1;
|
| + inside_side = ( turn < 0 );
|
|
|
| error = ft_stroker_inside( stroker,
|
| inside_side,
|
| @@ -1955,7 +1961,7 @@
|
|
|
| /* process the outside side */
|
| error = ft_stroker_outside( stroker,
|
| - 1 - inside_side,
|
| + !inside_side,
|
| stroker->subpath_line_length );
|
| if ( error )
|
| goto Exit;
|
| @@ -2118,7 +2124,7 @@
|
| FT_UInt last; /* index of last point in contour */
|
|
|
|
|
| - last = outline->contours[n];
|
| + last = (FT_UInt)outline->contours[n];
|
| limit = outline->points + last;
|
|
|
| /* skip empty points; we don't stroke these */
|
| @@ -2289,15 +2295,6 @@
|
| }
|
|
|
|
|
| - /* declare an extern to access `ft_outline_glyph_class' globally */
|
| - /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
|
| - /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
|
| -#ifndef FT_CONFIG_OPTION_PIC
|
| - extern const FT_Glyph_Class ft_outline_glyph_class;
|
| -#endif
|
| -#include "basepic.h"
|
| -
|
| -
|
| /* documentation is in ftstroke.h */
|
|
|
| FT_EXPORT_DEF( FT_Error )
|
| @@ -2347,7 +2344,9 @@
|
| FT_Outline_Done( glyph->library, outline );
|
|
|
| error = FT_Outline_New( glyph->library,
|
| - num_points, num_contours, outline );
|
| + num_points,
|
| + (FT_Int)num_contours,
|
| + outline );
|
| if ( error )
|
| goto Fail;
|
|
|
| @@ -2437,7 +2436,7 @@
|
|
|
| error = FT_Outline_New( glyph->library,
|
| num_points,
|
| - num_contours,
|
| + (FT_Int)num_contours,
|
| outline );
|
| if ( error )
|
| goto Fail;
|
|
|