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(); )