Revert of https://codereview.chromium.org/119943002/
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 26 Dec 2013 15:50:29 +0000 (15:50 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 26 Dec 2013 15:50:29 +0000 (15:50 +0000)
Reason for revert: False alert on zheng.xu's original CL - it didn't break anything.

R=bungeman@google.com, reed@google.com, zheng.xu@arm.com, robertphillips@google.com, rmistry@google.com
TBR=bungeman@google.com, reed@google.com, rmistry@google.com, robertphillips@google.com, zheng.xu@arm.com
NOTREECHECKS=true
NOTRY=true
BUG=

Author: bensong@google.com

Review URL: https://codereview.chromium.org/117963003

git-svn-id: http://skia.googlecode.com/svn/trunk@12822 2bbb7eff-a529-9590-31e7-b0007b416f81

src/ports/SkFontHost_FreeType.cpp
src/ports/SkFontHost_FreeType_common.cpp
src/ports/SkFontHost_FreeType_common.h

index 6b29c1d..97046f4 100644 (file)
@@ -1,4 +1,4 @@
-
+
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -216,6 +216,9 @@ private:
     bool getCBoxForLetter(char letter, FT_BBox* bbox);
     // Caller must lock gFTMutex before calling this function.
     void updateGlyphIfLCD(SkGlyph* glyph);
+    // Caller must lock gFTMutex before calling this function.
+    // update FreeType2 glyph slot with glyph emboldened
+    void emboldenIfNeeded(FT_Face face, FT_GlyphSlot glyph);
 };
 
 ///////////////////////////////////////////////////////////////////////////
@@ -1139,10 +1142,7 @@ bool SkScalerContext_FreeType::getCBoxForLetter(char letter, FT_BBox* bbox) {
         return false;
     if (FT_Load_Glyph(fFace, glyph_id, fLoadGlyphFlags) != 0)
         return false;
-    if ((fRec.fFlags & kEmbolden_Flag) &&
-        !(fFace->style_flags & FT_STYLE_FLAG_BOLD)) {
-        emboldenOutline(fFace, &fFace->glyph->outline);
-    }
+    emboldenIfNeeded(fFace, fFace->glyph);
     FT_Outline_Get_CBox(&fFace->glyph->outline, bbox);
     return true;
 }
@@ -1192,6 +1192,7 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
         glyph->zeroMetrics();
         return;
     }
+    emboldenIfNeeded(fFace, fFace->glyph);
 
     switch ( fFace->glyph->format ) {
       case FT_GLYPH_FORMAT_OUTLINE:
@@ -1201,10 +1202,6 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
             glyph->fTop = 0;
             glyph->fLeft = 0;
         } else {
-            if (fRec.fFlags & kEmbolden_Flag && !(fFace->style_flags & FT_STYLE_FLAG_BOLD)) {
-                emboldenOutline(fFace, &fFace->glyph->outline);
-            }
-
             FT_BBox bbox;
             getBBoxForCurrentGlyph(glyph, &bbox, true);
 
@@ -1218,11 +1215,6 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
         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);
-        }
-
         if (fRec.fFlags & SkScalerContext::kVertical_Flag) {
             FT_Vector vector;
             vector.x = fFace->glyph->metrics.vertBearingX - fFace->glyph->metrics.horiBearingX;
@@ -1301,6 +1293,7 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) {
         return;
     }
 
+    emboldenIfNeeded(fFace, fFace->glyph);
     generateGlyphImage(fFace, glyph);
 }
 
@@ -1328,6 +1321,7 @@ void SkScalerContext_FreeType::generatePath(const SkGlyph& glyph,
         path->reset();
         return;
     }
+    emboldenIfNeeded(fFace, fFace->glyph);
 
     generateGlyphPath(fFace, path);
 
@@ -1469,6 +1463,25 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
     }
 }
 
+void SkScalerContext_FreeType::emboldenIfNeeded(FT_Face face, FT_GlyphSlot glyph)
+{
+    if (fRec.fFlags & SkScalerContext::kEmbolden_Flag) {
+        switch ( glyph->format ) {
+            case FT_GLYPH_FORMAT_OUTLINE:
+                FT_Pos strength;
+                strength = FT_MulFix(face->units_per_EM, face->size->metrics.y_scale) / 24;
+                FT_Outline_Embolden(&glyph->outline, strength);
+                break;
+            case FT_GLYPH_FORMAT_BITMAP:
+                FT_GlyphSlot_Own_Bitmap(glyph);
+                FT_Bitmap_Embolden(glyph->library, &glyph->bitmap, kBitmapEmboldenStrength, 0);
+                break;
+            default:
+                SkDEBUGFAIL("unknown glyph format");
+        }
+    }
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "SkUtils.h"
index 065a83a..e4323d8 100644 (file)
@@ -344,11 +344,6 @@ void SkScalerContext_FreeType_Base::generateGlyphImage(FT_Face face, const SkGly
             FT_BBox     bbox;
             FT_Bitmap   target;
 
-            if (fRec.fFlags & SkScalerContext::kEmbolden_Flag &&
-                !(face->style_flags & FT_STYLE_FLAG_BOLD)) {
-                emboldenOutline(face, outline);
-            }
-
             int dx = 0, dy = 0;
             if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {
                 dx = SkFixedToFDot6(glyph.getSubXFixed());
@@ -547,10 +542,6 @@ static int cubic_proc(const FT_Vector* pt0, const FT_Vector* pt1,
 void SkScalerContext_FreeType_Base::generateGlyphPath(FT_Face face,
                                                       SkPath* path)
 {
-    if (fRec.fFlags & SkScalerContext::kEmbolden_Flag) {
-        emboldenOutline(face, &face->glyph->outline);
-    }
-
     FT_Outline_Funcs    funcs;
 
     funcs.move_to   = move_proc;
@@ -569,11 +560,3 @@ void SkScalerContext_FreeType_Base::generateGlyphPath(FT_Face face,
 
     path->close();
 }
-
-void SkScalerContext_FreeType_Base::emboldenOutline(FT_Face face, FT_Outline* outline)
-{
-    FT_Pos strength;
-    strength = FT_MulFix(face->units_per_EM, face->size->metrics.y_scale)
-               / 24;
-    FT_Outline_Embolden(outline, strength);
-}
index 0021dfd..aef4d82 100644 (file)
@@ -39,7 +39,6 @@ protected:
 
     void generateGlyphImage(FT_Face face, const SkGlyph& glyph);
     void generateGlyphPath(FT_Face face, SkPath* path);
-    void emboldenOutline(FT_Face face, FT_Outline* outline);
 
 private:
     typedef SkScalerContext INHERITED;