1 /* 2 * Copyright 2018 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "sk_tool_utils.h" 10 11 #include "Resources.h" 12 #include "SkCanvas.h" 13 #include "SkFontMetrics.h" 14 #include "SkStream.h" 15 #include "SkTo.h" 16 #include "SkTypeface.h" 17 18 namespace skiagm { 19 class ScaledEmojiRenderingGM : public GM { 20 public: ScaledEmojiRenderingGM()21 ScaledEmojiRenderingGM() {} 22 23 protected: 24 sk_sp<SkTypeface> typefaces[4]; 25 onOnceBeforeDraw()26 void onOnceBeforeDraw() override { 27 typefaces[0] = MakeResourceAsTypeface("fonts/colr.ttf"); 28 typefaces[1] = MakeResourceAsTypeface("fonts/sbix.ttf"); 29 typefaces[2] = MakeResourceAsTypeface("fonts/cbdt.ttf"); 30 typefaces[3] = sk_tool_utils::create_portable_typeface("Emoji", SkFontStyle()); 31 } 32 onShortName()33 SkString onShortName() override { 34 return SkString("scaledemoji_rendering"); 35 } 36 onISize()37 SkISize onISize() override { return SkISize::Make(1200, 1200); } 38 onDraw(SkCanvas * canvas)39 void onDraw(SkCanvas* canvas) override { 40 41 canvas->drawColor(SK_ColorGRAY); 42 SkScalar y = 0; 43 44 for (const auto& typeface: typefaces) { 45 SkFont font(typeface); 46 font.setEdging(SkFont::Edging::kAlias); 47 48 SkPaint paint; 49 const char* text = sk_tool_utils::emoji_sample_text(); 50 SkFontMetrics metrics; 51 52 for (SkScalar textSize : { 70, 150 }) { 53 font.setSize(textSize); 54 font.getMetrics(&metrics); 55 // All typefaces should support subpixel mode 56 font.setSubpixel(true); 57 y += -metrics.fAscent; 58 59 canvas->drawSimpleText(text, strlen(text), kUTF8_SkTextEncoding, 60 10, y, font, paint); 61 y += metrics.fDescent + metrics.fLeading; 62 } 63 } 64 } 65 66 private: 67 typedef GM INHERITED; 68 }; 69 70 ////////////////////////////////////////////////////////////////////////////// 71 72 DEF_GM(return new ScaledEmojiRenderingGM;) 73 } 74