On Thu, May 26, 2005 at 07:32:49AM +0200, Werner LEMBERG wrote: > Anyway, there is a bug, either in your emboldening code or in ftview. > Load the attached font with > > ftview 15 Chicago.12.bdf > > then press the space key, arrow up, arrow down, arrow up, arrow down, > etc., and you can see that the glyphs get fatter and fatter. Thanks for testing. The attached patch should fix the problem. (Changelog entry included. You may need to change the date.)
This happens when slot is not bitmap-owner (like this case of bdf font). I also make the metrics always being modified in this patch, as those who want more control should use FT_{Bitmap,Outline}_Embolden instead. -- Regards, olv
=== ChangeLog ================================================================== --- ChangeLog (/freetype2/trunk) (revision 904) +++ ChangeLog (/freetype2/branches/embolden) (local) @@ -1,3 +1,12 @@ +2005-05-26 Chia I Wu <[EMAIL PROTECTED]> + + * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Improve + documentation. + + * src/base/ftsynth.c: Remove macro FT_BOLD_THRESHOLD. + (FT_GlyphSlot_Embolden): Check whether slot is bitmap-owner. + Always modify the metrics. + 2005-05-24 Werner Lemberg <[EMAIL PROTECTED]> * docs/CHANGES: Updated. === include/freetype/ftbitmap.h ================================================================== --- include/freetype/ftbitmap.h (/freetype2/trunk) (revision 904) +++ include/freetype/ftbitmap.h (/freetype2/branches/embolden) (local) @@ -118,6 +118,10 @@ /* The current implementation restricts `xStrength' to be less than */ /* or equal to 8. */ /* */ + /* Don't embolden the bitmap owned by a @FT_GlyphSlot. Call */ + /* @FT_Bitmap_Copy to get a copy and work on the copy. */ + /* */ + /* */ FT_EXPORT_DEF( FT_Error ) FT_Bitmap_Embolden( FT_Library library, FT_Bitmap* bitmap, === src/base/ftsynth.c ================================================================== --- src/base/ftsynth.c (/freetype2/trunk) (revision 904) +++ src/base/ftsynth.c (/freetype2/branches/embolden) (local) @@ -23,7 +23,6 @@ #include FT_BITMAP_H -#define FT_BOLD_THRESHOLD 0x0100 /*************************************************************************/ @@ -90,7 +89,7 @@ if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) { error = FT_Outline_Embolden( &slot->outline, xstr ); - xstr = ( xstr * 4 ) & ~63; + xstr = xstr * 4 ; /* according to the document */ ystr = xstr; } else if ( slot->format == FT_GLYPH_FORMAT_BITMAP ) @@ -100,25 +99,41 @@ xstr = 1 << 6; ystr = FT_PIX_FLOOR( ystr ); - error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr ); + /* slot must be bitmap-owner */ + if ( !(slot->internal->flags & FT_GLYPH_OWN_BITMAP) ) + { + FT_Bitmap bitmap; - /* XXX should we set these? */ + + FT_Bitmap_New( &bitmap ); + error = FT_Bitmap_Copy( library, &slot->bitmap, &bitmap ); + + if ( !error ) + { + slot->bitmap = bitmap; + slot->internal->flags |= FT_GLYPH_OWN_BITMAP; + } + } + if ( !error ) - slot->bitmap_top += ystr >> 6; + error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr ); } else error = FT_Err_Invalid_Argument; - /* XXX should we set these? */ + /* modify the metrics accordingly */ if ( !error ) { -#if 0 - slot->advance.x += xstr; slot->metrics.width += xstr; slot->metrics.height += ystr; slot->metrics.horiBearingY += ystr; -#endif slot->metrics.horiAdvance += xstr; + slot->metrics.vertBearingX -= xstr / 2; + slot->metrics.vertBearingY += ystr; + slot->metrics.vertAdvance += ystr; + + if ( slot->format == FT_GLYPH_FORMAT_BITMAP ) + slot->bitmap_top += ystr >> 6; } } Property changes on: ___________________________________________________________________ Name: svk:merge +5f392c16-9bf0-0310-b16c-a65848a4e34f:/freetype2/trunk:903
_______________________________________________ Freetype-devel mailing list Freetype-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/freetype-devel