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