• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 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 #include "gm.h"
9 #include "SkCanvas.h"
10 #include "SkPaint.h"
11 #include "SkRandom.h"
12 #include "SkTemplates.h"
13 
14 class GetPosTextPathGM : public skiagm::GM {
15 public:
GetPosTextPathGM()16     GetPosTextPathGM() {}
17 
18 protected:
onShortName()19     SkString onShortName() {
20         return SkString("getpostextpath");
21     }
22 
onISize()23     SkISize onISize() { return skiagm::make_isize(480, 780); }
24 
strokePath(SkCanvas * canvas,const SkPath & path)25     static void strokePath(SkCanvas* canvas, const SkPath& path) {
26         SkPaint paint;
27         paint.setAntiAlias(true);
28         paint.setColor(SK_ColorRED);
29         paint.setStyle(SkPaint::kStroke_Style);
30         canvas->drawPath(path, paint);
31     }
32 
onDraw(SkCanvas * canvas)33     virtual void onDraw(SkCanvas* canvas) {
34         // explicitly add spaces, to test a prev. bug
35         const char* text = "Ham bur ge fons";
36         size_t len = strlen(text);
37         SkPath path;
38 
39         SkPaint paint;
40         paint.setAntiAlias(true);
41         paint.setTextSize(SkIntToScalar(48));
42 
43         canvas->translate(SkIntToScalar(10), SkIntToScalar(64));
44 
45         canvas->drawText(text, len, 0, 0, paint);
46         paint.getTextPath(text, len, 0, 0, &path);
47         strokePath(canvas, path);
48         path.reset();
49 
50         SkAutoTArray<SkPoint>  pos(len);
51         SkAutoTArray<SkScalar> widths(len);
52         paint.getTextWidths(text, len, &widths[0]);
53 
54         SkLCGRandom rand;
55         SkScalar x = SkIntToScalar(20);
56         SkScalar y = SkIntToScalar(100);
57         for (size_t i = 0; i < len; ++i) {
58             pos[i].set(x, y + rand.nextSScalar1() * 24);
59             x += widths[i];
60         }
61 
62         canvas->translate(0, SkIntToScalar(64));
63 
64         canvas->drawPosText(text, len, &pos[0], paint);
65         paint.getPosTextPath(text, len, &pos[0], &path);
66         strokePath(canvas, path);
67     }
68 };
69 
70 //////////////////////////////////////////////////////////////////////////////
71 
F(void *)72 static skiagm::GM* F(void*) { return new GetPosTextPathGM; }
73 static skiagm::GMRegistry gR(F);
74