1
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        }
38        delete [] fFaces;
39    }
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
84