Add support for forcing autohinting.

http://codereview.appspot.com/1651044/show

git-svn-id: http://skia.googlecode.com/svn/trunk@580 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index fd85bb2..b7645dd 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -293,7 +293,8 @@
     if (SkPaint::kFull_Hinting == h && !rec->isLCD()) {
         // collapse full->normal hinting if we're not doing LCD
         h = SkPaint::kNormal_Hinting;
-    } else if (rec->fSubpixelPositioning && SkPaint::kNo_Hinting != h) {
+    } else if ((rec->fFlags & SkScalerContext::kSubpixelPositioning_Flag) &&
+               SkPaint::kNo_Hinting != h) {
         // to do subpixel, we must have at most slight hinting
         h = SkPaint::kSlight_Hinting;
     }
@@ -379,9 +380,16 @@
                 loadFlags = FT_LOAD_TARGET_LIGHT;  // This implies FORCE_AUTOHINT
                 break;
             case SkPaint::kNormal_Hinting:
-                loadFlags = FT_LOAD_TARGET_NORMAL;
+                if (fRec.fFlags & SkScalerContext::kAutohinting_Flag)
+                    loadFlags = FT_LOAD_FORCE_AUTOHINT;
+                else
+                    loadFlags = FT_LOAD_NO_AUTOHINT;
                 break;
             case SkPaint::kFull_Hinting:
+                if (fRec.fFlags & SkScalerContext::kAutohinting_Flag) {
+                    loadFlags = FT_LOAD_FORCE_AUTOHINT;
+                    break;
+                }
                 loadFlags = FT_LOAD_TARGET_NORMAL;
                 if (SkMask::kHorizontalLCD_Format == fRec.fMaskFormat)
                     loadFlags = FT_LOAD_TARGET_LCD;
@@ -587,7 +595,7 @@
         }
         FT_Outline_Get_CBox(&fFace->glyph->outline, &bbox);
 
-        if (fRec.fSubpixelPositioning) {
+        if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {
             int dx = glyph->getSubXFixed() >> 10;
             int dy = glyph->getSubYFixed() >> 10;
             // negate dy since freetype-y-goes-up and skia-y-goes-down
@@ -624,7 +632,7 @@
         goto ERROR;
     }
 
-    if (!fRec.fSubpixelPositioning) {
+    if ((fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) == 0) {
         glyph->fAdvanceX = SkFDot6ToFixed(fFace->glyph->advance.x);
         glyph->fAdvanceY = -SkFDot6ToFixed(fFace->glyph->advance.y);
         if (fRec.fFlags & kDevKernText_Flag) {
@@ -684,7 +692,7 @@
             }
 
             int dx = 0, dy = 0;
-            if (fRec.fSubpixelPositioning) {
+            if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {
                 dx = glyph.getSubXFixed() >> 10;
                 dy = glyph.getSubYFixed() >> 10;
                 // negate dy since freetype-y-goes-up and skia-y-goes-down