diff --git a/ChangeLog b/ChangeLog index b4c306c01..4e226c146 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-09-09 Wojciech Mamrak + + * src/base/ftcalc.c (FT_CeilFix, FT_FloorFix): Normalize. + + This commit makes the functions behave as expected, this is, + rounding towards plus or minus infinity. + 2015-09-07 Alexei Podtelezhnikov * src/smooth/ftgrays.c (gray_render_line): Simplify clipping. diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index fb1254bbf..aafbdfd6d 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -3955,7 +3955,8 @@ FT_BEGIN_HEADER /* a :: The number to be rounded. */ /* */ /* */ - /* The result of `(a + 0x8000) & -0x10000'. */ + /* `a' rounded to nearest 16.16 fixed integer, halfway cases away */ + /* from zero. */ /* */ FT_EXPORT( FT_Fixed ) FT_RoundFix( FT_Fixed a ); @@ -3974,7 +3975,7 @@ FT_BEGIN_HEADER /* a :: The number for which the ceiling function is to be computed. */ /* */ /* */ - /* The result of `(a + 0x10000 - 1) & -0x10000'. */ + /* `a' rounded towards plus infinity. */ /* */ FT_EXPORT( FT_Fixed ) FT_CeilFix( FT_Fixed a ); @@ -3993,7 +3994,7 @@ FT_BEGIN_HEADER /* a :: The number for which the floor function is to be computed. */ /* */ /* */ - /* The result of `a & -0x10000'. */ + /* `a' rounded towards minus infinity. */ /* */ FT_EXPORT( FT_Fixed ) FT_FloorFix( FT_Fixed a ); diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c index 01aead52e..edb27fd98 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -96,8 +96,7 @@ FT_EXPORT_DEF( FT_Fixed ) FT_CeilFix( FT_Fixed a ) { - return a >= 0 ? ( a + 0xFFFFL ) & ~0xFFFFL - : -((-a + 0xFFFFL ) & ~0xFFFFL ); + return ( a + 0xFFFFL ) & ~0xFFFFL; } @@ -106,8 +105,7 @@ FT_EXPORT_DEF( FT_Fixed ) FT_FloorFix( FT_Fixed a ) { - return a >= 0 ? a & ~0xFFFFL - : -((-a) & ~0xFFFFL ); + return a & ~0xFFFFL; } #ifndef FT_MSB