| /* |
| * Copyright 2011 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" |
| |
| namespace skiagm { |
| |
| #define TEXT_SIZE 48 |
| static const char gText[] = "Hello"; |
| static const size_t gLen = sizeof(gText) - 1; |
| |
| class VertTextGM : public GM { |
| public: |
| VertTextGM() {} |
| |
| protected: |
| |
| SkString onShortName() { |
| return SkString("verttext"); |
| } |
| |
| SkISize onISize() { return make_isize(640, 480); } |
| |
| static void drawBaseline(SkCanvas* canvas, const SkPaint& paint, |
| SkScalar x, SkScalar y) { |
| SkScalar total = paint.measureText(gText, gLen); |
| |
| SkPaint p; |
| p.setAntiAlias(true); |
| p.setColor(0x80FF0000); |
| canvas->drawLine(x, y, |
| paint.isVerticalText() ? x : x + total, |
| paint.isVerticalText() ? y + total : y, |
| p); |
| |
| p.setColor(0xFF0000FF); |
| SkScalar adv[gLen]; |
| paint.getTextWidths(gText, gLen, adv, NULL); |
| for (size_t i = 0; i < gLen; ++i) { |
| canvas->drawCircle(x, y, SK_Scalar1 * 3 / 2, p); |
| if (paint.isVerticalText()) { |
| y += adv[i]; |
| } else { |
| x += adv[i]; |
| } |
| } |
| canvas->drawCircle(x, y, SK_Scalar1 * 3 / 2, p); |
| } |
| |
| virtual void onDraw(SkCanvas* canvas) { |
| SkScalar x = SkIntToScalar(100); |
| SkScalar y = SkIntToScalar(50); |
| |
| for (int i = 0; i < 4; ++i) { |
| SkPaint paint; |
| paint.setAntiAlias(true); |
| paint.setTextSize(SkIntToScalar(TEXT_SIZE)); |
| |
| |
| paint.setVerticalText(false); |
| drawBaseline(canvas, paint, x, y); |
| canvas->drawText(gText, gLen, x, y, paint); |
| |
| paint.setVerticalText(true); |
| drawBaseline(canvas, paint, x, y); |
| canvas->drawText(gText, gLen, x, y, paint); |
| |
| x += SkIntToScalar(40); |
| y += SkIntToScalar(120); |
| |
| canvas->rotate(SkIntToScalar(-15)); |
| } |
| } |
| |
| private: |
| typedef GM INHERITED; |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| static GM* MyFactory(void*) { return new VertTextGM; } |
| static GMRegistry reg(MyFactory); |
| |
| } |