blob: 91100a64ee566cf52167cca26f0d1d1ce1d75e8f [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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 */
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SampleCode.h"
djsollen@google.comae8ae3d2012-03-15 15:01:34 +00009#include "SkBlurDrawLooper.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#include "SkCanvas.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000011#include "SkPath.h"
12#include "SkPathMeasure.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000013
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000014#define REPEAT_COUNT 1
reed@android.com8a1c16f2008-12-17 15:59:43 +000015
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000016static void textStrokePath(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000017 SkPaint paint;
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000018 SkPath path;
19 SkRect rect;
reed@android.com8a1c16f2008-12-17 15:59:43 +000020
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000021 canvas->save();
22 canvas->scale(SkIntToScalar(250),SkIntToScalar(250));
reed@android.com8a1c16f2008-12-17 15:59:43 +000023
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000024 rect.set(0.0f, 0.21f, 0.78f, 0.99f);
reed@android.com8a1c16f2008-12-17 15:59:43 +000025
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000026 path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350));
reed@android.com8a1c16f2008-12-17 15:59:43 +000027
28 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000029 paint.setStyle(SkPaint::kStroke_Style);
30 paint.setColor(0xFFFF0000);
djsollen@google.com166e6532012-03-20 14:24:38 +000031 paint.setTextSize(SkFloatToScalar(0.085f));
32 paint.setStrokeWidth(SkFloatToScalar(.005f));
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000033
34 canvas->drawPath(path, paint);
35
36 paint.setLooper(new SkBlurDrawLooper(SkFloatToScalar(0.002f),
37 SkFloatToScalar(0.0f),
38 SkFloatToScalar(0.0f),
39 (SkColor)0xFF000000))->unref();
40
41 const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
42 size_t len = strlen(text);
43
44 canvas->drawTextOnPathHV(text, len, path, 0, -0.025f, paint);
45 canvas->restore();
reed@android.com8a1c16f2008-12-17 15:59:43 +000046}
47
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000048static void textPathMatrix(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000049 SkPaint paint;
50 SkPath path;
51 SkMatrix matrix;
52
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000053 path.moveTo(SkIntToScalar(050), SkIntToScalar(200));
54 path.quadTo(SkIntToScalar(250), SkIntToScalar(000),
55 SkIntToScalar(450), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000056
57 paint.setAntiAlias(true);
58
59 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000060 canvas->drawPath(path, paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +000061 paint.setStyle(SkPaint::kFill_Style);
62 paint.setTextSize(SkIntToScalar(48));
63 paint.setTextAlign(SkPaint::kRight_Align);
64
reed@android.comf2b98d62010-12-20 18:26:13 +000065 const char* text = "Reflection";
reed@android.com8a1c16f2008-12-17 15:59:43 +000066 size_t len = strlen(text);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000067
68 SkPathMeasure meas(path, false);
69 SkScalar pathLen = meas.getLength();
reed@android.com8a1c16f2008-12-17 15:59:43 +000070
71 canvas->drawTextOnPath(text, len, path, NULL, paint);
72
73 paint.setColor(SK_ColorRED);
74 matrix.setScale(-SK_Scalar1, SK_Scalar1);
75 matrix.postTranslate(pathLen, 0);
76 canvas->drawTextOnPath(text, len, path, &matrix, paint);
77
78 paint.setColor(SK_ColorBLUE);
79 matrix.setScale(SK_Scalar1, -SK_Scalar1);
80 canvas->drawTextOnPath(text, len, path, &matrix, paint);
81
82 paint.setColor(SK_ColorGREEN);
83 matrix.setScale(-SK_Scalar1, -SK_Scalar1);
84 matrix.postTranslate(pathLen, 0);
85 canvas->drawTextOnPath(text, len, path, &matrix, paint);
86}
87
reed@google.comf2183392011-04-22 14:10:48 +000088class TextOnPathView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000089public:
90 SkPath fPath;
91 SkScalar fHOffset;
92
93 TextOnPathView() {
94 SkRect r;
95 r.set(SkIntToScalar(100), SkIntToScalar(100),
96 SkIntToScalar(300), SkIntToScalar(300));
97 fPath.addOval(r);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000098 fPath.offset(SkIntToScalar(-50), SkIntToScalar(-50));
reed@android.comf2b98d62010-12-20 18:26:13 +000099
reed@android.com8a1c16f2008-12-17 15:59:43 +0000100 fHOffset = SkIntToScalar(50);
101 }
102
103protected:
104 // overrides from SkEventSink
105 virtual bool onQuery(SkEvent* evt) {
106 if (SampleCode::TitleQ(*evt)) {
107 SampleCode::TitleR(evt, "Text On Path");
108 return true;
109 }
110 return this->INHERITED::onQuery(evt);
111 }
112
reed@google.comf2183392011-04-22 14:10:48 +0000113 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000114 SkPaint paint;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000115 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000116 paint.setTextSize(SkIntToScalar(48));
117
118 const char* text = "Hamburgefons";
119 size_t len = strlen(text);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000120
121 for (int j = 0; j < REPEAT_COUNT; j++) {
122 SkScalar x = fHOffset;
123
124 paint.setColor(SK_ColorBLACK);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000125 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000126 x, paint.getTextSize()/2, paint);
127
128 paint.setColor(SK_ColorRED);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000129 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000130 x + SkIntToScalar(50), 0, paint);
131
132 paint.setColor(SK_ColorBLUE);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000133 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000134 x + SkIntToScalar(100), -paint.getTextSize()/2, paint);
135 }
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000136
reed@android.com8a1c16f2008-12-17 15:59:43 +0000137 paint.setColor(SK_ColorGREEN);
138 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000139 canvas->drawPath(fPath, paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000140
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000141 canvas->translate(SkIntToScalar(275), 0);
142 textStrokePath(canvas);
143
144 canvas->translate(SkIntToScalar(-275), SkIntToScalar(250));
145 textPathMatrix(canvas);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000146
147 if (REPEAT_COUNT > 1)
148 this->inval(NULL);
149 }
150
151 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
152 fHints += 1;
153 this->inval(NULL);
154 return this->INHERITED::onFindClickHandler(x, y);
155 }
156
157 virtual bool onClick(Click* click) {
158 return this->INHERITED::onClick(click);
159 }
160
161private:
162 int fHints;
reed@google.comf2183392011-04-22 14:10:48 +0000163 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000164};
165
reed@android.com8a1c16f2008-12-17 15:59:43 +0000166//////////////////////////////////////////////////////////////////////////////
167
168static SkView* MyFactory() {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000169 return new TextOnPathView;
170}
171
172static SkViewRegister reg(MyFactory);