blob: 976f3c8ca98dc91a9209385557884241705dd6b8 [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
robertphillips@google.comc6ce7502012-05-08 13:15:37 +000024 rect.set(SkFloatToScalar(0.0f), SkFloatToScalar(0.21f),
25 SkFloatToScalar(0.78f), SkFloatToScalar(0.99f));
reed@android.com8a1c16f2008-12-17 15:59:43 +000026
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000027 path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350));
reed@android.com8a1c16f2008-12-17 15:59:43 +000028
29 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000030 paint.setStyle(SkPaint::kStroke_Style);
31 paint.setColor(0xFFFF0000);
djsollen@google.com166e6532012-03-20 14:24:38 +000032 paint.setTextSize(SkFloatToScalar(0.085f));
33 paint.setStrokeWidth(SkFloatToScalar(.005f));
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000034
35 canvas->drawPath(path, paint);
36
37 paint.setLooper(new SkBlurDrawLooper(SkFloatToScalar(0.002f),
38 SkFloatToScalar(0.0f),
39 SkFloatToScalar(0.0f),
40 (SkColor)0xFF000000))->unref();
41
42 const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
43 size_t len = strlen(text);
44
robertphillips@google.comc6ce7502012-05-08 13:15:37 +000045 canvas->drawTextOnPathHV(text, len, path, 0,
46 SkFloatToScalar(-0.025f), paint);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000047 canvas->restore();
reed@android.com8a1c16f2008-12-17 15:59:43 +000048}
49
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000050static void textPathMatrix(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000051 SkPaint paint;
52 SkPath path;
53 SkMatrix matrix;
rmistry@google.comae933ce2012-08-23 18:19:56 +000054
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000055 path.moveTo(SkIntToScalar(050), SkIntToScalar(200));
56 path.quadTo(SkIntToScalar(250), SkIntToScalar(000),
57 SkIntToScalar(450), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000058
59 paint.setAntiAlias(true);
rmistry@google.comae933ce2012-08-23 18:19:56 +000060
reed@android.com8a1c16f2008-12-17 15:59:43 +000061 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000062 canvas->drawPath(path, paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +000063 paint.setStyle(SkPaint::kFill_Style);
64 paint.setTextSize(SkIntToScalar(48));
65 paint.setTextAlign(SkPaint::kRight_Align);
rmistry@google.comae933ce2012-08-23 18:19:56 +000066
reed@android.comf2b98d62010-12-20 18:26:13 +000067 const char* text = "Reflection";
reed@android.com8a1c16f2008-12-17 15:59:43 +000068 size_t len = strlen(text);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000069
70 SkPathMeasure meas(path, false);
71 SkScalar pathLen = meas.getLength();
reed@android.com8a1c16f2008-12-17 15:59:43 +000072
73 canvas->drawTextOnPath(text, len, path, NULL, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000074
reed@android.com8a1c16f2008-12-17 15:59:43 +000075 paint.setColor(SK_ColorRED);
76 matrix.setScale(-SK_Scalar1, SK_Scalar1);
77 matrix.postTranslate(pathLen, 0);
78 canvas->drawTextOnPath(text, len, path, &matrix, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000079
reed@android.com8a1c16f2008-12-17 15:59:43 +000080 paint.setColor(SK_ColorBLUE);
81 matrix.setScale(SK_Scalar1, -SK_Scalar1);
82 canvas->drawTextOnPath(text, len, path, &matrix, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000083
reed@android.com8a1c16f2008-12-17 15:59:43 +000084 paint.setColor(SK_ColorGREEN);
85 matrix.setScale(-SK_Scalar1, -SK_Scalar1);
86 matrix.postTranslate(pathLen, 0);
87 canvas->drawTextOnPath(text, len, path, &matrix, paint);
88}
89
reed@google.comf2183392011-04-22 14:10:48 +000090class TextOnPathView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000091public:
92 SkPath fPath;
93 SkScalar fHOffset;
94
rmistry@google.comae933ce2012-08-23 18:19:56 +000095 TextOnPathView() {
reed@android.com8a1c16f2008-12-17 15:59:43 +000096 SkRect r;
97 r.set(SkIntToScalar(100), SkIntToScalar(100),
98 SkIntToScalar(300), SkIntToScalar(300));
99 fPath.addOval(r);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000100 fPath.offset(SkIntToScalar(-50), SkIntToScalar(-50));
reed@android.comf2b98d62010-12-20 18:26:13 +0000101
reed@android.com8a1c16f2008-12-17 15:59:43 +0000102 fHOffset = SkIntToScalar(50);
103 }
104
105protected:
106 // overrides from SkEventSink
107 virtual bool onQuery(SkEvent* evt) {
108 if (SampleCode::TitleQ(*evt)) {
109 SampleCode::TitleR(evt, "Text On Path");
110 return true;
111 }
112 return this->INHERITED::onQuery(evt);
113 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000114
reed@google.comf2183392011-04-22 14:10:48 +0000115 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000116 SkPaint paint;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000117 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000118 paint.setTextSize(SkIntToScalar(48));
119
120 const char* text = "Hamburgefons";
121 size_t len = strlen(text);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000122
123 for (int j = 0; j < REPEAT_COUNT; j++) {
124 SkScalar x = fHOffset;
125
126 paint.setColor(SK_ColorBLACK);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000127 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000128 x, paint.getTextSize()/2, paint);
129
130 paint.setColor(SK_ColorRED);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000131 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000132 x + SkIntToScalar(50), 0, paint);
133
134 paint.setColor(SK_ColorBLUE);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000135 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000136 x + SkIntToScalar(100), -paint.getTextSize()/2, paint);
137 }
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000138
reed@android.com8a1c16f2008-12-17 15:59:43 +0000139 paint.setColor(SK_ColorGREEN);
140 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000141 canvas->drawPath(fPath, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +0000142
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000143 canvas->translate(SkIntToScalar(275), 0);
144 textStrokePath(canvas);
145
146 canvas->translate(SkIntToScalar(-275), SkIntToScalar(250));
147 textPathMatrix(canvas);
rmistry@google.comae933ce2012-08-23 18:19:56 +0000148
reed@android.com8a1c16f2008-12-17 15:59:43 +0000149 if (REPEAT_COUNT > 1)
150 this->inval(NULL);
151 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000152
reed@android.com8a1c16f2008-12-17 15:59:43 +0000153 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
154 fHints += 1;
155 this->inval(NULL);
156 return this->INHERITED::onFindClickHandler(x, y);
157 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000158
reed@android.com8a1c16f2008-12-17 15:59:43 +0000159 virtual bool onClick(Click* click) {
160 return this->INHERITED::onClick(click);
161 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000162
reed@android.com8a1c16f2008-12-17 15:59:43 +0000163private:
164 int fHints;
reed@google.comf2183392011-04-22 14:10:48 +0000165 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000166};
167
reed@android.com8a1c16f2008-12-17 15:59:43 +0000168//////////////////////////////////////////////////////////////////////////////
169
170static SkView* MyFactory() {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000171 return new TextOnPathView;
172}
173
174static SkViewRegister reg(MyFactory);