| Index: third_party/freetype/src/base/fttrigon.c
|
| diff --git a/third_party/freetype/src/base/fttrigon.c b/third_party/freetype/src/base/fttrigon.c
|
| index 9b2ccd5d61a85a9646fcc4d7ae491aca3863cbfa..5b24304c2fc81c9a8b7edd8bc1a565d72c7d1752 100644
|
| --- a/third_party/freetype/src/base/fttrigon.c
|
| +++ b/third_party/freetype/src/base/fttrigon.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* FreeType trigonometric functions (body). */
|
| /* */
|
| -/* Copyright 2001-2005, 2012-2014 by */
|
| +/* Copyright 2001-2015 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -73,7 +73,7 @@
|
| /* and CORDIC hypotenuse, so it minimizes the error */
|
| val = (FT_Fixed)( ( (FT_Int64)val * FT_TRIG_SCALE + 0x40000000UL ) >> 32 );
|
|
|
| - return ( s >= 0 ) ? val : -val;
|
| + return s < 0 ? -val : val;
|
| }
|
|
|
| #else /* !FT_LONG64 */
|
| @@ -92,8 +92,8 @@
|
| s = -1;
|
| }
|
|
|
| - lo1 = val & 0x0000FFFFU;
|
| - hi1 = val >> 16;
|
| + lo1 = (FT_UInt32)val & 0x0000FFFFU;
|
| + hi1 = (FT_UInt32)val >> 16;
|
| lo2 = FT_TRIG_SCALE & 0x0000FFFFU;
|
| hi2 = FT_TRIG_SCALE >> 16;
|
|
|
| @@ -117,12 +117,12 @@
|
| /* and CORDIC hypotenuse, so it minimizes the error */
|
|
|
| /* Check carry overflow of lo + 0x40000000 */
|
| - lo += 0x40000000U;
|
| - hi += ( lo < 0x40000000U );
|
| + lo += 0x40000000UL;
|
| + hi += ( lo < 0x40000000UL );
|
|
|
| - val = (FT_Fixed)hi;
|
| + val = (FT_Fixed)hi;
|
|
|
| - return ( s >= 0 ) ? val : -val;
|
| + return s < 0 ? -val : val;
|
| }
|
|
|
| #endif /* !FT_LONG64 */
|
| @@ -139,7 +139,7 @@
|
| x = vec->x;
|
| y = vec->y;
|
|
|
| - shift = FT_MSB( FT_ABS( x ) | FT_ABS( y ) );
|
| + shift = FT_MSB( (FT_UInt32)( FT_ABS( x ) | FT_ABS( y ) ) );
|
|
|
| if ( shift <= FT_TRIG_SAFE_MSB )
|
| {
|
| @@ -299,11 +299,9 @@
|
| FT_Vector v;
|
|
|
|
|
| - v.x = FT_TRIG_SCALE >> 8;
|
| - v.y = 0;
|
| - ft_trig_pseudo_rotate( &v, angle );
|
| + FT_Vector_Unit( &v, angle );
|
|
|
| - return ( v.x + 0x80L ) >> 8;
|
| + return v.x;
|
| }
|
|
|
|
|
| @@ -312,7 +310,12 @@
|
| FT_EXPORT_DEF( FT_Fixed )
|
| FT_Sin( FT_Angle angle )
|
| {
|
| - return FT_Cos( FT_ANGLE_PI2 - angle );
|
| + FT_Vector v;
|
| +
|
| +
|
| + FT_Vector_Unit( &v, angle );
|
| +
|
| + return v.y;
|
| }
|
|
|
|
|
| @@ -324,9 +327,7 @@
|
| FT_Vector v;
|
|
|
|
|
| - v.x = FT_TRIG_SCALE >> 8;
|
| - v.y = 0;
|
| - ft_trig_pseudo_rotate( &v, angle );
|
| + FT_Vector_Unit( &v, angle );
|
|
|
| return FT_DivFix( v.y, v.x );
|
| }
|
| @@ -388,33 +389,32 @@
|
| FT_Vector v;
|
|
|
|
|
| - if ( !vec )
|
| + if ( !vec || !angle )
|
| return;
|
|
|
| - v.x = vec->x;
|
| - v.y = vec->y;
|
| + v = *vec;
|
|
|
| - if ( angle && ( v.x != 0 || v.y != 0 ) )
|
| - {
|
| - shift = ft_trig_prenorm( &v );
|
| - ft_trig_pseudo_rotate( &v, angle );
|
| - v.x = ft_trig_downscale( v.x );
|
| - v.y = ft_trig_downscale( v.y );
|
| + if ( v.x == 0 && v.y == 0 )
|
| + return;
|
|
|
| - if ( shift > 0 )
|
| - {
|
| - FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
|
| + shift = ft_trig_prenorm( &v );
|
| + ft_trig_pseudo_rotate( &v, angle );
|
| + v.x = ft_trig_downscale( v.x );
|
| + v.y = ft_trig_downscale( v.y );
|
|
|
| + if ( shift > 0 )
|
| + {
|
| + FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
|
|
|
| - vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
|
| - vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
|
| - }
|
| - else
|
| - {
|
| - shift = -shift;
|
| - vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
|
| - vec->y = (FT_Pos)( (FT_ULong)v.y << shift );
|
| - }
|
| +
|
| + vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
|
| + vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
|
| + }
|
| + else
|
| + {
|
| + shift = -shift;
|
| + vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
|
| + vec->y = (FT_Pos)( (FT_ULong)v.y << shift );
|
| }
|
| }
|
|
|
| @@ -450,7 +450,7 @@
|
| v.x = ft_trig_downscale( v.x );
|
|
|
| if ( shift > 0 )
|
| - return ( v.x + ( 1 << ( shift - 1 ) ) ) >> shift;
|
| + return ( v.x + ( 1L << ( shift - 1 ) ) ) >> shift;
|
|
|
| return (FT_Fixed)( (FT_UInt32)v.x << -shift );
|
| }
|
| @@ -480,8 +480,8 @@
|
|
|
| v.x = ft_trig_downscale( v.x );
|
|
|
| - *length = ( shift >= 0 ) ? ( v.x >> shift )
|
| - : (FT_Fixed)( (FT_UInt32)v.x << -shift );
|
| + *length = shift >= 0 ? ( v.x >> shift )
|
| + : (FT_Fixed)( (FT_UInt32)v.x << -shift );
|
| *angle = v.y;
|
| }
|
|
|
| @@ -512,11 +512,10 @@
|
| FT_Angle delta = angle2 - angle1;
|
|
|
|
|
| - delta %= FT_ANGLE_2PI;
|
| - if ( delta < 0 )
|
| + while ( delta <= -FT_ANGLE_PI )
|
| delta += FT_ANGLE_2PI;
|
|
|
| - if ( delta > FT_ANGLE_PI )
|
| + while ( delta > FT_ANGLE_PI )
|
| delta -= FT_ANGLE_2PI;
|
|
|
| return delta;
|
|
|