blob: 7c71084dbbff007184d2771cc65ed6664608a97e [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"
robertphillips@google.comb7061172013-09-06 14:16:12 +00009#include "SkBlurMask.h"
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000010#include "SkBlurDrawLooper.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000011#include "SkCanvas.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000012#include "SkPath.h"
13#include "SkPathMeasure.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000014
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000015#define REPEAT_COUNT 1
reed@android.com8a1c16f2008-12-17 15:59:43 +000016
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000017static void textStrokePath(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000018 SkPaint paint;
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000019 SkPath path;
20 SkRect rect;
reed@android.com8a1c16f2008-12-17 15:59:43 +000021
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000022 canvas->save();
23 canvas->scale(SkIntToScalar(250),SkIntToScalar(250));
reed@android.com8a1c16f2008-12-17 15:59:43 +000024
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000025 rect.set(0.0f, 0.21f,
26 0.78f, 0.99f);
reed@android.com8a1c16f2008-12-17 15:59:43 +000027
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000028 path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350));
reed@android.com8a1c16f2008-12-17 15:59:43 +000029
30 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000031 paint.setStyle(SkPaint::kStroke_Style);
32 paint.setColor(0xFFFF0000);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000033 paint.setTextSize(0.085f);
34 paint.setStrokeWidth(.005f);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000035
36 canvas->drawPath(path, paint);
37
reed7b380d02016-03-21 13:25:16 -070038 paint.setLooper(SkBlurDrawLooper::Make(SK_ColorBLACK, SkBlurMask::ConvertRadiusToSigma(0.002f),
39 0.0f, 0.0f));
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000040
41 const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
42 size_t len = strlen(text);
43
robertphillips@google.comc6ce7502012-05-08 13:15:37 +000044 canvas->drawTextOnPathHV(text, len, path, 0,
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000045 -0.025f, paint);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000046 canvas->restore();
reed@android.com8a1c16f2008-12-17 15:59:43 +000047}
48
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000049static void textPathMatrix(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000050 SkPaint paint;
51 SkPath path;
52 SkMatrix matrix;
rmistry@google.comae933ce2012-08-23 18:19:56 +000053
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000054 path.moveTo(SkIntToScalar(050), SkIntToScalar(200));
55 path.quadTo(SkIntToScalar(250), SkIntToScalar(000),
56 SkIntToScalar(450), SkIntToScalar(200));
reed@android.com8a1c16f2008-12-17 15:59:43 +000057
58 paint.setAntiAlias(true);
rmistry@google.comae933ce2012-08-23 18:19:56 +000059
reed@android.com8a1c16f2008-12-17 15:59:43 +000060 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000061 canvas->drawPath(path, paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +000062 paint.setStyle(SkPaint::kFill_Style);
63 paint.setTextSize(SkIntToScalar(48));
64 paint.setTextAlign(SkPaint::kRight_Align);
rmistry@google.comae933ce2012-08-23 18:19:56 +000065
reed@android.comf2b98d62010-12-20 18:26:13 +000066 const char* text = "Reflection";
reed@android.com8a1c16f2008-12-17 15:59:43 +000067 size_t len = strlen(text);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +000068
69 SkPathMeasure meas(path, false);
70 SkScalar pathLen = meas.getLength();
reed@android.com8a1c16f2008-12-17 15:59:43 +000071
halcanary96fcdcc2015-08-27 07:41:13 -070072 canvas->drawTextOnPath(text, len, path, nullptr, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000073
reed@android.com8a1c16f2008-12-17 15:59:43 +000074 paint.setColor(SK_ColorRED);
75 matrix.setScale(-SK_Scalar1, SK_Scalar1);
76 matrix.postTranslate(pathLen, 0);
77 canvas->drawTextOnPath(text, len, path, &matrix, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000078
reed@android.com8a1c16f2008-12-17 15:59:43 +000079 paint.setColor(SK_ColorBLUE);
80 matrix.setScale(SK_Scalar1, -SK_Scalar1);
81 canvas->drawTextOnPath(text, len, path, &matrix, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000082
reed@android.com8a1c16f2008-12-17 15:59:43 +000083 paint.setColor(SK_ColorGREEN);
84 matrix.setScale(-SK_Scalar1, -SK_Scalar1);
85 matrix.postTranslate(pathLen, 0);
86 canvas->drawTextOnPath(text, len, path, &matrix, paint);
87}
88
reed@google.comf2183392011-04-22 14:10:48 +000089class TextOnPathView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000090public:
91 SkPath fPath;
92 SkScalar fHOffset;
93
caryclark63c684a2015-02-25 09:04:04 -080094protected:
mtklein36352bf2015-03-25 18:17:31 -070095 void onOnceBeforeDraw() override {
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
reed@android.com8a1c16f2008-12-17 15:59:43 +0000105 // overrides from SkEventSink
mtklein36352bf2015-03-25 18:17:31 -0700106 bool onQuery(SkEvent* evt) override {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000107 if (SampleCode::TitleQ(*evt)) {
108 SampleCode::TitleR(evt, "Text On Path");
109 return true;
110 }
111 return this->INHERITED::onQuery(evt);
112 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000113
mtklein36352bf2015-03-25 18:17:31 -0700114 void onDrawContent(SkCanvas* canvas) override {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000115 SkPaint paint;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000116 paint.setAntiAlias(true);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000117 paint.setTextSize(SkIntToScalar(48));
118
119 const char* text = "Hamburgefons";
120 size_t len = strlen(text);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000121
122 for (int j = 0; j < REPEAT_COUNT; j++) {
123 SkScalar x = fHOffset;
124
125 paint.setColor(SK_ColorBLACK);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000126 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000127 x, paint.getTextSize()/2, paint);
128
129 paint.setColor(SK_ColorRED);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000130 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000131 x + SkIntToScalar(50), 0, paint);
132
133 paint.setColor(SK_ColorBLUE);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000134 canvas->drawTextOnPathHV(text, len, fPath,
reed@android.com8a1c16f2008-12-17 15:59:43 +0000135 x + SkIntToScalar(100), -paint.getTextSize()/2, paint);
136 }
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000137
reed@android.com8a1c16f2008-12-17 15:59:43 +0000138 paint.setColor(SK_ColorGREEN);
139 paint.setStyle(SkPaint::kStroke_Style);
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000140 canvas->drawPath(fPath, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +0000141
djsollen@google.comae8ae3d2012-03-15 15:01:34 +0000142 canvas->translate(SkIntToScalar(275), 0);
143 textStrokePath(canvas);
144
145 canvas->translate(SkIntToScalar(-275), SkIntToScalar(250));
146 textPathMatrix(canvas);
rmistry@google.comae933ce2012-08-23 18:19:56 +0000147
reed@android.com8a1c16f2008-12-17 15:59:43 +0000148 if (REPEAT_COUNT > 1)
halcanary96fcdcc2015-08-27 07:41:13 -0700149 this->inval(nullptr);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000150 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000151
mtklein36352bf2015-03-25 18:17:31 -0700152 SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000153 fHints += 1;
halcanary96fcdcc2015-08-27 07:41:13 -0700154 this->inval(nullptr);
reed@google.com4d5c26d2013-01-08 16:17:50 +0000155 return this->INHERITED::onFindClickHandler(x, y, modi);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000156 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000157
mtklein36352bf2015-03-25 18:17:31 -0700158 bool onClick(Click* click) override {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000159 return this->INHERITED::onClick(click);
160 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000161
reed@android.com8a1c16f2008-12-17 15:59:43 +0000162private:
163 int fHints;
reed@google.comf2183392011-04-22 14:10:48 +0000164 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000165};
166
reed@android.com8a1c16f2008-12-17 15:59:43 +0000167//////////////////////////////////////////////////////////////////////////////
168
169static SkView* MyFactory() {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000170 return new TextOnPathView;
171}
172
173static SkViewRegister reg(MyFactory);