Home | History | Annotate | Download | only in gm
      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 
     12 namespace skiagm {
     13 
     14 #define TEXT_SIZE   48
     15 static const char gText[] = "Hello";
     16 static const size_t gLen = sizeof(gText) - 1;
     17 
     18 class VertTextGM : public GM {
     19 public:
     20     VertTextGM() {}
     21 
     22 protected:
     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 
     81 private:
     82     typedef GM INHERITED;
     83 };
     84 
     85 ///////////////////////////////////////////////////////////////////////////////
     86 
     87 static GM* MyFactory(void*) { return new VertTextGM; }
     88 static GMRegistry reg(MyFactory);
     89 
     90 }
     91