blob: 4c6857f210e88acbc6252c133a6c17b3b646203d [file] [log] [blame]
scroggo@google.com3cb969f2012-07-27 20:39:19 +00001/*
2 * Copyright 2012 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 "SkCanvas.h"
10#include "SkString.h"
11#include "SkTypeface.h"
12#include "SkTypes.h"
13
reed@google.com92abe482013-02-26 16:57:16 +000014static const char* gFaces[] = {
scroggo@google.com3cb969f2012-07-27 20:39:19 +000015 "Times Roman",
16 "Hiragino Maru Gothic Pro",
17 "Papyrus",
18 "Helvetica",
19 "Courier New"
20};
21
reed@google.com92abe482013-02-26 16:57:16 +000022class TypefaceGM : public skiagm::GM {
scroggo@google.com3cb969f2012-07-27 20:39:19 +000023public:
24 TypefaceGM() {
25 fFaces = new SkTypeface*[SK_ARRAY_COUNT(gFaces)];
26 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
27 fFaces[i] = SkTypeface::CreateFromName(gFaces[i], SkTypeface::kNormal);
28 }
29 }
30
31 virtual ~TypefaceGM() {
32 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
reed@google.com098b7ff2013-02-26 17:01:26 +000033 SkSafeUnref(fFaces[i]);
scroggo@google.com3cb969f2012-07-27 20:39:19 +000034 }
robertphillips@google.com5d8d1862012-08-15 14:36:41 +000035 delete [] fFaces;
scroggo@google.com3cb969f2012-07-27 20:39:19 +000036 }
37
38protected:
39 virtual SkString onShortName() SK_OVERRIDE {
40 return SkString("typeface");
41 }
42
43 virtual SkISize onISize() SK_OVERRIDE {
44 return SkISize::Make(640, 480);
45 }
46
47 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
48 SkString text("Typefaces are fun!");
49 SkScalar y = 0;
50
51 SkPaint paint;
52 paint.setAntiAlias(true);
53 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
54 this->drawWithFace(text, i, y, paint, canvas);
55 }
56 // Now go backwards
57 for (int i = SK_ARRAY_COUNT(gFaces) - 1; i >= 0; i--) {
58 this->drawWithFace(text, i, y, paint, canvas);
59 }
60 }
61
62private:
63 void drawWithFace(const SkString& text, int i, SkScalar& y, SkPaint& paint,
64 SkCanvas* canvas) {
65 paint.setTypeface(fFaces[i]);
66 y += paint.getFontMetrics(NULL);
67 canvas->drawText(text.c_str(), text.size(), 0, y, paint);
68 }
69
70 SkTypeface** fFaces;
rmistry@google.comae933ce2012-08-23 18:19:56 +000071
reed@google.com92abe482013-02-26 16:57:16 +000072 typedef skiagm::GM INHERITED;
scroggo@google.com3cb969f2012-07-27 20:39:19 +000073};
74
reed@google.com92abe482013-02-26 16:57:16 +000075///////////////////////////////////////////////////////////////////////////////
scroggo@google.com3cb969f2012-07-27 20:39:19 +000076
reed@google.com92abe482013-02-26 16:57:16 +000077static const struct {
78 const char* fName;
79 SkTypeface::Style fStyle;
80} gFaceStyles[] = {
81 { "sans-serif", SkTypeface::kNormal },
82 { "sans-serif", SkTypeface::kBold },
83 { "sans-serif", SkTypeface::kItalic },
84 { "sans-serif", SkTypeface::kBoldItalic },
85 { "serif", SkTypeface::kNormal },
86 { "serif", SkTypeface::kBold },
87 { "serif", SkTypeface::kItalic },
88 { "serif", SkTypeface::kBoldItalic },
89 { "monospace", SkTypeface::kNormal },
90 { "monospace", SkTypeface::kBold },
91 { "monospace", SkTypeface::kItalic },
92 { "monospace", SkTypeface::kBoldItalic },
93};
scroggo@google.com3cb969f2012-07-27 20:39:19 +000094
reed@google.com92abe482013-02-26 16:57:16 +000095static const int gFaceStylesCount = SK_ARRAY_COUNT(gFaceStyles);
96
97class TypefaceStylesGM : public skiagm::GM {
98 SkTypeface* fFaces[gFaceStylesCount];
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +000099
reed@google.com92abe482013-02-26 16:57:16 +0000100public:
101 TypefaceStylesGM() {
102 for (int i = 0; i < gFaceStylesCount; i++) {
103 fFaces[i] = SkTypeface::CreateFromName(gFaceStyles[i].fName,
104 gFaceStyles[i].fStyle);
105 }
106 }
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000107
reed@google.com92abe482013-02-26 16:57:16 +0000108 virtual ~TypefaceStylesGM() {
109 for (int i = 0; i < gFaceStylesCount; i++) {
110 SkSafeUnref(fFaces[i]);
111 }
112 }
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000113
reed@google.com92abe482013-02-26 16:57:16 +0000114protected:
115 virtual SkString onShortName() SK_OVERRIDE {
116 return SkString("typefacestyles");
117 }
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000118
reed@google.com92abe482013-02-26 16:57:16 +0000119 virtual SkISize onISize() SK_OVERRIDE {
120 return SkISize::Make(640, 480);
121 }
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000122
reed@google.com92abe482013-02-26 16:57:16 +0000123 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
124 SkPaint paint;
125 paint.setAntiAlias(true);
126 paint.setTextSize(SkIntToScalar(30));
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000127
reed@google.com92abe482013-02-26 16:57:16 +0000128 const char* text = "Hamburgefons";
129 const size_t textLen = strlen(text);
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000130
reed@google.com92abe482013-02-26 16:57:16 +0000131 SkScalar x = SkIntToScalar(10);
132 SkScalar dy = paint.getFontMetrics(NULL);
133 SkScalar y = dy;
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000134
reed@google.com92abe482013-02-26 16:57:16 +0000135 paint.setLinearText(true);
136 for (int i = 0; i < gFaceStylesCount; i++) {
137 paint.setTypeface(fFaces[i]);
138 canvas->drawText(text, textLen, x, y, paint);
139 y += dy;
140 }
141 }
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000142
reed@google.com92abe482013-02-26 16:57:16 +0000143private:
144 typedef skiagm::GM INHERITED;
145};
skia.committer@gmail.com12eea2b2013-02-27 07:10:10 +0000146
reed@google.com92abe482013-02-26 16:57:16 +0000147///////////////////////////////////////////////////////////////////////////////
148
149DEF_GM( return new TypefaceGM; )
150DEF_GM( return new TypefaceStylesGM; )