1/* 2 * Copyright 2011 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 9#include "gm.h" 10#include "SkCanvas.h" 11 12namespace skiagm { 13 14#define TEXT_SIZE 48 15static const char gText[] = "Hello"; 16static const size_t gLen = sizeof(gText) - 1; 17 18class VertTextGM : public GM { 19public: 20 VertTextGM() {} 21 22protected: 23 24 SkString onShortName() { 25 return SkString("verttext"); 26 } 27 28 SkISize onISize() { return make_isize(640, 480); } 29 30 static void drawBaseline(SkCanvas* canvas, const SkPaint& paint, 31 SkScalar x, SkScalar y) { 32 SkScalar total = paint.measureText(gText, gLen); 33 34 SkPaint p; 35 p.setAntiAlias(true); 36 p.setColor(0x80FF0000); 37 canvas->drawLine(x, y, 38 paint.isVerticalText() ? x : x + total, 39 paint.isVerticalText() ? y + total : y, 40 p); 41 42 p.setColor(0xFF0000FF); 43 SkScalar adv[gLen]; 44 paint.getTextWidths(gText, gLen, adv, NULL); 45 for (size_t i = 0; i < gLen; ++i) { 46 canvas->drawCircle(x, y, SK_Scalar1 * 3 / 2, p); 47 if (paint.isVerticalText()) { 48 y += adv[i]; 49 } else { 50 x += adv[i]; 51 } 52 } 53 canvas->drawCircle(x, y, SK_Scalar1 * 3 / 2, p); 54 } 55 56 virtual void onDraw(SkCanvas* canvas) { 57 SkScalar x = SkIntToScalar(100); 58 SkScalar y = SkIntToScalar(50); 59 60 for (int i = 0; i < 4; ++i) { 61 SkPaint paint; 62 paint.setAntiAlias(true); 63 paint.setTextSize(SkIntToScalar(TEXT_SIZE)); 64 65 66 paint.setVerticalText(false); 67 drawBaseline(canvas, paint, x, y); 68 canvas->drawText(gText, gLen, x, y, paint); 69 70 paint.setVerticalText(true); 71 drawBaseline(canvas, paint, x, y); 72 canvas->drawText(gText, gLen, x, y, paint); 73 74 x += SkIntToScalar(40); 75 y += SkIntToScalar(120); 76 77 canvas->rotate(SkIntToScalar(-15)); 78 } 79 } 80 81private: 82 typedef GM INHERITED; 83}; 84 85/////////////////////////////////////////////////////////////////////////////// 86 87static GM* MyFactory(void*) { return new VertTextGM; } 88static GMRegistry reg(MyFactory); 89 90} 91