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