| Index: third_party/freetype/src/base/ftlcdfil.c
|
| diff --git a/core/src/fxge/fx_freetype/fxft2.5.01/src/base/fxft_ftlcdfil.c b/third_party/freetype/src/base/ftlcdfil.c
|
| similarity index 88%
|
| rename from core/src/fxge/fx_freetype/fxft2.5.01/src/base/fxft_ftlcdfil.c
|
| rename to third_party/freetype/src/base/ftlcdfil.c
|
| index 66676de916a50ee45673549b1ed0c1c5c6ce0602..d8bcbbf1d222c96fcb34d55c668d239ec47aacc4 100644
|
| --- a/core/src/fxge/fx_freetype/fxft2.5.01/src/base/fxft_ftlcdfil.c
|
| +++ b/third_party/freetype/src/base/ftlcdfil.c
|
| @@ -1,11 +1,10 @@
|
| -#if !defined(_FXFT_VERSION_) || _FXFT_VERSION_ == 2501
|
| /***************************************************************************/
|
| /* */
|
| /* ftlcdfil.c */
|
| /* */
|
| /* FreeType API for color filtering of subpixel bitmap glyphs (body). */
|
| /* */
|
| -/* Copyright 2006, 2008-2010, 2013 by */
|
| +/* Copyright 2006, 2008-2010, 2013, 2014 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -16,13 +15,13 @@
|
| /* */
|
| /***************************************************************************/
|
|
|
| -#define FT2_BUILD_LIBRARY
|
| -#include "../../include/ft2build.h"
|
| -#include "../../include/freetype/internal/ftdebug.h"
|
|
|
| -#include "../../include/freetype/ftlcdfil.h"
|
| -#include "../../include/freetype/ftimage.h"
|
| -#include "../../include/freetype/internal/ftobjs.h"
|
| +#include <ft2build.h>
|
| +#include FT_INTERNAL_DEBUG_H
|
| +
|
| +#include FT_LCD_FILTER_H
|
| +#include FT_IMAGE_H
|
| +#include FT_INTERNAL_OBJECTS_H
|
|
|
|
|
| #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
|
| @@ -47,9 +46,16 @@
|
| FT_Byte* line = bitmap->buffer;
|
|
|
|
|
| + /* take care of bitmap flow */
|
| + if ( bitmap->pitch < 0 )
|
| + line -= bitmap->pitch * ( bitmap->rows - 1 );
|
| +
|
| + /* `fir' and `pix' must be at least 32 bit wide, since the sum of */
|
| + /* the values in `weights' can exceed 0xFF */
|
| +
|
| for ( ; height > 0; height--, line += bitmap->pitch )
|
| {
|
| - FT_UInt fir[5];
|
| + FT_UInt fir[4]; /* below, `pix' is used as the 5th element */
|
| FT_UInt val1, xx;
|
|
|
|
|
| @@ -58,7 +64,6 @@
|
| fir[1] = weights[3] * val1;
|
| fir[2] = weights[4] * val1;
|
| fir[3] = 0;
|
| - fir[4] = 0;
|
|
|
| val1 = line[1];
|
| fir[0] += weights[1] * val1;
|
| @@ -105,10 +110,14 @@
|
| FT_Int pitch = bitmap->pitch;
|
|
|
|
|
| + /* take care of bitmap flow */
|
| + if ( bitmap->pitch < 0 )
|
| + column -= bitmap->pitch * ( bitmap->rows - 1 );
|
| +
|
| for ( ; width > 0; width--, column++ )
|
| {
|
| FT_Byte* col = column;
|
| - FT_UInt fir[5];
|
| + FT_UInt fir[4]; /* below, `pix' is used as the 5th element */
|
| FT_UInt val1, yy;
|
|
|
|
|
| @@ -117,7 +126,6 @@
|
| fir[1] = weights[3] * val1;
|
| fir[2] = weights[4] * val1;
|
| fir[3] = 0;
|
| - fir[4] = 0;
|
| col += pitch;
|
|
|
| val1 = col[0];
|
| @@ -154,7 +162,7 @@
|
| col[-2 * pitch] = (FT_Byte)pix;
|
|
|
| pix = fir[1] >> 8;
|
| - pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
|
| + pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
|
| col[-pitch] = (FT_Byte)pix;
|
| }
|
| }
|
| @@ -190,6 +198,10 @@
|
| FT_Byte* line = bitmap->buffer;
|
|
|
|
|
| + /* take care of bitmap flow */
|
| + if ( bitmap->pitch < 0 )
|
| + line -= bitmap->pitch * ( bitmap->rows - 1 );
|
| +
|
| for ( ; height > 0; height--, line += pitch )
|
| {
|
| FT_UInt xx;
|
| @@ -229,6 +241,10 @@
|
| FT_Byte* column = bitmap->buffer;
|
|
|
|
|
| + /* take care of bitmap flow */
|
| + if ( bitmap->pitch < 0 )
|
| + column -= bitmap->pitch * ( bitmap->rows - 1 );
|
| +
|
| for ( ; width > 0; width--, column++ )
|
| {
|
| FT_Byte* col = column;
|
| @@ -273,7 +289,10 @@
|
| FT_Library_SetLcdFilterWeights( FT_Library library,
|
| unsigned char *weights )
|
| {
|
| - if ( !library || !weights )
|
| + if ( !library )
|
| + return FT_THROW( Invalid_Library_Handle );
|
| +
|
| + if ( !weights )
|
| return FT_THROW( Invalid_Argument );
|
|
|
| ft_memcpy( library->lcd_weights, weights, 5 );
|
| @@ -295,7 +314,7 @@
|
|
|
|
|
| if ( !library )
|
| - return FT_THROW( Invalid_Argument );
|
| + return FT_THROW( Invalid_Library_Handle );
|
|
|
| switch ( filter )
|
| {
|
| @@ -377,5 +396,3 @@
|
|
|
|
|
| /* END */
|
| -#endif
|
| -
|
|
|