Add support for fake bold of bitmap fonts.
BUG=45874
http://codereview.appspot.com/1558041/show
git-svn-id: http://skia.googlecode.com/svn/trunk@574 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index b0746b6..0e32d7b 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -33,6 +33,7 @@
#include FT_OUTLINE_H
#include FT_SIZES_H
#include FT_TRUETYPE_TABLES_H
+#include FT_BITMAP_H
#if defined(SK_SUPPORT_LCDTEXT)
#include FT_LCD_FILTER_H
@@ -50,6 +51,7 @@
#include <freetype/tttables.h>
#include <freetype/ftadvanc.h>
#include <freetype/ftlcdfil.h>
+#include <freetype/ftbitmap.h>
#endif
//#define ENABLE_GLYPH_SPEW // for tracing calls
@@ -78,6 +80,10 @@
/////////////////////////////////////////////////////////////////////////
+// See http://freetype.sourceforge.net/freetype2/docs/reference/ft2-bitmap_handling.html#FT_Bitmap_Embolden
+// This value was chosen by eyeballing the result in Firefox and trying to match it.
+static const FT_Pos kBitmapEmboldenStrength = 1 << 6;
+
static bool
InitFreetype() {
FT_Error err = FT_Init_FreeType(&gFTLibrary);
@@ -600,6 +606,10 @@
break;
case FT_GLYPH_FORMAT_BITMAP:
+ if (fRec.fFlags & kEmbolden_Flag) {
+ FT_GlyphSlot_Own_Bitmap(fFace->glyph);
+ FT_Bitmap_Embolden(gFTLibrary, &fFace->glyph->bitmap, kBitmapEmboldenStrength, 0);
+ }
glyph->fWidth = SkToU16(fFace->glyph->bitmap.width);
glyph->fHeight = SkToU16(fFace->glyph->bitmap.rows);
glyph->fTop = -SkToS16(fFace->glyph->bitmap_top);
@@ -719,6 +729,10 @@
} break;
case FT_GLYPH_FORMAT_BITMAP: {
+ if (fRec.fFlags & kEmbolden_Flag) {
+ FT_GlyphSlot_Own_Bitmap(fFace->glyph);
+ FT_Bitmap_Embolden(gFTLibrary, &fFace->glyph->bitmap, kBitmapEmboldenStrength, 0);
+ }
SkASSERT_CONTINUE(glyph.fWidth == fFace->glyph->bitmap.width);
SkASSERT_CONTINUE(glyph.fHeight == fFace->glyph->bitmap.rows);
SkASSERT_CONTINUE(glyph.fTop == -fFace->glyph->bitmap_top);