1 2/* 3 * Copyright 2011 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 10/* Tests text vertical text rendering with different fonts and centering. 11 */ 12 13#include "gm.h" 14#include "SkCanvas.h" 15#include "SkTypeface.h" 16 17namespace skiagm { 18 19class VertText2GM : public GM { 20public: 21 VertText2GM() { 22 const int pointSize = 24; 23 textHeight = SkIntToScalar(pointSize); 24 fProp = SkTypeface::CreateFromName("Helvetica", SkTypeface::kNormal); 25 fMono = SkTypeface::CreateFromName("Courier New", SkTypeface::kNormal); 26 } 27 28 virtual ~VertText2GM() { 29 SkSafeUnref(fProp); 30 SkSafeUnref(fMono); 31 } 32 33protected: 34 35 SkString onShortName() { 36 return SkString("verttext2"); 37 } 38 39 SkISize onISize() { return make_isize(640, 480); } 40 41 virtual void onDraw(SkCanvas* canvas) { 42 43 for (int i = 0; i < 3; ++i) { 44 SkPaint paint; 45 paint.setColor(SK_ColorRED); 46 paint.setAntiAlias(true); 47 y = textHeight; 48 canvas->drawLine(0, SkIntToScalar(10), 49 SkIntToScalar(110), SkIntToScalar(10), paint); 50 canvas->drawLine(0, SkIntToScalar(240), 51 SkIntToScalar(110), SkIntToScalar(240), paint); 52 canvas->drawLine(0, SkIntToScalar(470), 53 SkIntToScalar(110), SkIntToScalar(470), paint); 54 drawText(canvas, SkString("Proportional / Top Aligned"), 55 fProp, SkPaint::kLeft_Align); 56 drawText(canvas, SkString("< Proportional / Centered >"), 57 fProp, SkPaint::kCenter_Align); 58 drawText(canvas, SkString("Monospaced / Top Aligned"), 59 fMono, SkPaint::kLeft_Align); 60 drawText(canvas, SkString("< Monospaced / Centered >"), 61 fMono, SkPaint::kCenter_Align); 62 canvas->rotate(SkIntToScalar(-15)); 63 canvas->translate(textHeight * 4, SkIntToScalar(50)); 64 if (i > 0) { 65 canvas->translate(0, SkIntToScalar(50)); 66 } 67 } 68 } 69 70 void drawText(SkCanvas* canvas, const SkString& string, 71 SkTypeface* family, SkPaint::Align alignment) { 72 SkPaint paint; 73 paint.setColor(SK_ColorBLACK); 74 paint.setAntiAlias(true); 75 paint.setVerticalText(true); 76 paint.setTextAlign(alignment); 77 paint.setTypeface(family); 78 paint.setTextSize(textHeight); 79 80 canvas->drawText(string.c_str(), string.size(), y, 81 SkIntToScalar(alignment == SkPaint::kLeft_Align ? 10 : 240), 82 paint); 83 y += textHeight; 84 } 85 86private: 87 typedef GM INHERITED; 88 SkScalar y, textHeight; 89 SkTypeface* fProp; 90 SkTypeface* fMono; 91}; 92 93/////////////////////////////////////////////////////////////////////////////// 94 95static GM* MyFactory(void*) { return new VertText2GM; } 96static GMRegistry reg(MyFactory); 97 98} 99