textonpath no longer in canvas
Prev behavior available via utils SkDrawTextOnPath
Bug: skia:7554
Change-Id: I3d71963c632cc947e418757bb83cdc18ec3b184e
Reviewed-on: https://skia-review.googlesource.com/150123
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 787ad04..d34678f 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -28,6 +28,7 @@
#include "SkPathMeasure.h"
#include "SkPicture.h"
#include "SkRandom.h"
+#include "SkTextOnPath.h"
#include "SkTypeface.h"
#include "SkUTF.h"
@@ -261,9 +262,9 @@
paint.setColor(SK_ColorMAGENTA);
paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
matrix.setTranslate(SkIntToScalar(10), SkIntToScalar(10));
- canvas->drawTextOnPath((void*) utf16, sizeof(utf16), path, &matrix, paint);
+ SkDrawTextOnPath((void*)utf16, sizeof(utf16), paint, path, &matrix, canvas);
canvas->translate(0, SkIntToScalar(20));
- canvas->drawTextOnPath((void*) utf16simple, sizeof(utf16simple), path, &matrix, paint);
+ SkDrawTextOnPath((void*) utf16simple, sizeof(utf16simple), paint, path, &matrix, canvas);
canvas->restore();
canvas->translate(0, SkIntToScalar(60));
diff --git a/samplecode/SampleShaderText.cpp b/samplecode/SampleShaderText.cpp
deleted file mode 100644
index 23eac1c..0000000
--- a/samplecode/SampleShaderText.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "Sample.h"
-#include "SkBitmap.h"
-#include "SkCanvas.h"
-#include "SkGradientShader.h"
-#include "SkPath.h"
-
-static void makebm(SkBitmap* bm, int w, int h) {
- bm->allocN32Pixels(w, h);
- bm->eraseColor(SK_ColorTRANSPARENT);
-
- SkCanvas canvas(*bm);
- SkScalar s = SkIntToScalar(w < h ? w : h);
- SkPoint pts[] = { { 0, 0 }, { s, s } };
- SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE };
- SkScalar pos[] = { 0, SK_Scalar1/2, SK_Scalar1 };
- SkPaint paint;
-
- paint.setDither(true);
- paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos,
- SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
- canvas.drawPaint(paint);
-}
-
-static sk_sp<SkShader> MakeBitmapShader(SkShader::TileMode tx, SkShader::TileMode ty,
- int w, int h) {
- static SkBitmap bmp;
- if (bmp.isNull()) {
- makebm(&bmp, w/2, h/4);
- }
- return SkShader::MakeBitmapShader(bmp, tx, ty);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-struct GradData {
- int fCount;
- const SkColor* fColors;
- const SkScalar* fPos;
-};
-
-static const SkColor gColors[] = {
- SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK
-};
-
-static const GradData gGradData[] = {
- { 2, gColors, nullptr },
- { 5, gColors, nullptr },
-};
-
-static sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
- return SkGradientShader::MakeLinear(pts, data.fColors, data.fPos, data.fCount, tm);
-}
-
-static sk_sp<SkShader> MakeRadial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
- SkPoint center;
- center.set(SkScalarAve(pts[0].fX, pts[1].fX),
- SkScalarAve(pts[0].fY, pts[1].fY));
- return SkGradientShader::MakeRadial(center, center.fX, data.fColors,
- data.fPos, data.fCount, tm);
-}
-
-static sk_sp<SkShader> MakeSweep(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
- SkPoint center;
- center.set(SkScalarAve(pts[0].fX, pts[1].fX),
- SkScalarAve(pts[0].fY, pts[1].fY));
- return SkGradientShader::MakeSweep(center.fX, center.fY, data.fColors, data.fPos, data.fCount);
-}
-
-static sk_sp<SkShader> Make2Conical(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
- SkPoint center0, center1;
- center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
- SkScalarAve(pts[0].fY, pts[1].fY));
- center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
- SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
- return SkGradientShader::MakeTwoPointConical(
- center1, (pts[1].fX - pts[0].fX) / 7,
- center0, (pts[1].fX - pts[0].fX) / 2,
- data.fColors, data.fPos, data.fCount, tm);
-}
-
-typedef sk_sp<SkShader> (*GradMaker)(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm);
-
-static const GradMaker gGradMakers[] = {
- MakeLinear, MakeRadial, MakeSweep, Make2Conical
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-class ShaderTextView : public Sample {
-public:
- ShaderTextView() {
- this->setBGColor(0xFFDDDDDD);
- }
-
-protected:
- virtual bool onQuery(Sample::Event* evt) {
- if (Sample::TitleQ(*evt)) {
- Sample::TitleR(evt, "Shader Text");
- return true;
- }
- return this->INHERITED::onQuery(evt);
- }
-
- virtual void onDrawContent(SkCanvas* canvas) {
- const char text[] = "Shaded Text";
- const int textLen = SK_ARRAY_COUNT(text) - 1;
- static int pointSize = 36;
-
- int w = pointSize * textLen;
- int h = pointSize;
-
- SkPoint pts[2] = {
- { 0, 0 },
- { SkIntToScalar(w), SkIntToScalar(h) }
- };
- SkScalar textBase = SkIntToScalar(h/2);
-
- SkShader::TileMode tileModes[] = {
- SkShader::kClamp_TileMode,
- SkShader::kRepeat_TileMode,
- SkShader::kMirror_TileMode
- };
-
- static const int gradCount = SK_ARRAY_COUNT(gGradData) *
- SK_ARRAY_COUNT(gGradMakers);
- static const int bmpCount = SK_ARRAY_COUNT(tileModes) *
- SK_ARRAY_COUNT(tileModes);
- sk_sp<SkShader> shaders[gradCount + bmpCount];
-
- int shdIdx = 0;
- for (size_t d = 0; d < SK_ARRAY_COUNT(gGradData); ++d) {
- for (size_t m = 0; m < SK_ARRAY_COUNT(gGradMakers); ++m) {
- shaders[shdIdx++] = gGradMakers[m](pts,
- gGradData[d],
- SkShader::kClamp_TileMode);
- }
- }
- for (size_t tx = 0; tx < SK_ARRAY_COUNT(tileModes); ++tx) {
- for (size_t ty = 0; ty < SK_ARRAY_COUNT(tileModes); ++ty) {
- shaders[shdIdx++] = MakeBitmapShader(tileModes[tx],
- tileModes[ty],
- w/8, h);
- }
- }
-
- SkPaint paint;
- paint.setDither(true);
- paint.setAntiAlias(true);
- paint.setTextSize(SkIntToScalar(pointSize));
-
- canvas->save();
- canvas->translate(SkIntToScalar(20), SkIntToScalar(10));
-
- SkPath path;
- path.arcTo(SkRect::MakeXYWH(SkIntToScalar(-40), SkIntToScalar(15),
- SkIntToScalar(300), SkIntToScalar(90)),
- SkIntToScalar(225), SkIntToScalar(90),
- false);
- path.close();
-
- static const int testsPerCol = 8;
- static const int rowHeight = 60;
- static const int colWidth = 300;
- canvas->save();
- for (size_t s = 0; s < SK_ARRAY_COUNT(shaders); s++) {
- canvas->save();
- size_t i = 2*s;
- canvas->translate(SkIntToScalar((i / testsPerCol) * colWidth),
- SkIntToScalar((i % testsPerCol) * rowHeight));
- paint.setShader(shaders[s]);
- canvas->drawText(text, textLen, 0, textBase, paint);
- canvas->restore();
- canvas->save();
- ++i;
- canvas->translate(SkIntToScalar((i / testsPerCol) * colWidth),
- SkIntToScalar((i % testsPerCol) * rowHeight));
- canvas->drawTextOnPath(text, textLen, path, nullptr, paint);
- canvas->restore();
- }
- canvas->restore();
- }
-
-private:
- typedef Sample INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-DEF_SAMPLE( return new ShaderTextView(); )
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index e4f0b23..11d4279 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -12,6 +12,7 @@
#include "SkWriteBuffer.h"
#include "SkGradientShader.h"
#include "SkPaint.h"
+#include "SkTextOnPath.h"
#include "SkVertices.h"
#include "sk_tool_utils.h"
@@ -261,14 +262,11 @@
SkScalar x = 50;
paint.setColor(0xFF008800);
- canvas->drawTextOnPathHV(text, len, path,
- x, paint.getTextSize()*2/3, paint);
+ SkDrawTextOnPathHV(text, len, paint, path, x, paint.getTextSize()*2/3, canvas);
paint.setColor(SK_ColorRED);
- canvas->drawTextOnPathHV(text, len, path,
- x + 60, 0, paint);
+ SkDrawTextOnPathHV(text, len, paint, path, x + 60, 0, canvas);
paint.setColor(SK_ColorBLUE);
- canvas->drawTextOnPathHV(text, len, path,
- x + 120, -paint.getTextSize()*2/3, paint);
+ SkDrawTextOnPathHV(text, len, paint, path, x + 120, -paint.getTextSize()*2/3, canvas);
path.offset(0, 200);
paint.setTextAlign(SkPaint::kRight_Align);
@@ -284,21 +282,21 @@
paint.setStyle(SkPaint::kFill_Style);
paint.setTextSize(50);
- canvas->drawTextOnPath(text, len, path, nullptr, paint);
+ SkDrawTextOnPath(text, len, paint, path, nullptr, canvas);
paint.setColor(SK_ColorRED);
matrix.setScale(-SK_Scalar1, SK_Scalar1);
matrix.postTranslate(pathLen, 0);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
+ SkDrawTextOnPath(text, len, paint, path, &matrix, canvas);
paint.setColor(SK_ColorBLUE);
matrix.setScale(SK_Scalar1, -SK_Scalar1);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
+ SkDrawTextOnPath(text, len, paint, path, &matrix, canvas);
paint.setColor(0xFF008800);
matrix.setScale(-SK_Scalar1, -SK_Scalar1);
matrix.postTranslate(pathLen, 0);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
+ SkDrawTextOnPath(text, len, paint, path, &matrix, canvas);
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp
deleted file mode 100644
index e222237..0000000
--- a/samplecode/SampleTextOnPath.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "Sample.h"
-#include "SkBlurMask.h"
-#include "SkBlurDrawLooper.h"
-#include "SkCanvas.h"
-#include "SkPath.h"
-#include "SkPathMeasure.h"
-
-#define REPEAT_COUNT 1
-
-static void textStrokePath(SkCanvas* canvas) {
- SkPaint paint;
- SkPath path;
- SkRect rect;
-
- canvas->save();
- canvas->scale(SkIntToScalar(250),SkIntToScalar(250));
-
- rect.set(0.0f, 0.21f,
- 0.78f, 0.99f);
-
- path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350));
-
- paint.setAntiAlias(true);
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setColor(0xFFFF0000);
- paint.setTextSize(0.085f);
- paint.setStrokeWidth(.005f);
-
- canvas->drawPath(path, paint);
-
- paint.setLooper(SkBlurDrawLooper::Make(SK_ColorBLACK, SkBlurMask::ConvertRadiusToSigma(0.002f),
- 0.0f, 0.0f));
-
- const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
- size_t len = strlen(text);
-
- canvas->drawTextOnPathHV(text, len, path, 0,
- -0.025f, paint);
- canvas->restore();
-}
-
-static void textPathMatrix(SkCanvas* canvas) {
- SkPaint paint;
- SkPath path;
- SkMatrix matrix;
-
- path.moveTo(SkIntToScalar(050), SkIntToScalar(200));
- path.quadTo(SkIntToScalar(250), SkIntToScalar(000),
- SkIntToScalar(450), SkIntToScalar(200));
-
- paint.setAntiAlias(true);
-
- paint.setStyle(SkPaint::kStroke_Style);
- canvas->drawPath(path, paint);
- paint.setStyle(SkPaint::kFill_Style);
- paint.setTextSize(SkIntToScalar(48));
- paint.setTextAlign(SkPaint::kRight_Align);
-
- const char* text = "Reflection";
- size_t len = strlen(text);
-
- SkPathMeasure meas(path, false);
- SkScalar pathLen = meas.getLength();
-
- canvas->drawTextOnPath(text, len, path, nullptr, paint);
-
- paint.setColor(SK_ColorRED);
- matrix.setScale(-SK_Scalar1, SK_Scalar1);
- matrix.postTranslate(pathLen, 0);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
-
- paint.setColor(SK_ColorBLUE);
- matrix.setScale(SK_Scalar1, -SK_Scalar1);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
-
- paint.setColor(SK_ColorGREEN);
- matrix.setScale(-SK_Scalar1, -SK_Scalar1);
- matrix.postTranslate(pathLen, 0);
- canvas->drawTextOnPath(text, len, path, &matrix, paint);
-}
-
-class TextOnPathView : public Sample {
-public:
- SkPath fPath;
- SkScalar fHOffset;
-
-protected:
- void onOnceBeforeDraw() override {
- SkRect r;
- r.set(SkIntToScalar(100), SkIntToScalar(100),
- SkIntToScalar(300), SkIntToScalar(300));
- fPath.addOval(r);
- fPath.offset(SkIntToScalar(-50), SkIntToScalar(-50));
-
- fHOffset = SkIntToScalar(50);
- }
-
- bool onQuery(Sample::Event* evt) override {
- if (Sample::TitleQ(*evt)) {
- Sample::TitleR(evt, "Text On Path");
- return true;
- }
- return this->INHERITED::onQuery(evt);
- }
-
- void onDrawContent(SkCanvas* canvas) override {
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setTextSize(SkIntToScalar(48));
-
- const char* text = "Hamburgefons";
- size_t len = strlen(text);
-
- for (int j = 0; j < REPEAT_COUNT; j++) {
- SkScalar x = fHOffset;
-
- paint.setColor(SK_ColorBLACK);
- canvas->drawTextOnPathHV(text, len, fPath,
- x, paint.getTextSize()/2, paint);
-
- paint.setColor(SK_ColorRED);
- canvas->drawTextOnPathHV(text, len, fPath,
- x + SkIntToScalar(50), 0, paint);
-
- paint.setColor(SK_ColorBLUE);
- canvas->drawTextOnPathHV(text, len, fPath,
- x + SkIntToScalar(100), -paint.getTextSize()/2, paint);
- }
-
- paint.setColor(SK_ColorGREEN);
- paint.setStyle(SkPaint::kStroke_Style);
- canvas->drawPath(fPath, paint);
-
- canvas->translate(SkIntToScalar(275), 0);
- textStrokePath(canvas);
-
- canvas->translate(SkIntToScalar(-275), SkIntToScalar(250));
- textPathMatrix(canvas);
- }
-
- Sample::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
- fHints += 1;
- return this->INHERITED::onFindClickHandler(x, y, modi);
- }
-
-private:
- int fHints;
- typedef Sample INHERITED;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-
-DEF_SAMPLE( return new TextOnPathView(); )