Home | History | Annotate | Download | only in gm
      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 
     17 namespace skiagm {
     18 
     19 class VertText2GM : public GM {
     20 public:
     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 
     33 protected:
     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 
     86 private:
     87     typedef GM INHERITED;
     88     SkScalar y, textHeight;
     89     SkTypeface* fProp;
     90     SkTypeface* fMono;
     91 };
     92 
     93 ///////////////////////////////////////////////////////////////////////////////
     94 
     95 static GM* MyFactory(void*) { return new VertText2GM; }
     96 static GMRegistry reg(MyFactory);
     97 
     98 }
     99