blob: 0987f63ee33f31f4fc7b66355fc57746d6c2a84a [file] [log] [blame]
Bruce Wang77bf48a2018-07-18 15:32:08 -04001/*
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"
Mike Reed9cd2a5c2019-01-22 15:17:59 -050013#include "SkFontMetrics.h"
Bruce Wang77bf48a2018-07-18 15:32:08 -040014#include "SkStream.h"
15#include "SkTo.h"
16#include "SkTypeface.h"
17
18namespace skiagm {
19class ScaledEmojiRenderingGM : public GM {
20public:
21 ScaledEmojiRenderingGM() {}
22
23protected:
24 sk_sp<SkTypeface> typefaces[4];
25
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
33 SkString onShortName() override {
34 SkString name("scaledemoji_rendering");
35 name.append(sk_tool_utils::platform_font_manager());
36 return name;
37 }
38
39 SkISize onISize() override { return SkISize::Make(1200, 1200); }
40
41 void onDraw(SkCanvas* canvas) override {
42
Mike Kleind46dce32018-08-16 10:17:03 -040043 canvas->drawColor(SK_ColorGRAY);
Bruce Wang77bf48a2018-07-18 15:32:08 -040044 SkScalar y = 0;
45
46 for (const auto& typeface: typefaces) {
Mike Reed088b74e2018-12-24 14:52:46 -050047 SkFont font(typeface);
48 font.setEdging(SkFont::Edging::kAlias);
49
Bruce Wang77bf48a2018-07-18 15:32:08 -040050 SkPaint paint;
Bruce Wang77bf48a2018-07-18 15:32:08 -040051 const char* text = sk_tool_utils::emoji_sample_text();
Mike Reedb5784ac2018-11-12 09:35:15 -050052 SkFontMetrics metrics;
Bruce Wang77bf48a2018-07-18 15:32:08 -040053
54 for (SkScalar textSize : { 70, 150 }) {
Mike Reed088b74e2018-12-24 14:52:46 -050055 font.setSize(textSize);
56 font.getMetrics(&metrics);
Bruce Wang77bf48a2018-07-18 15:32:08 -040057 // All typefaces should support subpixel mode
Mike Reed088b74e2018-12-24 14:52:46 -050058 font.setSubpixel(true);
Bruce Wang77bf48a2018-07-18 15:32:08 -040059 y += -metrics.fAscent;
60
Mike Reed088b74e2018-12-24 14:52:46 -050061 canvas->drawSimpleText(text, strlen(text), kUTF8_SkTextEncoding,
62 10, y, font, paint);
Bruce Wang77bf48a2018-07-18 15:32:08 -040063 y += metrics.fDescent + metrics.fLeading;
64 }
65 }
66 }
67
68private:
69 typedef GM INHERITED;
70};
71
72//////////////////////////////////////////////////////////////////////////////
73
74DEF_GM(return new ScaledEmojiRenderingGM;)
Mike Kleind46dce32018-08-16 10:17:03 -040075}