• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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