blob: df3c382cb1ef0a39da94bb26aca8e6c8662cd964 [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 {
Mike Kleinbea1f942019-03-08 11:11:55 -060034 return SkString("scaledemoji_rendering");
Bruce Wang77bf48a2018-07-18 15:32:08 -040035 }
36
37 SkISize onISize() override { return SkISize::Make(1200, 1200); }
38
39 void onDraw(SkCanvas* canvas) override {
40
Mike Kleind46dce32018-08-16 10:17:03 -040041 canvas->drawColor(SK_ColorGRAY);
Bruce Wang77bf48a2018-07-18 15:32:08 -040042 SkScalar y = 0;
43
44 for (const auto& typeface: typefaces) {
Mike Reed088b74e2018-12-24 14:52:46 -050045 SkFont font(typeface);
46 font.setEdging(SkFont::Edging::kAlias);
47
Bruce Wang77bf48a2018-07-18 15:32:08 -040048 SkPaint paint;
Bruce Wang77bf48a2018-07-18 15:32:08 -040049 const char* text = sk_tool_utils::emoji_sample_text();
Mike Reedb5784ac2018-11-12 09:35:15 -050050 SkFontMetrics metrics;
Bruce Wang77bf48a2018-07-18 15:32:08 -040051
52 for (SkScalar textSize : { 70, 150 }) {
Mike Reed088b74e2018-12-24 14:52:46 -050053 font.setSize(textSize);
54 font.getMetrics(&metrics);
Bruce Wang77bf48a2018-07-18 15:32:08 -040055 // All typefaces should support subpixel mode
Mike Reed088b74e2018-12-24 14:52:46 -050056 font.setSubpixel(true);
Bruce Wang77bf48a2018-07-18 15:32:08 -040057 y += -metrics.fAscent;
58
Mike Reed088b74e2018-12-24 14:52:46 -050059 canvas->drawSimpleText(text, strlen(text), kUTF8_SkTextEncoding,
60 10, y, font, paint);
Bruce Wang77bf48a2018-07-18 15:32:08 -040061 y += metrics.fDescent + metrics.fLeading;
62 }
63 }
64 }
65
66private:
67 typedef GM INHERITED;
68};
69
70//////////////////////////////////////////////////////////////////////////////
71
72DEF_GM(return new ScaledEmojiRenderingGM;)
Mike Kleind46dce32018-08-16 10:17:03 -040073}