2012-07-27 20:39:19 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2012 Google Inc.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "gm.h"
|
|
|
|
#include "SkCanvas.h"
|
|
|
|
#include "SkString.h"
|
|
|
|
#include "SkTypeface.h"
|
|
|
|
#include "SkTypes.h"
|
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
static const char* gFaces[] = {
|
2012-07-27 20:39:19 +00:00
|
|
|
"Times Roman",
|
|
|
|
"Hiragino Maru Gothic Pro",
|
|
|
|
"Papyrus",
|
|
|
|
"Helvetica",
|
|
|
|
"Courier New"
|
|
|
|
};
|
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
class TypefaceGM : public skiagm::GM {
|
2012-07-27 20:39:19 +00:00
|
|
|
public:
|
|
|
|
TypefaceGM() {
|
|
|
|
fFaces = new SkTypeface*[SK_ARRAY_COUNT(gFaces)];
|
|
|
|
for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
|
|
|
|
fFaces[i] = SkTypeface::CreateFromName(gFaces[i], SkTypeface::kNormal);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual ~TypefaceGM() {
|
|
|
|
for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
|
2013-02-26 17:01:26 +00:00
|
|
|
SkSafeUnref(fFaces[i]);
|
2012-07-27 20:39:19 +00:00
|
|
|
}
|
2012-08-15 14:36:41 +00:00
|
|
|
delete [] fFaces;
|
2012-07-27 20:39:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual SkString onShortName() SK_OVERRIDE {
|
|
|
|
return SkString("typeface");
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual SkISize onISize() SK_OVERRIDE {
|
|
|
|
return SkISize::Make(640, 480);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
|
|
|
SkString text("Typefaces are fun!");
|
|
|
|
SkScalar y = 0;
|
|
|
|
|
|
|
|
SkPaint paint;
|
|
|
|
paint.setAntiAlias(true);
|
|
|
|
for (size_t i = 0; i < SK_ARRAY_COUNT(gFaces); i++) {
|
|
|
|
this->drawWithFace(text, i, y, paint, canvas);
|
|
|
|
}
|
|
|
|
// Now go backwards
|
|
|
|
for (int i = SK_ARRAY_COUNT(gFaces) - 1; i >= 0; i--) {
|
|
|
|
this->drawWithFace(text, i, y, paint, canvas);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
void drawWithFace(const SkString& text, int i, SkScalar& y, SkPaint& paint,
|
|
|
|
SkCanvas* canvas) {
|
|
|
|
paint.setTypeface(fFaces[i]);
|
|
|
|
y += paint.getFontMetrics(NULL);
|
|
|
|
canvas->drawText(text.c_str(), text.size(), 0, y, paint);
|
|
|
|
}
|
|
|
|
|
|
|
|
SkTypeface** fFaces;
|
2012-08-23 18:19:56 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
typedef skiagm::GM INHERITED;
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
static const struct {
|
|
|
|
const char* fName;
|
|
|
|
SkTypeface::Style fStyle;
|
|
|
|
} gFaceStyles[] = {
|
|
|
|
{ "sans-serif", SkTypeface::kNormal },
|
|
|
|
{ "sans-serif", SkTypeface::kBold },
|
|
|
|
{ "sans-serif", SkTypeface::kItalic },
|
|
|
|
{ "sans-serif", SkTypeface::kBoldItalic },
|
|
|
|
{ "serif", SkTypeface::kNormal },
|
|
|
|
{ "serif", SkTypeface::kBold },
|
|
|
|
{ "serif", SkTypeface::kItalic },
|
|
|
|
{ "serif", SkTypeface::kBoldItalic },
|
|
|
|
{ "monospace", SkTypeface::kNormal },
|
|
|
|
{ "monospace", SkTypeface::kBold },
|
|
|
|
{ "monospace", SkTypeface::kItalic },
|
|
|
|
{ "monospace", SkTypeface::kBoldItalic },
|
2012-07-27 20:39:19 +00:00
|
|
|
};
|
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
static const int gFaceStylesCount = SK_ARRAY_COUNT(gFaceStyles);
|
|
|
|
|
|
|
|
class TypefaceStylesGM : public skiagm::GM {
|
|
|
|
SkTypeface* fFaces[gFaceStylesCount];
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
public:
|
|
|
|
TypefaceStylesGM() {
|
|
|
|
for (int i = 0; i < gFaceStylesCount; i++) {
|
|
|
|
fFaces[i] = SkTypeface::CreateFromName(gFaceStyles[i].fName,
|
|
|
|
gFaceStyles[i].fStyle);
|
|
|
|
}
|
|
|
|
}
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
virtual ~TypefaceStylesGM() {
|
|
|
|
for (int i = 0; i < gFaceStylesCount; i++) {
|
|
|
|
SkSafeUnref(fFaces[i]);
|
|
|
|
}
|
|
|
|
}
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
protected:
|
|
|
|
virtual SkString onShortName() SK_OVERRIDE {
|
|
|
|
return SkString("typefacestyles");
|
|
|
|
}
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
virtual SkISize onISize() SK_OVERRIDE {
|
|
|
|
return SkISize::Make(640, 480);
|
|
|
|
}
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
|
|
|
SkPaint paint;
|
|
|
|
paint.setAntiAlias(true);
|
|
|
|
paint.setTextSize(SkIntToScalar(30));
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
const char* text = "Hamburgefons";
|
|
|
|
const size_t textLen = strlen(text);
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
SkScalar x = SkIntToScalar(10);
|
|
|
|
SkScalar dy = paint.getFontMetrics(NULL);
|
|
|
|
SkScalar y = dy;
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
paint.setLinearText(true);
|
|
|
|
for (int i = 0; i < gFaceStylesCount; i++) {
|
|
|
|
paint.setTypeface(fFaces[i]);
|
|
|
|
canvas->drawText(text, textLen, x, y, paint);
|
|
|
|
y += dy;
|
|
|
|
}
|
|
|
|
}
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
private:
|
|
|
|
typedef skiagm::GM INHERITED;
|
|
|
|
};
|
2013-02-27 07:10:10 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
2012-07-27 20:39:19 +00:00
|
|
|
|
2013-02-26 16:57:16 +00:00
|
|
|
DEF_GM( return new TypefaceGM; )
|
|
|
|
DEF_GM( return new TypefaceStylesGM; )
|