blob: ac8b3c6d51a16b8372fd98b410e111769477b0df [file] [log] [blame]
Jim Van Verth1b125452018-02-13 15:21:34 -05001/*
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 "SkStream.h"
14#include "SkTypeface.h"
15
16namespace skiagm {
17
18class ScaledEmojiGM : public GM {
19public:
20 ScaledEmojiGM() { }
21
22protected:
23 struct EmojiFont {
24 sk_sp<SkTypeface> fTypeface;
25 const char* fText;
26 } fEmojiFont;
27
28 void onOnceBeforeDraw() override {
29 fEmojiFont.fTypeface = sk_tool_utils::emoji_typeface();
30 fEmojiFont.fText = sk_tool_utils::emoji_sample_text();
31 }
32
33 SkString onShortName() override {
34 SkString name("scaledemoji");
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
43 canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
44
45 SkPaint paint;
46 paint.setTypeface(fEmojiFont.fTypeface);
47 const char* text = fEmojiFont.fText;
48
49 // draw text at different point sizes
50 // Testing GPU bitmap path, SDF path with no scaling,
51 // SDF path with scaling, path rendering with scaling
52 SkPaint::FontMetrics metrics;
53 SkScalar y = 0;
54 for (SkScalar textSize : { 70, 180, 270, 340 }) {
55 paint.setTextSize(textSize);
56 paint.getFontMetrics(&metrics);
57 y += -metrics.fAscent;
58 canvas->drawString(text, 10, y, paint);
59 y += metrics.fDescent + metrics.fLeading;
60 }
61
62 }
63
Jim Van Verth080a9282018-03-02 10:41:43 -050064private:
65 typedef GM INHERITED;
66};
67
68class ScaledEmojiPosGM : public GM {
69public:
70 ScaledEmojiPosGM() {}
71
72protected:
73 struct EmojiFont {
74 sk_sp<SkTypeface> fTypeface;
75 const char* fText;
76 } fEmojiFont;
77
78 void onOnceBeforeDraw() override {
79 fEmojiFont.fTypeface = sk_tool_utils::emoji_typeface();
80 fEmojiFont.fText = sk_tool_utils::emoji_sample_text();
81 }
82
83 SkString onShortName() override {
84 SkString name("scaledemojipos");
85 name.append(sk_tool_utils::platform_font_manager());
86 return name;
87 }
88
89 SkISize onISize() override { return SkISize::Make(1200, 1200); }
90
91 void onDraw(SkCanvas* canvas) override {
92
93 canvas->drawColor(sk_tool_utils::color_to_565(SK_ColorGRAY));
94
95 SkPaint paint;
96 paint.setTypeface(fEmojiFont.fTypeface);
97 const char* text = fEmojiFont.fText;
98
99 // draw text at different point sizes
100 // Testing GPU bitmap path, SDF path with no scaling,
101 // SDF path with scaling, path rendering with scaling
102 SkPaint::FontMetrics metrics;
103 SkScalar y = 0;
104 for (SkScalar textSize : { 70, 180, 270, 340 }) {
105 paint.setTextSize(textSize);
106 paint.getFontMetrics(&metrics);
107 y += -metrics.fAscent;
108
109 int len = SkToInt(strlen(text));
110 SkAutoTArray<SkPoint> pos(len);
111 SkAutoTArray<SkScalar> widths(len);
112 paint.getTextWidths(text, len, &widths[0]);
113
114 SkScalar x = SkIntToScalar(10);
115 for (int i = 0; i < len; ++i) {
116 pos[i].set(x, y);
117 x += widths[i];
118 }
119
120 canvas->drawPosText(text, len, &pos[0], paint);
121 y += metrics.fDescent + metrics.fLeading;
122 }
123
124 }
125
126private:
Jim Van Verth1b125452018-02-13 15:21:34 -0500127 typedef GM INHERITED;
128};
129
130//////////////////////////////////////////////////////////////////////////////
131
132DEF_GM(return new ScaledEmojiGM;)
Jim Van Verth080a9282018-03-02 10:41:43 -0500133DEF_GM(return new ScaledEmojiPosGM;)
Jim Van Verth1b125452018-02-13 15:21:34 -0500134
135}