diff options
author | Victoria Lease <violets@google.com> | 2012-06-13 21:58:29 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-06-13 21:58:29 -0700 |
commit | e8fff9d95ce9fa18d4114558f2b497ef62e240da (patch) | |
tree | 075409a9b0aff3b0548912cbe1976e0c007b1290 | |
parent | 1316efa2d9a5d356c8890d34867776d944cc643c (diff) | |
parent | ec1ad08b13b4034af0ae2e65da7803250a7eece3 (diff) | |
download | external_skia-e8fff9d95ce9fa18d4114558f2b497ef62e240da.zip external_skia-e8fff9d95ce9fa18d4114558f2b497ef62e240da.tar.gz external_skia-e8fff9d95ce9fa18d4114558f2b497ef62e240da.tar.bz2 |
am ec1ad08b: DO NOT MERGE Skia solution to fake-bold fallback fonts.
* commit 'ec1ad08b13b4034af0ae2e65da7803250a7eece3':
DO NOT MERGE Skia solution to fake-bold fallback fonts.
-rw-r--r-- | src/core/SkPaint.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp index 07fe9b0..e1932a7 100644 --- a/src/core/SkPaint.cpp +++ b/src/core/SkPaint.cpp @@ -1447,7 +1447,8 @@ void SkScalerContext::MakeRec(const SkPaint& paint, const SkMatrix* deviceMatrix, Rec* rec) { SkASSERT(deviceMatrix == NULL || !deviceMatrix->hasPerspective()); - rec->fOrigFontID = SkTypeface::UniqueID(paint.getTypeface()); + SkTypeface* typeface = paint.getTypeface(); + rec->fOrigFontID = SkTypeface::UniqueID(typeface); rec->fFontID = rec->fOrigFontID; rec->fTextSize = paint.getTextSize(); rec->fPreScaleX = paint.getTextScaleX(); @@ -1468,10 +1469,21 @@ void SkScalerContext::MakeRec(const SkPaint& paint, unsigned flags = 0; - if (paint.isFakeBoldText()) { #ifdef SK_USE_FREETYPE_EMBOLDEN + // It is possible that the SkTypeface used to draw glyphs has + // different properties than the SkTypeface set in the SkPaint. + // If we are asked to render bold text with a bold font, and are + // forced to fall back to a font with normal weight for some + // glyphs, we need to use fake bold to render those glyphs. In + // order to do that, we set SkScalerContext's "embolden" flag + // here if we are trying to draw bold text via any means, and + // ignore it at the glyph outline generation stage if the font + // actually being used is already bold. + if (paint.isFakeBoldText() || (typeface && typeface->isBold())) { flags |= SkScalerContext::kEmbolden_Flag; + } #else + if (paint.isFakeBoldText()) { SkScalar fakeBoldScale = SkScalarInterpFunc(paint.getTextSize(), kStdFakeBoldInterpKeys, kStdFakeBoldInterpValues, @@ -1484,8 +1496,8 @@ void SkScalerContext::MakeRec(const SkPaint& paint, } else { strokeWidth += extra; } -#endif } +#endif if (paint.isDevKernText()) { flags |= SkScalerContext::kDevKernText_Flag; |