aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2012-06-13 21:58:29 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-06-13 21:58:29 -0700
commite8fff9d95ce9fa18d4114558f2b497ef62e240da (patch)
tree075409a9b0aff3b0548912cbe1976e0c007b1290
parent1316efa2d9a5d356c8890d34867776d944cc643c (diff)
parentec1ad08b13b4034af0ae2e65da7803250a7eece3 (diff)
downloadexternal_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.cpp18
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;