diff --git a/include/freetype/config/public-macros.h b/include/freetype/config/public-macros.h index 51fbc9c2f..1b036406c 100644 --- a/include/freetype/config/public-macros.h +++ b/include/freetype/config/public-macros.h @@ -103,6 +103,7 @@ FT_BEGIN_HEADER */ #define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x + /* * `FT_UNUSED` indicates that a given parameter is not used -- this is * only used to get rid of unpleasant compiler warnings. @@ -115,6 +116,18 @@ FT_BEGIN_HEADER #endif + /* + * Support for casts in both C and C++. + */ +#ifdef __cplusplus +#define FT_STATIC_CAST( type ) static_cast +#define FT_REINTERPRET_CAST( type ) reinterpret_cast +#else +#define FT_STATIC_CAST( type ) (type) +#define FT_REINTERPRET_CAST( type ) (type) +#endif + + FT_END_HEADER #endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index b45718301..7da4eb687 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -616,11 +616,12 @@ FT_BEGIN_HEADER */ #ifndef FT_ENC_TAG -#define FT_ENC_TAG( value, a, b, c, d ) \ - value = ( ( (FT_UInt32)(a) << 24 ) | \ - ( (FT_UInt32)(b) << 16 ) | \ - ( (FT_UInt32)(c) << 8 ) | \ - (FT_UInt32)(d) ) + +#define FT_ENC_TAG( value, a, b, c, d ) \ + value = ( ( FT_STATIC_CAST( FT_Byte )(a) << 24 ) | \ + ( FT_STATIC_CAST( FT_Byte )(b) << 16 ) | \ + ( FT_STATIC_CAST( FT_Byte )(c) << 8 ) | \ + FT_STATIC_CAST( FT_Byte )(d) ) #endif /* FT_ENC_TAG */ @@ -3181,7 +3182,7 @@ FT_BEGIN_HEADER * necessary to empty the cache after a mode switch to avoid false hits. * */ -#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 ) +#define FT_LOAD_TARGET_( x ) ( FT_STATIC_CAST( FT_Int32 )( (x) & 15 ) << 16 ) #define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) #define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) @@ -3200,7 +3201,8 @@ FT_BEGIN_HEADER * @FT_LOAD_TARGET_XXX value. * */ -#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) +#define FT_LOAD_TARGET_MODE( x ) \ + FT_STATIC_CAST( FT_Render_Mode )( ( (x) >> 16 ) & 15 ) /************************************************************************** diff --git a/include/freetype/ftimage.h b/include/freetype/ftimage.h index 66a8b89aa..6e33520c0 100644 --- a/include/freetype/ftimage.h +++ b/include/freetype/ftimage.h @@ -28,11 +28,6 @@ #define FTIMAGE_H_ - /* STANDALONE_ is from ftgrays.c */ -#ifndef STANDALONE_ -#endif - - FT_BEGIN_HEADER @@ -700,11 +695,13 @@ FT_BEGIN_HEADER * to get a simple enumeration without assigning special numbers. */ #ifndef FT_IMAGE_TAG -#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ - value = ( ( (unsigned long)_x1 << 24 ) | \ - ( (unsigned long)_x2 << 16 ) | \ - ( (unsigned long)_x3 << 8 ) | \ - (unsigned long)_x4 ) + +#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ + value = ( ( FT_STATIC_CAST( unsigned char )( _x1 ) << 24 ) | \ + ( FT_STATIC_CAST( unsigned char )( _x2 ) << 16 ) | \ + ( FT_STATIC_CAST( unsigned char )( _x3 ) << 8 ) | \ + FT_STATIC_CAST( unsigned char )( _x4 ) ) + #endif /* FT_IMAGE_TAG */ diff --git a/include/freetype/ftmodapi.h b/include/freetype/ftmodapi.h index cb1542373..9d6c1b349 100644 --- a/include/freetype/ftmodapi.h +++ b/include/freetype/ftmodapi.h @@ -347,8 +347,9 @@ FT_BEGIN_HEADER * 2.11 * */ -#define FT_FACE_DRIVER_NAME( face ) \ - ( ( *(FT_Module_Class**)( ( face )->driver ) )->module_name ) +#define FT_FACE_DRIVER_NAME( face ) \ + ( ( *FT_REINTERPRET_CAST( FT_Module_Class** ) \ + ( ( face )->driver ) )->module_name ) /************************************************************************** diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h index 37f73538d..3b233580f 100644 --- a/include/freetype/fttypes.h +++ b/include/freetype/fttypes.h @@ -485,12 +485,12 @@ FT_BEGIN_HEADER * The produced values **must** be 32-bit integers. Don't redefine this * macro. */ -#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ - (FT_Tag) \ - ( ( (FT_ULong)_x1 << 24 ) | \ - ( (FT_ULong)_x2 << 16 ) | \ - ( (FT_ULong)_x3 << 8 ) | \ - (FT_ULong)_x4 ) +#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ + FT_STATIC_CAST( FT_Tag ) \ + ( ( FT_STATIC_CAST( FT_Byte )( _x1 ) << 24 ) | \ + ( FT_STATIC_CAST( FT_Byte )( _x2 ) << 16 ) | \ + ( FT_STATIC_CAST( FT_Byte )( _x3 ) << 8 ) | \ + FT_STATIC_CAST( FT_Byte )( _x4 ) ) /*************************************************************************/ @@ -588,7 +588,7 @@ FT_BEGIN_HEADER #define FT_IS_EMPTY( list ) ( (list).head == 0 ) -#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) ) +#define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool )( (x) != 0 ) /* concatenate C tokens */ #define FT_ERR_XCAT( x, y ) x ## y diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index a6af8b989..37f4fe06d 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -152,6 +152,8 @@ #define ADD_INT( a, b ) \ (int)( (unsigned int)(a) + (unsigned int)(b) ) +#define FT_STATIC_CAST( type ) (type) + #define ft_memset memset @@ -273,6 +275,8 @@ typedef ptrdiff_t FT_PtrDist; #else /* !STANDALONE_ */ +#include +#include FT_CONFIG_CONFIG_H #include "ftgrays.h" #include #include