blob: 9c7363091c16ac16631ece141145712c35d24ecc [file] [log] [blame]
scroggo@google.com3cb969f2012-07-27 20:39:19 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#include "gm.h"
10#include "SkCanvas.h"
11#include "SkString.h"
12#include "SkTypeface.h"
13#include "SkTypes.h"
14
15namespace skiagm {
16
17const char* gFaces[] = {
18 "Times Roman",
19 "Hiragino Maru Gothic Pro",
20 "Papyrus",
21 "Helvetica",
22 "Courier New"
23};
24
25class TypefaceGM : public GM {
26public:
27 TypefaceGM() {
28 fFaces = new SkTypeface*[SK_ARRAY_COUNT(gFaces)];
29 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
30 fFaces[i] = SkTypeface::CreateFromName(gFaces[i], SkTypeface::kNormal);
31 }
32 }
33
34 virtual ~TypefaceGM() {
35 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
36 fFaces[i]->unref();
37 }
robertphillips@google.com5d8d1862012-08-15 14:36:41 +000038 delete [] fFaces;
scroggo@google.com3cb969f2012-07-27 20:39:19 +000039 }
40
41protected:
42 virtual SkString onShortName() SK_OVERRIDE {
43 return SkString("typeface");
44 }
45
46 virtual SkISize onISize() SK_OVERRIDE {
47 return SkISize::Make(640, 480);
48 }
49
50 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
51 SkString text("Typefaces are fun!");
52 SkScalar y = 0;
53
54 SkPaint paint;
55 paint.setAntiAlias(true);
56 for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
57 this->drawWithFace(text, i, y, paint, canvas);
58 }
59 // Now go backwards
60 for (int i = SK_ARRAY_COUNT(gFaces) - 1; i >= 0; i--) {
61 this->drawWithFace(text, i, y, paint, canvas);
62 }
63 }
64
65private:
66 void drawWithFace(const SkString& text, int i, SkScalar& y, SkPaint& paint,
67 SkCanvas* canvas) {
68 paint.setTypeface(fFaces[i]);
69 y += paint.getFontMetrics(NULL);
70 canvas->drawText(text.c_str(), text.size(), 0, y, paint);
71 }
72
73 SkTypeface** fFaces;
74
75 typedef GM INHERITED;
76};
77
78////////////////////////////////////////////////////////////////////////////////
79
80static GM* MyFactory(void*) { return new TypefaceGM; }
81static GMRegistry reg(MyFactory);
82
83} // skiagm