Change shadow tessellators to use SkColor and move to util.

BUG=skia:6119

Change-Id: I4c4a8933c663ccc057596318a06c538175b9f16b
Reviewed-on: https://skia-review.googlesource.com/7726
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
index 1441a75..502b6e5 100755
--- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
+++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
@@ -41,8 +41,13 @@
                 fragBuilder->codeAppend("factor = smoothstep(factor, 0.0, 1.0);");
                 break;
         }
-        fragBuilder->codeAppendf("%s = factor*vec4(0.0, 0.0, 0.0, color.a);",
-                                 args.fOutputColor);
+        if (!args.fGpImplementsDistanceVector) {
+            fragBuilder->codeAppendf("%s = factor*vec4(0.0, 0.0, 0.0, color.g);",
+                                     args.fOutputColor);
+        } else {
+            fragBuilder->codeAppendf("%s = factor*vec4(0.0, 0.0, 0.0, color.a);",
+                                     args.fOutputColor);
+        }
     }
 
 protected:
diff --git a/src/gpu/effects/GrShadowTessellator.cpp b/src/gpu/effects/GrShadowTessellator.cpp
deleted file mode 100755
index a51a66a..0000000
--- a/src/gpu/effects/GrShadowTessellator.cpp
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "GrShadowTessellator.h"
-#include "GrPathUtils.h"
-
-#include "SkGeometry.h"
-
-static bool compute_normal(const SkPoint& p0, const SkPoint& p1, SkScalar radius, SkScalar dir,
-                           SkVector* newNormal) {
-    SkVector normal;
-    // compute perpendicular
-    normal.fX = p0.fY - p1.fY;
-    normal.fY = p1.fX - p0.fX;
-    if (!normal.normalize()) {
-        return false;
-    }
-    normal *= radius*dir;
-    *newNormal = normal;
-    return true;
-}
-
-static void compute_radial_steps(const SkVector& v1, const SkVector& v2, SkScalar r,
-                                 SkScalar* rotSin, SkScalar* rotCos, int* n) {
-    const SkScalar kRecipPixelsPerArcSegment = 0.25f;
-
-    SkScalar rCos = v1.dot(v2);
-    SkScalar rSin = v1.cross(v2);
-    SkScalar theta = SkScalarATan2(rSin, rCos);
-
-    SkScalar steps = r*theta*kRecipPixelsPerArcSegment;
-
-    SkScalar dTheta = theta / steps;
-    *rotSin = SkScalarSinCos(dTheta, rotCos);
-    *n = SkScalarFloorToInt(steps);
-}
-
-GrAmbientShadowTessellator::GrAmbientShadowTessellator(const SkPath& path,
-                                                       SkScalar radius,
-                                                       GrColor umbraColor,
-                                                       GrColor penumbraColor,
-                                                       bool transparent)
-    : fRadius(radius)
-    , fUmbraColor(umbraColor)
-    , fPenumbraColor(penumbraColor)
-    , fTransparent(transparent)
-    , fPrevInnerIndex(-1) {
-
-    // Outer ring: 3*numPts
-    // Middle ring: numPts
-    fPositions.setReserve(4 * path.countPoints());
-    fColors.setReserve(4 * path.countPoints());
-    // Outer ring: 12*numPts
-    // Middle ring: 0
-    fIndices.setReserve(12 * path.countPoints());
-
-    fInitPoints.setReserve(3);
-
-    // walk around the path, tessellate and generate outer ring
-    // if original path is transparent, will accumulate sum of points for centroid
-    SkPath::Iter iter(path, true);
-    SkPoint pts[4];
-    SkPath::Verb verb;
-    if (fTransparent) {
-        *fPositions.push() = SkPoint::Make(0, 0);
-        *fColors.push() = umbraColor;
-        fCentroidCount = 0;
-    }
-    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
-        switch (verb) {
-            case SkPath::kLine_Verb:
-                this->handleLine(pts[1]);
-                break;
-            case SkPath::kQuad_Verb:
-                this->handleQuad(pts);
-                break;
-            case SkPath::kCubic_Verb:
-                this->handleCubic(pts);
-                break;
-            case SkPath::kConic_Verb:
-                this->handleConic(pts, iter.conicWeight());
-                break;
-            case SkPath::kMove_Verb:
-            case SkPath::kClose_Verb:
-            case SkPath::kDone_Verb:
-                break;
-        }
-    }
-
-    SkVector normal;
-    if (compute_normal(fPositions[fPrevInnerIndex], fPositions[fFirstVertex], fRadius, fDirection,
-                       &normal)) {
-        this->addArc(normal);
-
-        // close out previous arc
-        *fPositions.push() = fPositions[fPrevInnerIndex] + normal;
-        *fColors.push() = fPenumbraColor;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-
-        // add final edge
-        *fPositions.push() = fPositions[fFirstVertex] + normal;
-        *fColors.push() = fPenumbraColor;
-
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fFirstVertex;
-
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-        *fIndices.push() = fFirstVertex;
-    }
-
-    // finalize centroid
-    if (fTransparent) {
-        fPositions[0] *= SkScalarFastInvert(fCentroidCount);
-
-        *fIndices.push() = 0;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fFirstVertex;
-    }
-
-    // final fan
-    if (fPositions.count() >= 3) {
-        fPrevInnerIndex = fFirstVertex;
-        fPrevNormal = normal;
-        this->addArc(fFirstNormal);
-
-        *fIndices.push() = fFirstVertex;
-        *fIndices.push() = fPositions.count() - 1;
-        *fIndices.push() = fFirstVertex + 1;
-    }
-}
-
-// tesselation tolerance values, in device space pixels
-static const SkScalar kQuadTolerance = 0.2f;
-static const SkScalar kCubicTolerance = 0.2f;
-static const SkScalar kConicTolerance = 0.5f;
-
-void GrAmbientShadowTessellator::handleLine(const SkPoint& p)  {
-    if (fInitPoints.count() < 2) {
-        *fInitPoints.push() = p;
-        return;
-    }
-
-    if (fInitPoints.count() == 2) {
-        // determine if cw or ccw
-        SkVector v0 = fInitPoints[1] - fInitPoints[0];
-        SkVector v1 = p - fInitPoints[0];
-        SkScalar perpDot = v0.fX*v1.fY - v0.fY*v1.fX;
-        if (SkScalarNearlyZero(perpDot)) {
-            // nearly parallel, just treat as straight line and continue
-            fInitPoints[1] = p;
-            return;
-        }
-
-        // if perpDot > 0, winding is ccw
-        fDirection = (perpDot > 0) ? -1 : 1;
-
-        // add first quad
-        if (!compute_normal(fInitPoints[0], fInitPoints[1], fRadius, fDirection,
-                            &fFirstNormal)) {
-            // first two points are incident, make the third point the second and continue
-            fInitPoints[1] = p;
-            return;
-        }
-
-        fFirstVertex = fPositions.count();
-        fPrevNormal = fFirstNormal;
-        fPrevInnerIndex = fFirstVertex;
-
-        *fPositions.push() = fInitPoints[0];
-        *fColors.push() = fUmbraColor;
-        *fPositions.push() = fInitPoints[0] + fFirstNormal;
-        *fColors.push() = fPenumbraColor;
-        if (fTransparent) {
-            fPositions[0] += fInitPoints[0];
-            fCentroidCount = 1;
-        }
-        this->addEdge(fInitPoints[1], fFirstNormal);
-
-        // to ensure we skip this block next time
-        *fInitPoints.push() = p;
-    }
-
-    SkVector normal;
-    if (compute_normal(fPositions[fPrevInnerIndex], p, fRadius, fDirection, &normal)) {
-        this->addArc(normal);
-        this->finishArcAndAddEdge(p, normal);
-    }
-}
-
-void GrAmbientShadowTessellator::handleQuad(const SkPoint pts[3]) {
-    int maxCount = GrPathUtils::quadraticPointCount(pts, kQuadTolerance);
-    fPointBuffer.setReserve(maxCount);
-    SkPoint* target = fPointBuffer.begin();
-    int count = GrPathUtils::generateQuadraticPoints(pts[0], pts[1], pts[2],
-                                                     kQuadTolerance, &target, maxCount);
-    fPointBuffer.setCount(count);
-    for (int i = 0; i < count; i++) {
-        this->handleLine(fPointBuffer[i]);
-    }
-}
-
-void GrAmbientShadowTessellator::handleCubic(SkPoint pts[4]) {
-    int maxCount = GrPathUtils::cubicPointCount(pts, kCubicTolerance);
-    fPointBuffer.setReserve(maxCount);
-    SkPoint* target = fPointBuffer.begin();
-    int count = GrPathUtils::generateCubicPoints(pts[0], pts[1], pts[2], pts[3],
-                                                 kCubicTolerance, &target, maxCount);
-    fPointBuffer.setCount(count);
-    for (int i = 0; i < count; i++) {
-        this->handleLine(fPointBuffer[i]);
-    }
-}
-
-void GrAmbientShadowTessellator::handleConic(SkPoint pts[3], SkScalar w) {
-    SkAutoConicToQuads quadder;
-    const SkPoint* quads = quadder.computeQuads(pts, w, kConicTolerance);
-    SkPoint lastPoint = *(quads++);
-    int count = quadder.countQuads();
-    for (int i = 0; i < count; ++i) {
-        SkPoint quadPts[3];
-        quadPts[0] = lastPoint;
-        quadPts[1] = quads[0];
-        quadPts[2] = i == count - 1 ? pts[2] : quads[1];
-        this->handleQuad(quadPts);
-        lastPoint = quadPts[2];
-        quads += 2;
-    }
-}
-
-void GrAmbientShadowTessellator::addArc(const SkVector& nextNormal) {
-    // fill in fan from previous quad
-    SkScalar rotSin, rotCos;
-    int numSteps;
-    compute_radial_steps(fPrevNormal, nextNormal, fRadius, &rotSin, &rotCos, &numSteps);
-    SkVector prevNormal = fPrevNormal;
-    for (int i = 0; i < numSteps; ++i) {
-        SkVector nextNormal;
-        nextNormal.fX = prevNormal.fX*rotCos - prevNormal.fY*rotSin;
-        nextNormal.fY = prevNormal.fY*rotCos + prevNormal.fX*rotSin;
-        *fPositions.push() = fPositions[fPrevInnerIndex] + nextNormal;
-        *fColors.push() = fPenumbraColor;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-
-        prevNormal = nextNormal;
-    }
-}
-
-void GrAmbientShadowTessellator::finishArcAndAddEdge(const SkPoint& nextPoint,
-                                                     const SkVector& nextNormal) {
-    // close out previous arc
-    *fPositions.push() = fPositions[fPrevInnerIndex] + nextNormal;
-    *fColors.push() = fPenumbraColor;
-    *fIndices.push() = fPrevInnerIndex;
-    *fIndices.push() = fPositions.count() - 2;
-    *fIndices.push() = fPositions.count() - 1;
-
-    this->addEdge(nextPoint, nextNormal);
-}
-
-void GrAmbientShadowTessellator::addEdge(const SkPoint& nextPoint, const SkVector& nextNormal) {
-    // add next quad
-    *fPositions.push() = nextPoint;
-    *fColors.push() = fUmbraColor;
-    *fPositions.push() = nextPoint + nextNormal;
-    *fColors.push() = fPenumbraColor;
-
-    *fIndices.push() = fPrevInnerIndex;
-    *fIndices.push() = fPositions.count() - 3;
-    *fIndices.push() = fPositions.count() - 2;
-
-    *fIndices.push() = fPositions.count() - 3;
-    *fIndices.push() = fPositions.count() - 1;
-    *fIndices.push() = fPositions.count() - 2;
-
-    // if transparent, add point to first one in array and add to center fan
-    if (fTransparent) {
-        fPositions[0] += nextPoint;
-        ++fCentroidCount;
-
-        *fIndices.push() = 0;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-    }
-
-    fPrevInnerIndex = fPositions.count() - 2;
-    fPrevNormal = nextNormal;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-GrSpotShadowTessellator::GrSpotShadowTessellator(const SkPath& path,
-                                                 SkScalar scale, const SkVector& translate,
-                                                 SkScalar radius,
-                                                 GrColor umbraColor, GrColor penumbraColor,
-                                                 bool /* transparent */)
-    : fRadius(radius)
-    , fUmbraColor(umbraColor)
-    , fPenumbraColor(penumbraColor)
-    , fPrevInnerIndex(-1) {
-
-    // TODO: calculate these better
-    // Outer ring: 3*numPts
-    // Inner ring: numPts
-    fPositions.setReserve(4 * path.countPoints());
-    fColors.setReserve(4 * path.countPoints());
-    // Outer ring: 12*numPts
-    // Inner ring: 0
-    fIndices.setReserve(12 * path.countPoints());
-
-    fInitPoints.setReserve(3);
-
-    fClipPolygon.setReserve(path.countPoints());
-    this->computeClipBounds(path);
-    fCentroid *= scale;
-    fCentroid += translate;
-
-    // walk around the path, tessellate and generate inner and outer rings
-    SkPath::Iter iter(path, true);
-    SkPoint pts[4];
-    SkPath::Verb verb;
-    *fPositions.push() = fCentroid;
-    *fColors.push() = fUmbraColor;
-    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
-        switch (verb) {
-            case SkPath::kLine_Verb:
-                this->handleLine(scale, translate, pts[1]);
-                break;
-            case SkPath::kQuad_Verb:
-                this->handleQuad(scale, translate, pts);
-                break;
-            case SkPath::kCubic_Verb:
-                this->handleCubic(scale, translate, pts);
-                break;
-            case SkPath::kConic_Verb:
-                this->handleConic(scale, translate, pts, iter.conicWeight());
-                break;
-            case SkPath::kMove_Verb:
-            case SkPath::kClose_Verb:
-            case SkPath::kDone_Verb:
-                break;
-        }
-    }
-
-    SkVector normal;
-    if (compute_normal(fPrevPoint, fFirstPoint, fRadius, fDirection,
-                        &normal)) {
-        this->addArc(normal);
-
-        // close out previous arc
-        *fPositions.push() = fPrevPoint + normal;
-        *fColors.push() = fPenumbraColor;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-
-        // add final edge
-        *fPositions.push() = fFirstPoint + normal;
-        *fColors.push() = fPenumbraColor;
-
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fFirstVertex;
-
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-        *fIndices.push() = fFirstVertex;
-
-        // add to center fan
-        *fIndices.push() = 0;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fFirstVertex;
-    }
-
-    // final fan
-    if (fPositions.count() >= 3) {
-        fPrevInnerIndex = fFirstVertex;
-        fPrevPoint = fFirstPoint;
-        fPrevNormal = normal;
-        this->addArc(fFirstNormal);
-
-        *fIndices.push() = fFirstVertex;
-        *fIndices.push() = fPositions.count() - 1;
-        *fIndices.push() = fFirstVertex + 1;
-    }
-}
-
-void GrSpotShadowTessellator::computeClipBounds(const SkPath& path) {
-    // walk around the path and compute clip polygon
-    // if original path is transparent, will accumulate sum of points for centroid
-    SkPath::Iter iter(path, true);
-    SkPoint pts[4];
-    SkPath::Verb verb;
-
-    fCentroid = SkPoint::Make(0, 0);
-    int centroidCount = 0;
-    fClipPolygon.reset();
-
-    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
-        switch (verb) {
-            case SkPath::kMove_Verb:
-                break;
-            case SkPath::kLine_Verb:
-                fCentroid += pts[1];
-                centroidCount++;
-                *fClipPolygon.push() = pts[1];
-                break;
-            case SkPath::kQuad_Verb:
-                fCentroid += pts[1];
-                fCentroid += pts[2];
-                centroidCount += 2;
-                *fClipPolygon.push() = pts[2];
-                break;
-            case SkPath::kConic_Verb:
-                fCentroid += pts[1];
-                fCentroid += pts[2];
-                centroidCount += 2;
-                *fClipPolygon.push() = pts[2];
-                break;
-            case SkPath::kCubic_Verb:
-                fCentroid += pts[1];
-                fCentroid += pts[2];
-                fCentroid += pts[3];
-                centroidCount += 3;
-                *fClipPolygon.push() = pts[3];
-                break;
-            case SkPath::kClose_Verb:
-                break;
-            default:
-                SkDEBUGFAIL("unknown verb");
-        }
-    }
-
-    fCentroid *= SkScalarInvert(centroidCount);
-}
-
-void GrSpotShadowTessellator::mapPoints(SkScalar scale, const SkVector& xlate,
-                                        SkPoint* pts, int count) {
-    // TODO: vectorize
-    for (int i = 0; i < count; ++i) {
-        pts[i] *= scale;
-        pts[i] += xlate;
-    }
-}
-
-void GrSpotShadowTessellator::handleLine(const SkPoint& p) {
-    if (fInitPoints.count() < 2) {
-        *fInitPoints.push() = p;
-        return;
-    }
-
-    if (fInitPoints.count() == 2) {
-        // determine if cw or ccw
-        SkVector v0 = fInitPoints[1] - fInitPoints[0];
-        SkVector v1 = p - fInitPoints[0];
-        SkScalar perpDot = v0.fX*v1.fY - v0.fY*v1.fX;
-        if (SkScalarNearlyZero(perpDot)) {
-            // nearly parallel, just treat as straight line and continue
-            fInitPoints[1] = p;
-            return;
-        }
-
-        // if perpDot > 0, winding is ccw
-        fDirection = (perpDot > 0) ? -1 : 1;
-
-        // add first quad
-        if (!compute_normal(fInitPoints[0], fInitPoints[1], fRadius, fDirection,
-                            &fFirstNormal)) {
-            // first two points are incident, make the third point the second and continue
-            fInitPoints[1] = p;
-            return;
-        }
-
-        fFirstPoint = fInitPoints[0];
-        fFirstVertex = fPositions.count();
-        fPrevNormal = fFirstNormal;
-        fPrevPoint = fFirstPoint;
-        fPrevInnerIndex = fFirstVertex;
-
-        this->addInnerPoint(fFirstPoint, fUmbraColor, fRadius);
-        SkPoint newPoint = fFirstPoint + fFirstNormal;
-        *fPositions.push() = newPoint;
-        *fColors.push() = fPenumbraColor;
-        this->addEdge(fInitPoints[1], fFirstNormal);
-
-        // to ensure we skip this block next time
-        *fInitPoints.push() = p;
-    }
-
-    SkVector normal;
-    if (compute_normal(fPrevPoint, p, fRadius, fDirection, &normal)) {
-        this->addArc(normal);
-        this->finishArcAndAddEdge(p, normal);
-    }
-}
-
-void GrSpotShadowTessellator::handleLine(SkScalar scale, const SkVector& xlate, SkPoint p) {
-    this->mapPoints(scale, xlate, &p, 1);
-    this->handleLine(p);
-}
-
-void GrSpotShadowTessellator::handleQuad(const SkPoint pts[3]) {
-    int maxCount = GrPathUtils::quadraticPointCount(pts, kQuadTolerance);
-    fPointBuffer.setReserve(maxCount);
-    SkPoint* target = fPointBuffer.begin();
-    int count = GrPathUtils::generateQuadraticPoints(pts[0], pts[1], pts[2],
-                                                     kQuadTolerance, &target, maxCount);
-    fPointBuffer.setCount(count);
-    for (int i = 0; i < count; i++) {
-        this->handleLine(fPointBuffer[i]);
-    }
-}
-
-void GrSpotShadowTessellator::handleQuad(SkScalar scale, const SkVector& xlate, SkPoint pts[3]) {
-    this->mapPoints(scale, xlate, pts, 3);
-    this->handleQuad(pts);
-}
-
-void GrSpotShadowTessellator::handleCubic(SkScalar scale, const SkVector& xlate, SkPoint pts[4]) {
-    this->mapPoints(scale, xlate, pts, 4);
-    int maxCount = GrPathUtils::cubicPointCount(pts, kCubicTolerance);
-    fPointBuffer.setReserve(maxCount);
-    SkPoint* target = fPointBuffer.begin();
-    int count = GrPathUtils::generateCubicPoints(pts[0], pts[1], pts[2], pts[3],
-                                                 kCubicTolerance, &target, maxCount);
-    fPointBuffer.setCount(count);
-    for (int i = 0; i < count; i++) {
-        this->handleLine(fPointBuffer[i]);
-    }
-}
-
-void GrSpotShadowTessellator::handleConic(SkScalar scale, const SkVector& xlate,
-                                          SkPoint pts[3], SkScalar w) {
-    this->mapPoints(scale, xlate, pts, 3);
-    SkAutoConicToQuads quadder;
-    const SkPoint* quads = quadder.computeQuads(pts, w, kConicTolerance);
-    SkPoint lastPoint = *(quads++);
-    int count = quadder.countQuads();
-    for (int i = 0; i < count; ++i) {
-        SkPoint quadPts[3];
-        quadPts[0] = lastPoint;
-        quadPts[1] = quads[0];
-        quadPts[2] = i == count - 1 ? pts[2] : quads[1];
-        this->handleQuad(quadPts);
-        lastPoint = quadPts[2];
-        quads += 2;
-    }
-}
-
-void GrSpotShadowTessellator::addInnerPoint(const SkPoint& pathPoint, GrColor umbraColor,
-                                            SkScalar radius) {
-    SkVector v = fCentroid - pathPoint;
-    SkScalar distance = v.length();
-    if (distance < radius) {
-        *fPositions.push() = fCentroid;
-        *fColors.push() = umbraColor; // fix this
-        // TODO: deal with fanning from centroid
-    } else {
-        SkScalar t = radius / distance;
-        v *= t;
-        SkPoint innerPoint = pathPoint + v;
-        *fPositions.push() = innerPoint;
-        *fColors.push() = umbraColor;
-    }
-    fPrevPoint = pathPoint;
-}
-
-void GrSpotShadowTessellator::addArc(const SkVector& nextNormal) {
-    // fill in fan from previous quad
-    SkScalar rotSin, rotCos;
-    int numSteps;
-    compute_radial_steps(fPrevNormal, nextNormal, fRadius, &rotSin, &rotCos, &numSteps);
-    SkVector prevNormal = fPrevNormal;
-    for (int i = 0; i < numSteps; ++i) {
-        SkVector nextNormal;
-        nextNormal.fX = prevNormal.fX*rotCos - prevNormal.fY*rotSin;
-        nextNormal.fY = prevNormal.fY*rotCos + prevNormal.fX*rotSin;
-        *fPositions.push() = fPrevPoint + nextNormal;
-        *fColors.push() = fPenumbraColor;
-        *fIndices.push() = fPrevInnerIndex;
-        *fIndices.push() = fPositions.count() - 2;
-        *fIndices.push() = fPositions.count() - 1;
-
-        prevNormal = nextNormal;
-    }
-}
-
-void GrSpotShadowTessellator::finishArcAndAddEdge(const SkPoint& nextPoint,
-                                                  const SkVector& nextNormal) {
-    // close out previous arc
-    SkPoint newPoint = fPrevPoint + nextNormal;
-    *fPositions.push() = newPoint;
-    *fColors.push() = fPenumbraColor;
-    *fIndices.push() = fPrevInnerIndex;
-    *fIndices.push() = fPositions.count() - 2;
-    *fIndices.push() = fPositions.count() - 1;
-
-    this->addEdge(nextPoint, nextNormal);
-}
-
-void GrSpotShadowTessellator::addEdge(const SkPoint& nextPoint, const SkVector& nextNormal) {
-    // add next quad
-    this->addInnerPoint(nextPoint, fUmbraColor, fRadius);
-    SkPoint newPoint = nextPoint + nextNormal;
-    *fPositions.push() = newPoint;
-    *fColors.push() = fPenumbraColor;
-
-    *fIndices.push() = fPrevInnerIndex;
-    *fIndices.push() = fPositions.count() - 3;
-    *fIndices.push() = fPositions.count() - 2;
-
-    *fIndices.push() = fPositions.count() - 3;
-    *fIndices.push() = fPositions.count() - 1;
-    *fIndices.push() = fPositions.count() - 2;
-
-    // add to center fan
-    *fIndices.push() = 0;
-    *fIndices.push() = fPrevInnerIndex;
-    *fIndices.push() = fPositions.count() - 2;
-
-    fPrevInnerIndex = fPositions.count() - 2;
-    fPrevNormal = nextNormal;
-}
diff --git a/src/gpu/effects/GrShadowTessellator.h b/src/gpu/effects/GrShadowTessellator.h
deleted file mode 100755
index c2acde7..0000000
--- a/src/gpu/effects/GrShadowTessellator.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrShadowTessellator_DEFINED
-#define GrShadowTessellator_DEFINED
-
-#include "SkTDArray.h"
-#include "SkPoint.h"
-
-#include "GrColor.h"
-
-class SkMatrix;
-class SkPath;
-
-// TODO: derive these two classes from a base class containing common elements
-
-/**
- * This class generates an ambient shadow for a path by walking the path, outsetting by the
- * radius, and setting inner and outer colors to umbraColor and penumbraColor, respectively.
- * If transparent is true, then the center of the ambient shadow will be filled in.
- */
-class GrAmbientShadowTessellator {
-public:
-    GrAmbientShadowTessellator(const SkPath& path, SkScalar radius, GrColor umbraColor,
-                               GrColor penumbraColor, bool transparent);
-
-    int      vertexCount() { return fPositions.count(); }
-    SkPoint* positions() { return fPositions.begin(); }
-    GrColor* colors() { return fColors.begin(); }
-    int      indexCount() { return fIndices.count(); }
-    uint16_t* indices() { return fIndices.begin(); }
-
-private:
-    void handleLine(const SkPoint& p);
-
-    void handleQuad(const SkPoint pts[3]);
-
-    void handleCubic(SkPoint pts[4]);
-
-    void handleConic(SkPoint pts[3], SkScalar w);
-
-    void addArc(const SkVector& nextNormal);
-    void finishArcAndAddEdge(const SkVector& nextPoint, const SkVector& nextNormal);
-    void addEdge(const SkVector& nextPoint, const SkVector& nextNormal);
-
-    SkScalar            fRadius;
-    GrColor             fUmbraColor;
-    GrColor             fPenumbraColor;
-    bool                fTransparent;
-
-    SkTDArray<SkPoint>  fPositions;
-    SkTDArray<GrColor>  fColors;
-    SkTDArray<uint16_t> fIndices;
-
-    int                 fPrevInnerIndex;
-    SkVector            fPrevNormal;
-    int                 fFirstVertex;
-    SkVector            fFirstNormal;
-    SkScalar            fDirection;
-    int                 fCentroidCount;
-
-    // first three points
-    SkTDArray<SkPoint>  fInitPoints;
-    // temporary buffer
-    SkTDArray<SkPoint>  fPointBuffer;
-};
-
-/**
- * This class generates an spot shadow for a path by walking the transformed path, further 
- * transforming by the scale and translation, and outsetting and insetting by a radius.
- * The center will be clipped against the original path unless transparent is true.
- */
-class GrSpotShadowTessellator {
-public:
-    GrSpotShadowTessellator(const SkPath& path, SkScalar scale, const SkVector& translate,
-                            SkScalar radius, GrColor umbraColor, GrColor penumbraColor,
-                            bool transparent);
-
-    int      vertexCount() { return fPositions.count(); }
-    SkPoint* positions() { return fPositions.begin(); }
-    GrColor* colors() { return fColors.begin(); }
-    int      indexCount() { return fIndices.count(); }
-    uint16_t* indices() { return fIndices.begin(); }
-
-private:
-    void computeClipBounds(const SkPath& path);
-
-    void handleLine(const SkPoint& p);
-    void handleLine(SkScalar scale, const SkVector& xlate, SkPoint p);
-
-    void handleQuad(const SkPoint pts[3]);
-    void handleQuad(SkScalar scale, const SkVector& xlate, SkPoint pts[3]);
-
-    void handleCubic(SkScalar scale, const SkVector& xlate, SkPoint pts[4]);
-
-    void handleConic(SkScalar scale, const SkVector& xlate, SkPoint pts[3], SkScalar w);
-
-    void mapPoints(SkScalar scale, const SkVector& xlate, SkPoint* pts, int count);
-    void addInnerPoint(const SkPoint& pathPoint, GrColor umbraColor, SkScalar radiusSqd);
-    void addArc(const SkVector& nextNormal);
-    void finishArcAndAddEdge(const SkVector& nextPoint, const SkVector& nextNormal);
-    void addEdge(const SkVector& nextPoint, const SkVector& nextNormal);
-
-    SkScalar            fRadius;
-    GrColor             fUmbraColor;
-    GrColor             fPenumbraColor;
-
-    SkTDArray<SkPoint>  fPositions;
-    SkTDArray<GrColor>  fColors;
-    SkTDArray<uint16_t> fIndices;
-
-    int                 fPrevInnerIndex;
-    SkPoint             fPrevPoint;
-    SkVector            fPrevNormal;
-    int                 fFirstVertex;
-    SkPoint             fFirstPoint;
-    SkVector            fFirstNormal;
-    SkScalar            fDirection;
-
-    SkPoint             fCentroid;
-    SkTDArray<SkPoint>  fClipPolygon;
-
-    // first three points
-    SkTDArray<SkPoint>  fInitPoints;
-    // temporary buffer
-    SkTDArray<SkPoint>  fPointBuffer;
-};
-
-#endif