ref: 38e82be157ecf6fb43de5d0879bc06df243646a1
parent: 71d7628175c1130e2d698ef558641279de70d553
author: Werner Lemberg <[email protected]>
date: Mon May 30 15:22:44 EDT 2005
* include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor documentation improvements. * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos. * src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4. If xstr is larger than 8 and bitmap is of pixel_mode FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-05-30 Chia I Wu <[email protected]>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor
+ documentation improvements.
+
+ * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap
+ of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4.
+ If xstr is larger than 8 and bitmap is of pixel_mode
+ FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
+
2005-05-29 Chia I Wu <[email protected]>
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Fix emboldening bitmap
--- a/include/freetype/ftbitmap.h
+++ b/include/freetype/ftbitmap.h
@@ -97,7 +97,7 @@
/* FT_Bitmap_Embolden */
/* */
/* <Description> */
- /* Emboldens a bitmap. The new bitmap will be about `xStrength' */
+ /* Embolden a bitmap. The new bitmap will be about `xStrength' */
/* pixels wider and `yStrength' pixels higher. The left and bottom */
/* borders are kept unchanged. */
/* */
@@ -105,10 +105,10 @@
/* library :: A handle to a library object. */
/* */
/* xStrength :: How strong the glyph is emboldened horizontally. */
- /* Expressed in 16.16 pixel format. */
+ /* Expressed in 26.6 pixel format. */
/* */
/* yStrength :: How strong the glyph is emboldened vertically. */
- /* Expressed in 16.16 pixel format. */
+ /* Expressed in 26.6 pixel format. */
/* */
/* <InOut> */
/* bitmap :: A handle to the target bitmap. */
@@ -118,11 +118,10 @@
/* */
/* <Note> */
/* The current implementation restricts `xStrength' to be less than */
- /* or equal to 8. */
+ /* or equal to 8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
/* */
/* Don't embolden the bitmap owned by a @FT_GlyphSlot directly! Call */
/* @FT_Bitmap_Copy to get a copy and work on the copy instead. */
- /* */
/* */
FT_EXPORT_DEF( FT_Error )
FT_Bitmap_Embolden( FT_Library library,
--- a/include/freetype/ftoutln.h
+++ b/include/freetype/ftoutln.h
@@ -319,7 +319,7 @@
/* */
/* <Input> */
/* strength :: How strong the glyph is emboldened. Expressed in */
- /* 16.16 pixel format. */
+ /* 26.6 pixel format. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -211,29 +211,55 @@
if ( !library )
return FT_Err_Invalid_Library_Handle;
- if ( !bitmap )
+ if ( !bitmap || !bitmap->buffer )
return FT_Err_Invalid_Argument;
xstr = FT_PIX_ROUND( xStrength ) >> 6;
ystr = FT_PIX_ROUND( yStrength ) >> 6;
+ if ( xstr == 0 && ystr == 0 )
+ return FT_Err_Ok;
+ else if ( xstr < 0 || ystr < 0 )
+ return FT_Err_Invalid_Argument;
+
switch ( bitmap->pixel_mode )
{
case FT_PIXEL_MODE_GRAY2:
case FT_PIXEL_MODE_GRAY4:
- return FT_Err_Invalid_Glyph_Format;
+ {
+ FT_Bitmap tmp;
+ FT_Int align;
+
+
+ if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY2 )
+ align = ( bitmap->width + xstr + 3 ) / 4;
+ else
+ align = ( bitmap->width + xstr + 1 ) / 2;
+
+ FT_Bitmap_New( &tmp );
+ error = FT_Bitmap_Convert( library, bitmap, &tmp, align );
+
+ if ( error )
+ return error;
+
+ FT_Bitmap_Done( library, bitmap );
+ *bitmap = tmp;
+ }
+ break;
+
+ case FT_PIXEL_MODE_MONO:
+ if ( xstr > 8 )
+ xstr = 8;
+ break;
+
case FT_PIXEL_MODE_LCD:
xstr *= 3;
break;
+
case FT_PIXEL_MODE_LCD_V:
ystr *= 3;
break;
}
-
- if ( xstr == 0 && ystr == 0 )
- return FT_Err_Ok;
- else if ( xstr < 0 || ystr < 0 || xstr > 8 )
- return FT_Err_Invalid_Argument;
error = ft_bitmap_assure_buffer( library->memory, bitmap, xstr, ystr );
if ( error )