diff options
author | joshualitt <joshualitt@chromium.org> | 2015-08-01 09:36:02 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-01 09:36:02 -0700 |
commit | a4a530614e9ba856aac3f16c29683e6a2a9153d9 (patch) | |
tree | 28b0df6a2121e76c29fffa02d7dcb51fc44464c6 | |
parent | 44c4851c91ac1779dfa5336defe05c251971cd45 (diff) |
Add BW masks to random scaler context
TBR=bsalomon@google.com
BUG=skia:
Review URL: https://codereview.chromium.org/1270793003
-rw-r--r-- | gm/textblobrandomfont.cpp | 36 | ||||
-rw-r--r-- | src/fonts/SkRandomScalerContext.cpp | 10 |
2 files changed, 36 insertions, 10 deletions
diff --git a/gm/textblobrandomfont.cpp b/gm/textblobrandomfont.cpp index f7d3b5cb1c..5c90ae1ed2 100644 --- a/gm/textblobrandomfont.cpp +++ b/gm/textblobrandomfont.cpp @@ -49,14 +49,34 @@ protected: SkRect bounds; paint.measureText(text, strlen(text), &bounds); - - SkScalar yOffset = bounds.height(); sk_tool_utils::add_to_text_blob(&builder, text, paint, 0, 0); // A8 + const char* bigtext1 = "The quick brown fox"; + const char* bigtext2 = "jumps over the lazy dog."; + paint.setTextSize(160); paint.setSubpixelText(false); paint.setLCDRenderText(false); - sk_tool_utils::add_to_text_blob(&builder, text, paint, 0, yOffset - 32); + paint.measureText(bigtext1, strlen(bigtext1), &bounds); + SkScalar offset = bounds.height(); + sk_tool_utils::add_to_text_blob(&builder, bigtext1, paint, 0, offset); + + paint.measureText(bigtext2, strlen(bigtext2), &bounds); + offset += bounds.height(); + sk_tool_utils::add_to_text_blob(&builder, bigtext2, paint, 0, offset); + + // color emoji + SkAutoTUnref<SkTypeface> origEmoji; + sk_tool_utils::emoji_typeface(&origEmoji); + if (origEmoji) { + const char* emojiText = sk_tool_utils::emoji_sample_text(); + paint.measureText(emojiText, strlen(emojiText), &bounds); + offset += bounds.height(); + SkAutoTUnref<SkTypeface> randomEmoji(SkNEW_ARGS(SkRandomTypeface, (orig, paint, + false))); + paint.setTypeface(randomEmoji); + sk_tool_utils::add_to_text_blob(&builder, emojiText, paint, 0, offset); + } // build fBlob.reset(builder.build()); @@ -88,9 +108,9 @@ protected: SkCanvas* c = surface->getCanvas(); - int stride = SkScalarCeilToInt(fBlob->bounds().height() / 2) + 10; - int yOffset = stride; - for (int i = 0; i < 10; i++) { + int stride = SkScalarCeilToInt(fBlob->bounds().height()); + int yOffset = stride / 8; + for (int i = 0; i < 1; i++) { // fiddle the canvas to force regen of textblobs canvas->rotate(i % 2 ? 0.0f : -0.05f); canvas->drawTextBlob(fBlob, 10.0f, SkIntToScalar(yOffset), paint); @@ -119,8 +139,8 @@ protected: private: SkAutoTUnref<const SkTextBlob> fBlob; - static const int kWidth = 1000; - static const int kHeight = 1000; + static const int kWidth = 2000; + static const int kHeight = 1600; typedef GM INHERITED; }; diff --git a/src/fonts/SkRandomScalerContext.cpp b/src/fonts/SkRandomScalerContext.cpp index 0693682faa..799e51df82 100644 --- a/src/fonts/SkRandomScalerContext.cpp +++ b/src/fonts/SkRandomScalerContext.cpp @@ -63,7 +63,7 @@ void SkRandomScalerContext::generateMetrics(SkGlyph* glyph) { // Here we will change the mask format of the glyph // NOTE this is being overridden by the base class SkMask::Format format; - switch (glyph->getGlyphID() % 3) { + switch (glyph->getGlyphID() % 4) { case 0: format = SkMask::kLCD16_Format; break; @@ -73,6 +73,9 @@ void SkRandomScalerContext::generateMetrics(SkGlyph* glyph) { case 2: format = SkMask::kARGB32_Format; break; + case 3: + format = SkMask::kBW_Format; + break; } fProxy->getMetrics(glyph); @@ -132,7 +135,7 @@ void SkRandomScalerContext::generateMetrics(SkGlyph* glyph) { void SkRandomScalerContext::generateImage(const SkGlyph& glyph) { SkMask::Format format = (SkMask::Format)glyph.fMaskFormat; - switch (glyph.getGlyphID() % 3) { + switch (glyph.getGlyphID() % 4) { case 0: format = SkMask::kLCD16_Format; break; @@ -142,6 +145,9 @@ void SkRandomScalerContext::generateImage(const SkGlyph& glyph) { case 2: format = SkMask::kARGB32_Format; break; + case 3: + format = SkMask::kBW_Format; + break; } const_cast<SkGlyph&>(glyph).fMaskFormat = format; |